-         

Ergebnis 1 bis 10 von 10

Thema: Baudratenerkennung mit Bascom?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274

    Baudratenerkennung mit Bascom?

    Anzeige

    Hallo,

    ich habe hier ein Problem. Angenommen ich habe einen AVR (z.b. Mega und nutze den internen RC-Oszillator welcher bekanntlich nicht gerade präzise ist. Nun nehme ich einen zweiten Mega8 auch mit einem internen RC.

    So und nun hab ich ein Problem. Datenübertragung via Rxd/TxD kann ich nun vergessen. Ich nutz die Software-UART mit Open "COM:19200,8,N,1" For Output As #1 . Beim Empfänger muss ich dann sowas wie 18225,8,N,1 eingeben das er es erkennt. Die Werte sind nur Beispiele!

    Gibt es eine Möglichkeit des Autobauding? Mit der Software-UART ist es ja auch Möglich einen Speed von z.b. 2355 anzugeben, und ich möchte meinen Slave auf den Speed sich anpassen lassen. Wie mach ich das am besten?

    Grüße
    Alex

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Ich habe leider keine Antwort auf deine eigentliche Frage, aber wenn du schon weisst, dass die Taktfrequenz deiner controller wegen Verwendung der internen Oscillatoren recht ungenau ist, finde ich eine Baudrate von 19200 ziemlich hoch angesetzt. Hast du es mal mit niedrigeren Werten versucht?

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Für die Kontaktaufnahme würde ich einen uC städnig einen bekannten String senden lassen. z.B. "VerstehstDu?" Jetzt auf dem anderen alle möglichen Baudraten durchgehen, bis er "VerstehstDu?" erkennt. Dabei muss natürlich berücksichtigt werden, dass der String gerade mittendrin ist. Wenn also ein "stDu?Versteh" ankommt, stimmt die Baudrate auch. Wenn er dann die Baudrate gefunden hat, ein "JoVerstehe!" senden, damit dieser weiß: "Communication Etablished"> weitermachen.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    Zitat Zitat von peterfido
    Für die Kontaktaufnahme würde ich einen uC städnig einen bekannten String senden lassen. z.B. "VerstehstDu?" Jetzt auf dem anderen alle möglichen Baudraten durchgehen, bis er "VerstehstDu?" erkennt. Dabei muss natürlich berücksichtigt werden, dass der String gerade mittendrin ist. Wenn also ein "stDu?Versteh" ankommt, stimmt die Baudrate auch. Wenn er dann die Baudrate gefunden hat, ein "JoVerstehe!" senden, damit dieser weiß: "Communication Etablished"> weitermachen.
    Hmm, die Idee ist eigendlich garnicht schlecht! Würde aber bedeuten das ich zum Synchronisieren immer einen bekannten String senden muss. Wenn ich aber nur 2 Bytes habe (1.Byte für die Adresse z.b. Lichtschalter, 2.Byte Helligkeit) wirds schwierig. Wie funktioniert das Autobauding eigendlich bei Modems?

    Ich hab schon überlegt die Signallänge (start,Stopbit) auszuwerten und auf die Baudrate zurückzurechnen. Abere ich hab noch kein Plan.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Naja bei nur 2 Bytes würde ich einfach die Geschwindigkeit runterschrauben, dann stört die Abweichung nicht mehr.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    Zitat Zitat von peterfido
    Naja bei nur 2 Bytes würde ich einfach die Geschwindigkeit runterschrauben, dann stört die Abweichung nicht mehr.
    Schon klar, aber wass wenn ich den Speed nicht kenn?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Wie funktioniert das Autobauding eigendlich bei Modems?
    Keine Ahnung, wie das bei Modems funktioniert. Bei Modems gibt es mit 1200, 2400, 4800, 9600, 19200 und 38400 wesentlich weniger Möglichkeiten, als wenn du auch mit allen "krummen" Werten dazwischen arbeiten willst.

    Ich weiss auch nicht, ob eine Baudratenerkennung überhaupt ans Ziel führt. Das dürfte nur funktionieren, wenn die internen Oszilatoren deiner Controller einen konstanten Fehler haben. Wenn deren Frequenz während der Übertragung schwankt, dürfte es nicht viel bringen vor der Übertragung die maximale Baudrate zu ermitteln.

    Naja bei nur 2 Bytes würde ich einfach die Geschwindigkeit runterschrauben, dann stört die Abweichung nicht mehr.
    Schon klar, aber wass wenn ich den Speed nicht kenn?
    Ich vermute mal peterfido meinte damit, dass du mit einer bekannten Baudrate arbeiten sollst, die aber so weit heruntersetzt, dass die Ungenauigkeit der Oszilatoren nicht stört.
    Die Ungenauigkeit der Oszilatoren wirkt sich bei 1200 Baud wesentlich weniger aus als bei 19200.
    2 Byte von vornerein mit 1200 Baud zu übertragen dürfte wesentlich schneller gehen, als vor jeder Übertragung erst irgendeine Baudratenerkennung durchzuführen.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    Angenommen ich habe einen AVR (z.b. Mega und nutze den internen RC-Oszillator welcher bekanntlich nicht gerade präzise ist. Nun nehme ich einen zweiten Mega8 auch mit einem internen RC.
    sag mal spielst du hier eine trockene übung oder was?
    du schreibst oben "Angenommen...", also hast du diese sache überhaupt noch garnicht getestet in der praxis.

    mfg

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    Ok, ich merke ohne "echte" Beispiele klappt das nicht so ganz.

    Ich habe hier ein paar Bus-Schalter (OEM-Kein Hersteller). Diese senden in einer mir nicht bekannten Datenrate. Bekannt ist das es Seriell ist (8,N,1) uC ist ein ATMega8 ohne Quarz.

    Die Daten scheinen zwischen 2400Bit/s zu laufen kann aber auch 9600 sein. Da die uC bei 9600 garnicht 9600 machen (wegen dem RC) wird da irgendwo ne Hausnummer an Speed sein. Da die Schalter (und der Empfänger) aber funzen muss es doch ein Autobauding geben. Wie das mit Bascom zu realisieren ist, würde mich interessieren.

    Grüße
    Alex

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    Baudratenerkennung klappt meiner Meinung nach nur im festen Testdialog.

    Wenn nur zwei Bytes übertragen werden kann die Sache doch nicht so schwer sein.

    Grundsätzlich würde ich Deiner Lausch CPU einen Externen Quarz verpassen.
    Es reicht wenn einer 'krumm' läuft.

    Da wohl die Sendende CPU keine Uhr zum 'Krüpten' der Baudrate hat , sollte der Input 'wenn' die Baudrate geändert wird in den 2 Bytes liegen.

    Ich würde folgend vorgehen:

    Mit dem Scope die Flanken betrachten , ob sich die '0'+'1' dramatisch ändert.

    Zwei CPU's lauschen lassen am RS232 Port ,mit zwei angepasten Baudraten.

    Dann sollte ein Schema erkennbar sein.

    Viel Glück dabei.

    Gento

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •