 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
tfv
Anmeldungsdatum: 06.01.2008 Beiträge: 16
|
Verfasst am: 06.03.2008, 01:07 Titel: RS232-Kommunikation mit anderem Prozessor |
|
|
Ich möchte über eine RS232-Schnittstelle Daten mit einem anderen Prozessor (AT128Mega auf dem RN 128MegaFunk-Board, geht über serielle Funkverbindung) austauschen.
Dabei soll der externe kleine Prozessor viele Double-Werte an den PC senden, ein Wert ist dabei jeweils 8 Byte lang.
Die Kommunikation muss aufgrund der Menge synchronisiert werden, d.h. ich darf nicht zu viele Daten im Prozessor lossenden, sonst fliesst dort der RS232-Buffer (256 Byte) über, ich darf aber auch nicht zu langsam senden, weil ich das Warten auf einen hinreichend vollen Tastaturpuffer nicht hinbekomme.
Bevor ich mit get einen double-Wert abrufe, muss ich sicher sein, dass 8 Byte im Tastaturpuffer sind, dies kann ich mit EOF nicht detektieren, und LOF und LOC liefern beide jeweils 0, so lange EOF true ist.
Im Moment arbeite ich mit get #1,, (doublewert)
Ich könnte natürlich auch byteweise lesen, muss aber dann die Bytes wieder zu Doublewerten zusammenbauen.
Das File selbst ist mit
myErr = Open Com ("COM1:19200,N,8,1,BIN,RS,CD0,CS0,DS0,TB1024,RB1024" for Binary As #1)
geöffnet.
Was mir auch nicht ganz klar ist: Muss ich zwei verschiedene Channels für die Hin- und Rückübertragung öffnen, oder kommen sich die Daten in einem Channel nicht in die Quere?
Danke für alle Hinweise! |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 06.03.2008, 09:19 Titel: |
|
|
Im grunde sind es 2 Kannäle .. die RXD und die TXD Leitung. Hinzu kommen auf der RS232 noch steuerleitungen (sovern auf dem Board implementiert, was ich grad nicht weis, da ich das board nicht da hab)
Soweit ich weis, ist der UART-Puffer im TM nur 2Byte Gross, wird also über den Interrupt in das Interne SRAM gespeichert (kannst jamal nachschaun, im source, wenn ihn hast) ansonsten solltest es auf jeden fall syncronisieren (wenn du wiederum den Source hast und die Steuerleitungen vorhanden sind). Du könntest die CTS oder RI oder sonstige leitungen nutzen, um zu signalisieren, das Daten vorhanden sind.
Bei der Übertragung musst du auf jeden fall darauf achten, das du nicht zu viele Daten hinein schiebst. Das kann man jedoch kompensieren, indem man die Baud-Rate minimiert, so das (ne nach clock vom AT) genug zeit übrig bleibt für die Programmverarbeitung.
Double sind übrigens nicht 1 Byte Daten, sondern 4 Byte (Long mit Gleitkomma)
Siingle wären 2 Byte (Integer mit Gleitkomma)
Du hast im grunde mehrere Möglichkeiten, wie du die Daten übertragen kannst. Eine davon wäre sie erst mit MemCpy in ein LONG zu transvertieren, udn das selbe im AT mit memcpy wieder rückgäng zu machen.
Hier muss man jedoch darauf achten, das meine eine realyÜbretragungsstybillität nutzt, da sonst ASCII 0 übertragen wird, und bei unsyncronisierter Übertragung immer 0 im Puffer liegt, obwohl kein 0 gesendet wurde.
Volglich solltest du Funktionen nutzen, die im AVR auf jeden fall Interrupts für den UART nutzt. Da es im IBM PC sowas wie Interrupts im vergleich zu AVR's nicht gibt, musst du das über callbacks lösen, die automatisch feuern. Das kann man dann mit einem Interrupt-Call im AVR vergleichen.
Welche art von daten sind es, die du übertragen willst? Steuerdaten, messwerte, ?!?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|