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
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.
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 ?
Serielle Kommunikation ohne Quarz ist naheu unmoeglich. Die Baudrate muss auf besser als 2% stimmen, was ein AVR-RC nicht tut
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?
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.