PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit serieller Komunikation



RubaSon
09.12.2010, 13:36
Hallo, ich bin neu hier und habe ein kleines Problem. Ich versuche mit einem Atmega8 einen GPS-Empfänger auszulesen.
Der GPS-Emfänger geht problemlos am pc über RS232 und mit dem Hyperterminal.

Der Atmega8 gibt leider nür müll aufsDisplay
Das ist mein Code:

$regfile "m8def.dat"
$crystal = 4000000
Baud = 9600


Dim B As Byte
Dim X As Byte
Dim Y As Byte


Open "comc.0:9600,8,n,1,inverted" For Input As #1

Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portb.6

Cursor Off
Display On

Cls
Locate 1 , 1

X = 0
Y = 1
Do

X = X + 1
If X = 9 Then Gosub Voll
Get #1 , B
Locate Y , X : Lcd Chr(b)


Loop

Voll:
If Y = 2 Then Cls
X = 1
Y = Y + 1
If Y = 3 Then Y = 1
Locate Y , X
Return

Was mache ich falsch?

gomaman
09.12.2010, 14:48
Hi, hier eine der ersten Fragen:
Sind die Fuse-Bits richtig gesetzt? Ist meist ein Hauptgrund der nicht funktionierenden LCDisplays und Schnittstellen.


Gruß
gomaman

Slein
09.12.2010, 15:20
NMEA Empfänger senden standardmäßig mit 4800 Baud und bei dem 'inverted' bin ich mir auch nicht ganz sicher :)

Richard
09.12.2010, 15:23
Hallo, ich bin neu hier und habe ein kleines Problem. Ich versuche mit einem Atmega8 einen GPS-Empfänger auszulesen.
Der GPS-Emfänger geht problemlos am pc über RS232 und mit dem Hyperterminal.

Der Atmega8 gibt leider nür müll aufsDisplay
Das ist mein Code:

$regfile "m8def.dat"
$crystal = 4000000
Baud = 9600


Dim B As Byte
Dim X As Byte
Dim Y As Byte


Open "comc.0:9600,8,n,1,inverted" For Input As #1

Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portb.6

Cursor Off
Display On

Cls
Locate 1 , 1

X = 0
Y = 1
Do

X = X + 1
If X = 9 Then Gosub Voll
Get #1 , B
Locate Y , X : Lcd Chr(b)


Loop

Voll:
If Y = 2 Then Cls
X = 1
Y = Y + 1
If Y = 3 Then Y = 1
Locate Y , X
Return

Was mache ich falsch?

Hoffentlich ist der GPS Empfänger über einen RS232 <> TTL Wandler an den Mega angeschlossen! Ich sehe in dem Code nicht wo die GPS Daten eingelesen werden? also z.B.






dim A as string * 50

input #1, a

LCD a



Wie Du dann den string verarbeitest um die GPS Daten zu sortieren musst Du in der Bascom Hilfe nachschauen. Tipp INSTR und deren Untertietel wie split und pos......

Gruß Richard

Ps.: Setze code immer zwischen codetags.[/quote]

for_ro
09.12.2010, 19:31
Wenn ich dein Programm in den Simulator lade und PinC.0 rumklimpere, dann funktioniert es.
Heißt für mich: Slein hat Recht mit seiner Vermutung, dass etwas an den Com Parametern nicht stimmt.

Richard
10.12.2010, 07:38
NMEA Empfänger senden standardmäßig mit 4800 Baud und bei dem 'inverted' bin ich mir auch nicht ganz sicher :)

PC RS232 Signale haben negative Logik "1" = -3...-15 V "0" = 3...15 V, da wäre 'inverted' schon richtig.. Allerdings müssen, wenn nicht ein rs232 zu TTl Wandler benutzt wird, aus diesem Spannungen noch 5/0 V gemacht werden. Im Einfachstem Fall reicht da eine Diode und ein ca. 1k8 R. Wobei die Diode die Negative Spannung gegen GND auf -0,6 V begrenzt und der 1k8 R den Strom Begrenzt (PC TX Seite). PC RX sollte auch mit 0 und 5 V klar kommen. Diese einfach lösung hat mit PIC's jedenfalls gut geklappt.

Gruß Richard

RubaSon
10.12.2010, 22:09
Ja pegelwandler ist dran, Display funktioniert. Am PC ist aber auch 9600 Baud eingestellt? ich werds mal mit 4800 testen.
Hat die Taktung vom µC darauf einfluß?

Richard
11.12.2010, 15:23
Ja pegelwandler ist dran, Display funktioniert. Am PC ist aber auch 9600 Baud eingestellt? ich werds mal mit 4800 testen.
Hat die Taktung vom µC darauf einfluß?

Ja, sehr die Baudrate wird aus dem Takt generiert der Interne Taktgenerator ist nicht gerade genau und funktioniert bei hohen Baudraten nicht gerade gut ...bis nicht. Ein externer Quarz ist da besser am besten welche mit krummer Frequenz die passen besser um Standard Baudraten zu erzeugen. Die Baudrate muss mit den Fuses eingestellt werden, die Einstellung in Bascom ist nur für den Interpreter und muss mit der im Chip eingestellten übereinstimmen sonst rechnet das Programm fasch.

Gruß Richard

RubaSon
15.12.2010, 14:04
mh klappt immer noch nicht... Mit dem Attiny13 und PC funktioniert die komunication mit 9600 baud perfekt. hab am mega16 auch mit 4800 probiert es kommt zum teil immer noch müll d.h. irgendwelche zeichen aber zwischendurch mal ein paar richtige zeichen.
Gibts nicht doch ne möglichkeit ohne ext. quarz das in den griff zu bringen auf welche frequenz soll ich takten?

Und wie stell ich die Baudrate mit den Fuses ein?