INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
SoftwareSerial Baudrate automatisch korrekt erkennen - geht das?
17.04.2016, 17:09
Beitrag #1
SoftwareSerial Baudrate automatisch korrekt erkennen - geht das?
Ich habe hier immer mal wieder einen Attiny85, den ich über einen der wenigen I/O Pins per SoftwareSerial ein paar Daten ausgeben lasse.

Wegen der geringen Anzahl an I/O Pins betreibe ich die Tinys mit 8Mhz intern. Durch das hier geschilderte Problem kommt es regelmäßig vor, dass die ausgegebenen Zeichen völlig wirr sind, obwohl ich als Bautdrate (wie beim Empfänger) auf 9600 eingestellt habe.

http://www.arduinoforum.de/arduino-Threa...8#pid16658

Nun muss ich dazu sagen, dass ich die Ausgabe nicht im seriellen Monitor auf dem PC anschaue, sondern auf ein LCD leite. Das LCD ist an einen Arduino angeschlossen, auf dem dieser Sketch läuft:

https://github.com/jimblom/Serial-LCD-Ki...CD_Kit.pde

Im aktuellen Fall ist es wieder einmal so, dass bei 9600 keine saubere Ausgabe auf einem LCD möglich ist. Erst wenn ich die Baudrate auf dem Tiny auf 9500 einstelle, wird alles sauber übertragen.

Nun meine Frage:
Kennt jemand eine Möglichkeit, wie der Arduino die Baudrate des "Senders" automatisch erkennen kann? Diese Lösung könnte man dann in den genannten Sketch einbauen, so dass die Ausgabe immer fehlerfrei läuft, egal mit welcher Abweichung (Spannung oder Temperatur) der Tiny in dem Augenblick zurecht kommen muss.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.04.2016, 17:24
Beitrag #2
RE: SoftwareSerial Baudrate automatisch korrekt erkennen - geht das?
(17.04.2016 17:09)Gelegenheitsbastler schrieb:  ....
Im aktuellen Fall ist es wieder einmal so, dass bei 9600 keine saubere Ausgabe auf einem LCD möglich ist. Erst wenn ich die Baudrate auf dem Tiny auf 9500 einstelle, wird alles sauber übertragen.
....

Hi,
das ist wie eine Frage an Radio Eriwan....Cool

Also mich wundert es schon mal das du eine Baudrate von 9500 einstellen kannst....
Weil üblicherweise werden Baudraten mit vordefinierten Werten eingestellt die in einer Tabell stehen. Von daher kann es in dem Fall gut sein das du in Wirklichkeit mit nur 4800 Baud arbeitest und den Sketch in der IDE unter einem falschen CPU Takt erstellt hast...eben mit 16MHz. Dann wäre das plausibel.

Und die Baudrate läßt sich schon automatisch erkennen...das war früher schon bei Singel-Board Kontrollern üblich. Aber wie das genau ging kann ich dir auch nicht aus dem effeff sagen...es lief und wozu dann da dran drehen.
Aber es wurde bei dem Verfahren vom Terminal aus immer zuerst ein Return oder Space erwartet um sich zu synchronisieren. Das müßte man mal mit dem Oszi ankucken... so die Startbitzeit messen würde da wohl ans Ziel führen.

Aber check erst mal ob es nicht einfach 4800 Baud sind...
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.04.2016, 16:02
Beitrag #3
RE: SoftwareSerial Baudrate automatisch korrekt erkennen - geht das?
Bei GSM Modems habe ich das so gelöst das ich immer AT sende. Das Modem sollte OK zurücksenden.
Solang das nicht passiert schalte die baudraten durch. Ob Dir das hier was nützt kann ich nicht abschätzen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.04.2016, 16:11
Beitrag #4
RE: SoftwareSerial Baudrate automatisch korrekt erkennen - geht das?
@Bitklopfer: Ich habe alle "normalen" Baudraten durchprobiert. Es kommt immer nur Datensalat an. Lediglich bei den unüblichen 9500 funktioniert es.

@iks77: Das wird so nicht klappen, weil dafür RX und TX verbunden sein müssten. Ich habe vom ATtiny aber nur TX mit dem Arduino verbunden. Mehr Pins (also zusätzlich RX) kann ich nicht erübrigen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.04.2016, 09:53
Beitrag #5
RE: SoftwareSerial Baudrate automatisch korrekt erkennen - geht das?
(18.04.2016 16:11)Gelegenheitsbastler schrieb:  @iks77: Das wird so nicht klappen, weil dafür RX und TX verbunden sein müssten. Ich habe vom ATtiny aber nur TX mit dem Arduino verbunden. Mehr Pins (also zusätzlich RX) kann ich nicht erübrigen.

geht sogar bidirektional mit einem PIN, aber bisschen externe Beschaltung vonnöten:
http://nerdralph.blogspot.co.uk/2014/01/...-uart.html
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.04.2016, 12:32
Beitrag #6
RE: SoftwareSerial Baudrate automatisch korrekt erkennen - geht das?
Hallo,
wie hast Du es denn aufgebaut?
ATiny -> Arduino -> LCD?
Wenn mich nicht alles täuscht, dann ist das eine "serielleEinbahnstrasse"-
also Müll! Mehr ais zweifelhaft- nun gut.
Was hat denn der ATiny mit der Ausgabe des Arduino zum LCD zu tun? Wohl nichts.

Das LCD (nur Arduino -> LCD) läuft doch mit einer bestimmten Baudrate sicher.
Du mußt doch erst einmal dafür sorgen, das dem so ist.
Also, Arduino sendet mit X-Baud sicher zum LCD. Alles wird richtig dargestellt
und läuft einwandfrei…

Wenn Du das hinbekommen hast, dann kannst Du dich um den ATiny kümmern.

Den ATiny läßt Du mit X-Baud senden, und den Arduino mit X-Baud empfangen.
X-Baud hat hier den gleichen Wert.
Nur hast Du hier ein böses Problem- deine "einStrippenSerielleLeitung".
Du hast keine Flusskontrolle, s.h.- du weißt nicht was passiert!
Diese Flusskontrolle mußt du auf dem Arduino simulieren.

Bei der seriellen Übertragung schreibst Du in den Buffer des Arduino- dieser
wird überlaufen oder verstopfen- und es kommt zu deimen Müll.
Der Arduino kann dem ATiny nicht mitteilen- mach mal langsam.

Du darfst mit dem ATiny nur so viel senden, wie in den Buffer des Arduino geht.
Dann sendet der Arduino nur so viel an das Display wie dieses vertragen kann.
Wenn nicht alles aus dem Buffer ins Display paßt, dann den Rest ans Display
senden.
Wenn alles zum Display gesendet ist, dann löscht der Arduino seinen Buffer.
Wenn der Buffer leer ist, dann sendet der ATiny wieder einen Teil seiner
Daten.

Das es bei Dir zufällig mit 9500 läuft ist reine Glückssache.

Ich würde einmal schauen, wieviel denn in den Buffer des Arduino geht.
Keine Ahnung, sagen wir einmal 500Byte.

Nun schreibst Du Dir einen Sketch, der 500Byte mit einer bestimmten Baudrate
an das Display sendet. Wenn das funktioniert, kannst Du weitermachen.
Dann weißt Du, das Du sicher vom Arduino zum Display etwas senden kannst.

Nun läßt du den Arduino über den seriellen Monitor seine Daten ausgeben, auch
das muß funktionieren.
Also, Arduino -> LCD und Arduino -> serieller Monitor funktionieren.
Gut!
Nun sendest Du 500Byte mit einer bestimmten Baudrate vom ATiny zum Arduino.
Der Arduino soll diese Daten fehlerfrei an den seriellen Monitor weitergeben.
Wenn er das nicht macht, dann hast Du ein Timing/Buffer-Problem.

Entweder schafft Dein Sketch es nicht, diese gesendeten Daten schnell genug zu
verarbeiten- oder der Buffer läuft Dir über.

Du mußt also nur noch deinen Sketch schneller machen, oder weniger Byte senden,
oder langsamer senden. Ist doch ganz einfach.

Ich würde da so rangehen:
-der ATiny sendet langsam weiniger Daten als BufferGröße des Arduino
-der Arduino muß diese fehlerfrei auf dem Display darstellen
-wenn dem so ist, dann muß der Arduino seinen Buffer löschen
-wenn der gelöscht ist, dann kann der ATiny wieder etwas senden

Das Ganze kann man dann langsam steigern. Weil aber keiner (ATiny, Arduino, LCD)
vom anderem weiß- was er macht, mußt Du das zeitlich begrenzen.
Viel Spaß dabei.
Andreas

P.S. wie kommt man nur darauf eine serielle Verbindung- mit nur einer Strippe-
herzustellen zu wollen?
Zu wenige Pin´s? Das kann es ja nicht sein, die kannst Du ohne Probleme
multiplexen. Bei 2 Pin´s sind es schon 4 Möglichkeiten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Telefon-Nummer erkennen - Schaltung auslösen harryba 4 255 13.10.2016 10:12
Letzter Beitrag: hotsystems
  Interrupt wenn softwareSerial Daten BennIY 3 443 01.05.2016 18:39
Letzter Beitrag: tiny85fan
  Gameduin2 Touch automatisch kalibrieren Jojo2 0 276 08.02.2016 14:57
Letzter Beitrag: Jojo2
  Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ? arduinofan 3 438 01.02.2016 20:10
Letzter Beitrag: arduinofan
  Code für Würfel korrekt? JanGamer11 12 809 12.01.2016 19:41
Letzter Beitrag: Claus_M
  Stringvariable senden beim ESP8266 geht nicht , warum ? arduinofan 9 1.136 12.01.2016 11:05
Letzter Beitrag: arduinofan
  Dauer des Tastendrucks erkennen - wie? Gelegenheitsbastler 11 933 08.12.2015 17:30
Letzter Beitrag: Binatone
  Hilfe USB upload geht nicht binderj1 8 1.366 12.11.2015 23:47
Letzter Beitrag: hotsystems
  ATtiny13 mit der Arduino IDE 1.0.6 programmieren - geht das? Gelegenheitsbastler 4 1.618 20.10.2015 20:20
Letzter Beitrag: ardu_arne
  ADC Register korrekt auslesen Laura 5 1.063 17.08.2015 17:50
Letzter Beitrag: HaWe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste