Servus Leute, ich bin gerade dabei, einen RaspberryPI3 und einen Atmgega328p über die serielle Schnittstelle der GPIOs des PI miteinander zu verbinden. Der ATmega läuft mit 3,3V um auf einen Pegelwandler verzichten zu können und ist auf 8 MhZ mit internem Taktgeber gefused. Die Erfolgsquote liegt aber nur bei 50%. Es gelingt, von dem AVR Daten an den Pi zu senden und diese mit dem Terminalprogramm Cutecom auszulesen. Jedoch klappt es nicht, mit Cutecom über die gesendeten Strings "l0\n" oder "l1\n" eine LED am Pi ein- und auszuschalten. Die Hardwareverbindungen habe ich alle geprüft und sie sind in Ordnung. Im Anhang ist der C-Quellcode für den AVR. Hoffentlich könnt ihr mir helfen! Danke im Vorraus. Viele Grüße, Jonas Wühr
Sorry Schreibfehler. Die Led ist natürlich am Avr und nicht am Pi angeschlossen.
Jonas schrieb: > ist auf 8 MhZ mit internem Taktgeber gefused Der interne Taktgeber ist nicht sehr exakt und temperaturabhängig. Mit 8MHz-Quarz hatte ich noch nie Probleme. Kann man am RPi die Baudrate verändern, z.B. sowas wie 9603 oder 19189 Baud? Dann ist das Ganze aber immernoch von der Temperatur abhängig.
Narbend, ich glaube, an dieser Stelle verwendest du die falschen Indices für rxBuffer. MMn findest du die empfangenen Zeichen ab Offset 0 und nicht ab Offset 1.
1 | if(stringRxFlag == 1) |
2 | {
|
3 | if(rxBuffer[1]=='l') |
4 | {
|
5 | if(rxBuffer[2]='1') |
6 | {
|
7 | PORTB=(1<<PB1); |
8 | }
|
9 | if(rxBuffer[2]='0') |
10 | {
|
11 | PORTB&=~(1<<PB1); |
12 | }
|
13 | }
|
14 | }
|
dh richtig wäre:
1 | if(stringRxFlag == 1) |
2 | {
|
3 | if(rxBuffer[0]=='l') |
4 | {
|
5 | if(rxBuffer[1]='1') |
6 | {
|
7 | PORTB=(1<<PB1); |
8 | }
|
9 | if(rxBuffer[1]='0') |
10 | {
|
11 | PORTB&=~(1<<PB1); |
12 | }
|
13 | }
|
14 | }
|
Ansonsten alle Teile mal unabhängig voneinander Testen, d.h. LED mit _delay_ms periodisch Blinken lassen, wenn das geht, den empfangenen String 1:1 wieder zurücksenden, erst wenn das geht, das gewünschte Programm aus getesteten Fragmenten zusammenbasteln.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.