Forum: Mikrocontroller und Digitale Elektronik Datenfehler in drahtloser UART Tiny13 / ATMega16


von Torsten B. (torty)


Lesenswert?

Hallo

Ich versuche im Augenblick eine drahtlose UART (simplex) Verbindung 
zwischen einem Tiny13 und einem ATMega16 erzustellen. Da der Tiny13 ja 
keine UART hat, habe ich eine Art Software UART für ihn programmiert, um 
die Daten über PB0 an meinen Sender zu schicken. Um nicht zu viel Zeit 
in Warteschleifen zu verbringen, habe ich eine Baudrate von 115kBaud 
programmiert. Ein Bit ist dann 4ms lang. Gesendet wird 1 Startbit, 8 
Datenbits und 4 Stoppbits.
Der Empfänger hängt nun wieder an dem RX Pin der USART des Mega16 und 
ist ebenfalls auf 115 kBaud eingestellt.

Jetzt zum Problem:
Ich habe Probleme, eine sichere Verbindung aufzubauen. Ich empfange zwar 
ab und zu das, was ich auch gesendet habe, jedoch kommt es zu (wie ich 
finde) zu vielen Fehlern.
Ich habe einen Zähler programmiert, der alle Fehlerhaften Bytes zählt 
und mir auf meinem LCD anzeigt. Manchmal sychronisiert sich Sender und 
Empfänger auch gar nicht.
Erst, wenn ich mit einem Reset am Empfänger uC in den Datenstrom 
einsteige kommt es zu einer Verbindung.

Frage:

Glaubt Ihr dass das Problem bei der Synchronisierung /Datenfehler eher 
am internen Oszillators des Tiny13 liegt ? Man liest ja sehr oft, dass 
für eine UART ein Quarz angesagt ist. Dagegen spricht jedoch, dass es 
doch bei einem Einzelstück (ohne Temperaturschwankungen) auch mal 
klappen sollte, wenn man alles auf einander abstimmt.

Oder glaubt Ihr, dass das Problem in der hohen Baudrate liegt ? Ist eine 
9600 Baud Leitung sicherer ?

Danke für jeden ernst gemeinten Tipp und Hinweis.
Torsten

von Stefan E. (sternst)


Lesenswert?

Torsten B. schrieb:
> ... habe ich eine Baudrate von 115kBaud
> programmiert. Ein Bit ist dann 4ms lang.

???

Bei 115 kBaud ist ein Bit ca 8,7 µs lang.
Oder umgekehrt: 4 ms pro Bit sind gerade mal 250 Baud.

von Torsten B. (torty)


Lesenswert?

Hast Recht, da stimmt etwas nicht. Ich glaube aber, dass es hier ein 
Messfehler sein wird. Wenn ich mich nämlich wirklich in diesen 
Dimensionen verrechnet haben sollte, würde ich nur Müll empfangen. 
Zeitweise klappt es ja wie gesagt.

Glaubst Du denn, dass es (abgesehen von der Bitlänge) eher an der hohen 
Baudrate oder am nicht verwendeten Quarz im Sender liegen könnte ?

von Purzel H. (hacky)


Lesenswert?

Serielle Kommunikation ohne Quarz ist naheu unmoeglich. Die Baudrate 
muss auf besser als 2% stimmen, was ein AVR-RC nicht tut

von Stefan E. (sternst)


Lesenswert?

Torsten B. schrieb:

> Glaubst Du denn, dass es (abgesehen von der Bitlänge) eher an der hohen
> Baudrate oder am nicht verwendeten Quarz im Sender liegen könnte ?

Oder vielleicht doch eher hieran:
> habe ich eine Art Software UART für ihn programmiert
?

Sorry, aber deine Aussage bezüglich der Bitlänge oben stärkt nicht 
unbedingt meinen Glauben, dass du einen Software-UART mit 115 kBaud 
innerhalb der erforderlichen Genauigkeit hin bekommen hast.

Davon abgesehen: du machst keinerlei Aussagen über die Funkverbindung. 
Wieso vermutest du die Fehlerquelle nicht dort? Hast du die selbe 
Fehlerrate bei einer direkten Verbindung?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Erst, wenn ich mit einem Reset am Empfänger uC in den Datenstrom
> einsteige kommt es zu einer Verbindung.
Du solltest dem Empfänger schon mal die Möglichkeit geben, sich auf den 
Sender zu synchronisieren. Dazu muß zwischen 2 Zeichen ab und zu eine 
Pause von mindestens 1 Zeichen kommen. Auf einen kontinuierlichen 
Datenstrom kann sich kein RS232 Empfänger einsynchronisieren. Die 
Stoppbits allein reichen da nicht aus.

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
Noch kein Account? Hier anmelden.