Ich habe seit Tagen ein Problem mit meinem 433Mhz Funk.
Gesendet wird aus einem Atmega644 über ein Funkmodul (aus unserer Firma)
zum passenden Empfänger an einen Atmega8, welcher am HTerm ausgeben
soll.
Meine Beobachtungen: Controller funkt richtig an Empfängermodul (300Baud
bei 1Mhz UBRR=207). Am ist am Hterm (FTDI) alles wunderbar abzulesen.
Also funktioniert!?
Ein kurzes Programm am M8 soll 8 Bytes einlesen, richtig ordnen, (nach
0x0f zu lesen beginnen) und dann über FTDI am PC anzeigen zur Kontrolle.
Und da liegt mein Problem.
Der M8 liest alle 8 Bytes ein und gibt dann blödsinn aus sobald er mehr
als 6 Bytes wieder ausgeben soll. Auf den Bildern ist zu sehen wie es
aussehen sollte bei 6 BYTES und wie es bei 8 Bytes aussieht.
Es soll ein kontinuierlicher Zeichenstrom am Empfänger ankommen der
immer gleich bleibt wenn keine Taste gedrückt ist damit ich die
Steuerung dann richtig auf die Antribe ummünzen kann.
Ich weiss nicht ob es am Programm liegt oder an der übertragung zum pc
)FTDI-Baudrate). Ich hatte bis jetzt noch nie einen Quarz bei Usart
gebraucht. Vielleicht liegts daran.?!
> Ein kurzes Programm am M8 soll 8 Bytes einlesen
Der Empfangsteil ist doch nur für 7 Bytes ausgelegt, danach startet das
Senden - ich verstehe es nicht.
Nur am Rande:
> ldi r16, (1<<UCSZ1)|(1<<UCSZ0) ; 8-Bit-modus> sts UCSRC, r16
Das ist doppelt falsch: es fehlt URSEL und es wird ins SRAM geschrieben.
S. Landolt schrieb:> Der Empfangsteil ist doch nur für 7 Bytes ausgelegt, danach startet das> Senden - ich verstehe es nicht.
Das Erste Byte ist für die Synchronisation, die nächsten 7 werden für
die verarbeitung gebraucht. (3Bytes für die Tsten und 4 Bytes für die
Analogsticks des PS-Controllers). Ich verschicke die 7 Bytes nur zum
Testen ob alles richtig ankommt. Der Teil im Programm der Sendet kommt
dann später weg wenn die Funkferbindung für meine Anwendung passt.
S. Landolt schrieb:>> ldi r16, (1<<UCSZ1)|(1<<UCSZ0) ; 8-Bit-modus>> sts UCSRC, r16> Das ist doppelt falsch: es fehlt URSEL und es wird ins SRAM geschrieben.
"Ursel" eingefügt und "OUT" ausgebessert, ohne Erfolg, aber Danke für
den Hinweis.
Mir ist gerade aufgefallen, das jeder 2. Sendevorgang korrekt ist also
vermute ich das es ein Fehler im Programm ist.
Puh, das habe ich nicht nachgemesessen.
Was wäre das Problem?
Hab mir 8 Leds an den M8 gehängt und auf die Bytes reagieren lassen (im
Programm).
Bei jedem Tastendruck leuchtet das richtige Led. Auch am Oszi sind keine
spitzen erkennbar, auch nicht an den nackten Pins ohne Led. Die annahme
(RX) sollte also funktionieren.
> Was wäre das Problem?
Nachdem der ATmega8 das 8. Byte empfangen hat, wartet er 65 ms,
anschließend sendet er 267 ms lang; da das letzte Byte im Sendepuffer
übernommen wird, haben wir in der Summe rund 300 ms. Die
Empfangshardware hat einen 'two-level-FIFO', also darf frühestens nach
rund 235 ms wird etwas hereinkommen, sonst gehen Empfangsdaten verloren.
Ohhh ja, Bitte nochmal für den DAU.
Was ist mit der Empfangshardware gemeint? Sollte ich ein Delay zwischen
empfangen und ausgeben einbauen?
Empfangsdaten gehen permanent verloren. Der M8 soll auch nur Bytes lesen
wenn er mit dem erledigen seiner Aufgaben fertig ist. Erst dann soll er
wieder lauschen was seine nächsten Aufgaben sind. Danach wird eventuell
verglichen oder kontrolliert und dann reagiert, bis er wieder lauscht
wies weitergeht.
Nochmal, das der M8 über FTDI(USART) mit dem PC verbunden ist und die
Daten wieder ausgiebt ist nur eine Hilfestellung für mich damit ich den
Sendevorgang überwachen kann. So eine art Debugleitung zum selber
programmieren. Sehr primitiv und umständlich, aber .....so bin ich!
S. Landolt schrieb:> Jetzt weiß ich erstmal nicht weiter.
Danke fürs drüberschaun
Ich glaube weniger, dass es am internen RC-Oszillator liegt, aber die
Quarzfrage lässt sich leicht entscheiden, indem man um +- 2 % verstellt,
also UBRRL auf 203 bzw. 211 setzt und schaut, ob es funktioniert.
Ihn dünkt, er säh' 'nen Friederich
in der Autorenzeile.
Er guckt' noch mal, und merkt', es war
die Brille nicht mehr heile.
"Bis Montag dauert es", sprach er,
"doch eine ganze Weile."
Ich habe an dem Programm nichtz geändert und seit gestern den Rasenmäher
im Betrieb und der Funk macht keine Probleme. Nichtmal die Lichtmaschine
neben über dem Empfänger oder der die ZündSpule(Zündkerze) machen
Probleme. Danke fürs Drüberschaun.