![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo O_MACRO Nutzer, in der Anlage habe ich ein kurzes DEMO-Programm angehaengt, um die 2-te Hardwaremaessig implementierte Seriellle Schnittstelle (ESCI) kennen zu lernen. Vielleicht hilft es dem einen oder anderen diese Schnittstelle besser u. schneller zu verstehen. Ich habe doch einige Zeit gebraucht, dabei ist dieses Programm entstanden. Die Bedienungsanleitung OPEN-MAXI Version 1.1;Erstellt ab 6. Juni 2012; von Dietmar und Infos hier aus dem Forum hatten mir sehr geholfen voran zu kommen. Unterschied der beiden Schnittstellen ' Semiwire-Schnittstelle: ' bez. Baudrate: nur 9600 Baud verfuegbar, keine andere Baudrate moeglich ' bez. GET: kein Empfangsbuffer, deshalb holt GET direkt die Daten vom Eingang ab, u. das funktioniert auch bei 9600Baud recht gut, wie ich testen konnte ' ESCI- Schnittstelle: ' bez. Baudrate: 300, 600, 1200, 2400, 4800,9600,19200, 38400 einstellbar ' bez. GET: hat 8 Byte Empfangsbuffer, GET holt Daten vom Empfangsbuffer und nicht direkt vom Eingang ab Meine Anwendung mit der O_Macro: FPV Modellflug mit Antennen tracking der Empfangsantenne der Bodenstation anhand der empfangenen GPS Daten vom Modell. Mein vorhandener GPS Empfaenger hat 38400 Baudrate. Deshalb wollte ich im F-Modell ursprünglich die GPS Daten ueber die ESCI Schnittstelle der O_NMACRO einlesen, die erforderlichen Daten aus dem NMEA $GPGGA Datenstrom selektieren und mit Datenrate z.B. 1200 Baud über die SemiWire -RS232 die für das tracking erforderlichen Daten per Audiomodem zur Bodenstation senden. Da das nicht möglich ist, beorge ich mir ein neues GPS Modul mit 9600 Baudrate RS232 Schnittstelle, lese diese über die Semiwire Schnittstelle ein und sende über die ESCI Schnittstelle die erforderlichen Daten mit 1200 Baud an das Audio-Modem. In Der Bodenstation ist dann eine weitere O_MACRO. MfG Joe Fenk ##################### ' RSDEMO001.BAS Demoprogramm Di.11.11.2014 Josef Fenk ' 210 Basic- Bytes, 0-Sys Bytes und 2 RAM Bytes belegt ' Demoprogramm, zum besseren Verstaendnis der Hardwaremaessig implementierten 2-RS232 Schnittstelle (ESCI) ' an RXD:Pin7/Port13 u. TXD:Pin8/Port14 ' vorallem, wie das mit dem Empfangsbuffer funktioniert ' ' Auf dem P/E-Board kann provisorisch PORT[14] mit PORT[1] verbunden werden, oder wie ' bei mir hatte ich ueber PC_1 die Semiwire RS232 Schnittstelle angesprochen u. darueber auch das Programm geladen ' PC_2 hatte ich ueber ein separates MAX232_Interface verbunden RXD:Pin7/Port13 u. TXD:Pin8/Port14 ; PC_2 auf gleiche Baudrate wie ESCI eingestellt ' Unterschied der beiden Schnittstellen ' Semiwire-Schnittstelle: ' bez. Baudrate: nur 9600 Baud verfuegbar, keine andere Baudrate moeglich ' bez. GET: kein Empfangsbuffer, deshalb holt GET direkt die Daten vom Eingang ab, u. das funktioniert auch bei 9600Baud recht gut ' ESCI- Schnittstelle: ' bez. Baudrate: 300, 600, 1200, 2400, 4800,9600,19200, 38400 verfuegbar ' bez. GET: hat 8 Byte Empfangsbuffer, GET holt Daten vom Empfangsbuffer und nicht direkt vom Eingang ab ' ' --- Betriebssystem konfigurieren ------------------------------------------ INCLUDE "OMAC.DEF" 'Include-Datei mit Definitionen vom April 2010 ' --- Definitionen Variable fuer das Hauptprogramm ' ----Def. WORD Variable ------------------------------------------ ' ----Def. Byte Variable ------------------------------------------ DEFINE DATEN BYTE ' Datenempfangs Variable DEFINE Zaehl BYTE '***** Definition der Digitalen Ein- / Ausgabeports DEFINE Taste PORT[04] 'Warte-Taste ' Programmbeginn UseESCI=ON BAUD R9600 'moeglich sind 300, 600, 1200,2400,4800,9600,19200,38400 Baud #Start Zaehl=0 PRINT "RXD=";RXD 'RXD=-1 falls Daten im E-Buffer, ansonsten 0 PRINT "EsEr=";EsciErr '=-1 falls Daten >8 = Groesse E_Buffer; ansonsten 0 PRINT "EsPt=";Esciptr '=319 Pause 100 WHILE RXD ' die schleife wird max 8 mal durchlaufen falls Dateneinabe >= 8-mal PRINT "vRXD=";RXD 'RXD=-1 solange Daten im E-buffer sind, ansonsten 0 PRINT "vEsEr=";EsciErr '=-1 wenn E-Buffer voll ist, ansonsten 0 PRINT "vEsPt=";Esciptr '=319 GET Daten ' hier werden die Daten aus den Empfangsbuffer geholt PRINT "nRXD=";RXD '=-1 solange noch Daten in den 8 Empgangsbuffern liegen, ansonsten 0 PRINT "nEsEr=";EsciErr '= -1 wenn mit GET 1-tes Byte aus vollem E-Buffer geholt wurde = 0 PRINT "nEsPt=";Esciptr '=319 Zaehl=Zaehl+1 PRINT "Zaehl=";Zaehl,"RX_Dat=";Daten WEND PRINT "hier Daten eingeben" 'Taste "1", "2" etc. druecken usw. bis > 8 Eingaben ' diese werden im 8 Byte grossen Esci Empfangsbuffer abgespeichert ' die ersten 8 Eingaben sind im Empfangsspeicher, die Eingaben darueber gehen verloren #Weiter IF TASTE <> OFF THEN GOTO Weiter Pause 100 PRINT "nach vorne" GOTO Start END |
Antwort schreiben |