
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo, bisher habe ich meine selbstgebaute Junbo Anzeige mit einem GPS Gerät APN 8 Gerät betrieben, die NMEA Daten wurden von einem CControl/Prozessor von Conrad verarbeitet. Ich brauche nun ein neues GPS Gerät, probiert habe ich Furuno 32 und Garmin 126, leider ohne Erfolg. Beide Geräte habe ich auf 4800 Baud stehen, der CController findet aber nicht die $ Zeichen, ob die NMEA Daten anders gesendet werden, vielleicht im Block oder schneller? Wenn ich die Daten zum PC sende werden sie einwandfrei angezeigt. Können kann mir jemand einen Tip geben? Nachstehend das CC Basic Programm im Quellcode. MfG Paul Honkomp ' OPEN "COM2:4800,N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1 ' OPEN "Com1:9600,N,8,1,BIN,RS" FOR RANDOM AS #2 ' In diesem Programm sind folgende Unterroutinen definiert: ' ' #lese_rmc: Warte auf eine GPRMB-Zeile und merke die Daten. ' Benutzte Variablen: ' zeichen wird ver„ndert. ' wert1 bis wert13 werden ver„ndert. ' ' #lese_rmb: entsprechend lese_rmc ' ' #lese_ztg: entsprechend lese_rmc ' ' #schreibe_rmc: Warte auf eine GPRMB-Zeile und merke die Daten. ' Benutzte Variablen: ' h wird ver„ndert. ' wert1 bis wert16. ' ' #schreibe_rmb: entsprechend schreibe_rmc ' ' #schreibe_ztg: entsprechend schreibe_rmc ' ' #deselect_all: Alle Displays deselektieren. ' ' #display1: Display 1 selektieren. ' Benutzte Variablen: ' display: wird 1. ' ' #display2: Display 2 selektieren. ' Benutzte Variablen: ' display: wird 2. ' ' #select_display: Display selektieren. ' Benutzte Variablen: ' display: Das zu selektierende Display (1 oder 2). ' ' Ich verwende hier nur Bytes, da diese nur jeweils eine der ' spärlichen 24 Speicheradressen verbrauchen. ' Das letzte gelesene zeichen: DEFINE zeichen BYTE ' Pro zeile sind bis zu 13 zeichen fuer irgendwelche Werte vorgesehen: DEFINE wert1 BYTE DEFINE wert2 BYTE DEFINE wert3 BYTE DEFINE wert4 BYTE DEFINE wert5 BYTE DEFINE wert6 BYTE DEFINE wert7 BYTE DEFINE wert8 BYTE DEFINE wert9 BYTE DEFINE wert10 BYTE DEFINE wert11 BYTE DEFINE wert12 BYTE DEFINE wert13 BYTE DEFINE wert14 BYTE DEFINE wert15 BYTE DEFINE wert16 BYTE DEFINE wert17 BYTE DEFINE wert18 BYTE DEFINE wert19 BYTE DEFINE wert20 BYTE DEFINE wert21 BYTE ' Schleifenvariable DEFINE h BYTE ' Aktuelles Display DEFINE display BYTE ' Damit sind 24 der 24 Bytes benutzt. '*** ASCII-Codes *** define A_ &H41 define B_ &H42 define C_ &H43 define D_ &H44 define E_ &H45 define F_ &H46 define G_ &H47 define H_ &H48 define I_ &H49 define J_ &H4A define K_ &H4B define L_ &H4C define M_ &H4D define N_ &H4E define O_ &H4F define P_ &H50 define Q_ &H51 define R_ &H52 define S_ &H53 define T_ &H54 define U_ &H55 define V_ &H56 define W_ &H57 define X_ &H58 define Y_ &H59 define Z_ &H5A ' Kleinbuchstaben: define A_KLEIN &H61 define B_KLEIN &H62 define C_KLEIN &H63 define D_KLEIN &H64 define E_KLEIN &H65 define F_KLEIN &H66 define G_KLEIN &H67 define H_KLEIN &H68 define I_KLEIN &H69 define J_KLEIN &H6A define K_KLEIN &H6B define L_KLEIN &H6C define M_KLEIN &H6D define N_KLEIN &H6E define O_KLEIN &H6F define P_KLEIN &H70 define Q_KLEIN &H71 define R_KLEIN &H72 define S_KLEIN &H73 define T_KLEIN &H74 define U_KLEIN &H75 define V_KLEIN &H76 define W_KLEIN &H77 define X_KLEIN &H78 define Y_KLEIN &H79 define Z_KLEIN &H7A define LEERZ &H20 define MINUS &H2D define NULL &H30 define EINS &H31 define ZWEI &H32 define DREI &H33 define VIER &H34 define FUENF &H35 define SECHS &H36 define SIEBEN &H37 define ACHT &H38 define NEUN &H39 define GLEICH &H3D define DOT &H2E define DOPPELPUNKT &H3A define KOMMA &H2C define DOLLAR &H24 define ESC 27 define LF 10 define CR 13 define CLEAR_DISPLAY 12 define GRAD 227 '============================================================================================ '============================================================================================ #start ' BAUD R4800 ' Senden mit 9600 Baud, empfangen mit 4800 Baud: BAUD &B11000001 ' Eine kleine Animation ' Wenn diese korrekt zu sehen ist, ist die Verbindung zum Display in Ordnung! wert2 = 128 FOR h = 1 TO 2 FOR wert1 = 0 TO 5 wert2 = wert2 XOR (1 shl wert1) PUT CLEAR_DISPLAY PUT wert2 PUT wert2 PUT wert2 PUT wert2 PAUSE 50 / 1 NEXT NEXT '=========================================================================================== #weiter_rma 'weil wenig Speicher wird dieses vorweg abgearbeitet GOSUB lese_neben_ziel_linie 'Falls kein Segelplan eingegeben wurde If wert1 = LEERZ THEN GOTO ohne_plan 'von da weiter_rma GOSUB schreibe_neben_ziel_linie '============================================================= GOSUB lese_rmb 'Falls kein Segelplan eingegeben wurde If wert1 = LEERZ THEN GOTO ohne_plan 'von da weiter_rma GOSUB lese_zeit_ziel GOSUB lese_rmc 'die Schreibfolge erfolgt so, damit die Anzeige Kurs-Ziel + Kurs über Grund 'gleichzeitig angezeigt wird. GOSUB schreibe_speed GOSUB schreibe_kurs_ziel GOSUB schreibe_kurs_grund GOSUB schreibe_meilen_ziel GOTO schreibe_zeit_ziel GOTO weiter_rma '=========================================================================================== ' Die interessanten Zeichen der $GPRMB(a)-Zeile lesen ' Alle Werte auf 0 setzen #lese_neben_ziel_linie wert1 = LEERZ wert2 = LEERZ wert3 = LEERZ wert4 = LEERZ wert5 = LEERZ wert6 = LEERZ wert7 = LEERZ wert8 = LEERZ wert9 = LEERZ wert10 = LEERZ wert11 = LEERZ wert12 = LEERZ wert13 = LEERZ wert14 = LEERZ wert15 = LEERZ wert16 = LEERZ wert17 = LEERZ wert18 = LEERZ wert19 = LEERZ wert20 = LEERZ h = 0 ' Abbruch nach 4 mal DOLLAR G_ P_ R_ M_ aber ohne B_:(a)Zeile #lese_rma00 h = h + 1 IF h = 3 THEN RETURN #lese_rma0 GET zeichen IF zeichen <> DOLLAR THEN GOTO lese_rma0 GET zeichen IF zeichen <> G_ THEN GOTO lese_rma0 GET zeichen IF zeichen <> P_ THEN GOTO lese_rma0 GET zeichen IF zeichen <> R_ THEN GOTO lese_rma0 GET zeichen IF zeichen <> M_ THEN GOTO lese_rma0 GET zeichen IF zeichen <> B_ THEN GOTO lese_rma00 ' drei Zeichen weiter GET zeichen GET zeichen GET zeichen ' lese Abweichung von der Ziellinie GET wert1 GET wert2 GET wert3 GET wert4 ' ein Zeichen weiter GET zeichen ' lese rechts oder links von der Ziellinie GET wert5 RETURN '===================================== #schreibe_neben_ziel_linie 'schreibe Abweichnung von der Ziellinie GOSUB deselect_all GOSUB display1 PUT CLEAR_DISPLAY IF wert5 = R_ THEN PUT 210 IF wert5 = L_ THEN PUT 228 PUT wert1 PUT wert2 PUT wert3 PUT wert4 RETURN '=========================================== ' Die interessanten Zeichen der $GPRMB-Zeile lesen #lese_rmb 'Werte auf 0 setzen wert1 = LEERZ wert2 = LEERZ wert3 = LEERZ wert4 = LEERZ wert5 = LEERZ wert6 = LEERZ wert7 = LEERZ wert8 = LEERZ wert9 = LEERZ wert10 = LEERZ wert11 = LEERZ wert12 = LEERZ wert13 = LEERZ wert14 = LEERZ wert15 = LEERZ wert16 = LEERZ wert17 = LEERZ wert18 = LEERZ wert19 = LEERZ wert20 = LEERZ h = 0 ' Abbruch nach 3 mal DOLLAR G_ P_ R_ M_ aber ohne B_:dann nach #ohne_plan #lese_rmb00 h = h + 1 IF h = 3 THEN RETURN #lese_rmb0 GET zeichen IF zeichen <> DOLLAR THEN GOTO lese_rmb0 GET zeichen IF zeichen <> G_ THEN GOTO lese_rmb0 GET zeichen IF zeichen <> P_ THEN GOTO lese_rmb0 GET zeichen IF zeichen <> R_ THEN GOTO lese_rmb0 GET zeichen IF zeichen <> M_ THEN GOTO lese_rmb0 GET zeichen IF zeichen <> B_ THEN GOTO lese_rmb00 '39 x Get zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen '================================== 'lese Entfernung zum Ziel GET wert1 GET wert2 GET wert3 GET wert4 GET wert5 'ein zeichen weiter GET zeichen '================================= 'lese Kurs zum Ziel, GET wert6 GET wert7 GET wert8 RETURN '===================================== 'lese Zeit zum Ziel #lese_zeit_ziel wert16 = LEERZ wert17 = LEERZ wert18 = LEERZ wert19 = LEERZ wert20 = LEERZ ' Abbruch nach 14 mal DOLLAR G_ P_ Z_ T_ aber ohne G_: h = 0 #lese_ztg00 h = h + 1 IF h = 14 THEN RETURN #lese_ztg0 GET zeichen IF zeichen <> DOLLAR THEN GOTO lese_ztg0 GET zeichen IF zeichen <> G_ THEN GOTO lese_ztg0 GET zeichen IF zeichen <> P_ THEN GOTO lese_ztg0 GET zeichen IF zeichen <> Z_ THEN GOTO lese_ztg00 GET zeichen IF zeichen <> T_ THEN GOTO lese_ztg00 GET zeichen IF zeichen <> G_ THEN GOTO lese_ztg00 GET zeichen 'für Kommaüberprüfung GET wert16 GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen 'lese Zeit zum Ziel GET wert17 GET wert18 GET wert19 GET wert20 RETURN '================================================== ' Die interessanten Zeichen der $GPRMC-Zeile lesen #lese_rmc 'Werte auf 0 setzen wert9 = LEERZ wert10 = LEERZ wert11 = LEERZ wert12 = LEERZ wert13 = LEERZ wert14 = LEERZ wert15 = LEERZ #lese_rmc0 GET zeichen IF zeichen <> DOLLAR THEN GOTO lese_rmc0 GET zeichen IF zeichen <> G_ THEN GOTO lese_rmc0 GET zeichen IF zeichen <> P_ THEN GOTO lese_rmc0 GET zeichen IF zeichen <> R_ THEN GOTO lese_rmc0 GET zeichen IF zeichen <> M_ THEN GOTO lese_rmc0 GET zeichen IF zeichen <> C_ THEN GOTO lese_rmc0 '32 x GET zeichen für Komma zählen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen GET zeichen '===================== 'lese Speed über Grund GET wert9 GET wert10 GET wert11 GET wert12 'ein zeichen weiter GET zeichen '===================== ' lese Kurs über Grund GET wert13 GET wert14 GET wert15 Return '================================================================================== ' Ausgabe der Daten 'Speed über Grund SOG #schreibe_speed GOSUB deselect_all GOSUB display2 PUT CLEAR_DISPLAY PUT H_ ' 246 = H für Speed PUT wert9 PUT wert10 PUT wert11 PUT wert12 RETURN '================================================================================================ 'Kurs zum Ziel (Bearing) #schreibe_kurs_ziel GOSUB deselect_all GOSUB display3 PUT CLEAR_DISPLAY PUT GRAD PUT wert6 PUT wert7 PUT wert8 RETURN '================================= 'Kurs über GRUND: COG #schreibe_kurs_grund GOSUB deselect_all GOSUB display4 PUT CLEAR_DISPLAY PUT wert13 PUT wert14 PUT wert15 PUT GRAD PAUSE 50 * 5 RETURN '============================================================================================== 'Entfernung zum Ziel (Distanze)aus rmb #schreibe_meilen_ziel GOSUB deselect_all GOSUB display3 PUT CLEAR_DISPLAY PUT wert1 PUT wert2 PUT wert3 PUT wert4 PUT wert5 RETURN '=============================== ' Schreibe die Daten der $GPZTG-Zeile: #schreibe_zeit_ziel IF wert16 = KOMMA THEN GOTO schreibe_ztg1 GOSUB deselect_all GOSUB display4 PUT CLEAR_DISPLAY PUT wert17 PUT wert18 PUT DOPPELPUNKT PUT wert19 PUT wert20 GOTO weiter_rma '=========================================== ' Schreibe 00:00 auf Display, wenn Zeit unbekannt #schreibe_ztg1 GOSUB deselect_all GOSUB display4 PUT CLEAR_DISPLAY PUT MINUS PUT MINUS PUT DOPPELPUNKT PUT MINUS PUT MINUS GOTO weiter_rma '========================================================================================== 'ohne Segelplan #ohne_plan GOSUB deselect_all GOSUB display1 PUT CLEAR_DISPLAY PUT MINUS PUT MINUS PUT MINUS PUT MINUS '========================= GOSUB deselect_all GOSUB display3 PUT CLEAR_DISPLAY PUT MINUS PUT MINUS PUT MINUS PUT MINUS '===================== GOSUB lese_rmc '===================== GOSUB schreibe_speed '===================== GOSUB schreibe_kurs_grund '===================== GOTO weiter_rma '================================================================================================== ' Alle Displays deselektieren #deselect_all PUT ESC PUT D_ PUT &hff RETURN #display_hex IF (zeichen SHR 4) < 10 THEN PUT (zeichen SHR 4) + NULL ELSE PUT (zeichen SHR 4) + A_KLEIN - 10 PUT DOT IF (zeichen AND 15) < 10 THEN PUT (zeichen AND 15) + NULL ELSE PUT (zeichen AND 15) + A_KLEIN - 10 RETURN ' Display h auswaehlen #display1 display = 1 GOTO select_display #display2 display = 2 GOTO select_display #display3 display = 3 GOTO select_display #display4 display = 4 GOTO select_display #select_display PUT ESC PUT S_ PUT display RETURN |
| Antwort schreiben |