Hallo zusammen, ich bin gerade dabei einen kleinen Teil des MODBus Protokolls auf einem Atmega32 zu integrieren. Ich habe aktuell das Problem, dass die Zeit zum Empfangen eines Zeichens nicht mit der Zeit laut Baudrate übereinstimmt. Die Baudrate ist auf 9600 eingestellt, wenn ich einen 8 bit Timer beim ersten empfangen zeichen starte und nach Empfang der gesamten Bootschaft ausgebe, bekomme ich Zeiten die für mich unerklärlich sind. 11 Bit sind ein Frame und somit komme ich bei einer Baudrate von 9600 auf eine Zeit pro Frame von 1,1458ms. Der gemessene Wert mittels Timer beträgt aber im Schnitt pro Frame ca. 4,5 - 4,6 ms. Kann mir jemand sagen, wo mein Fehler liegt? Vielen Dank im Vorraus! Gruss Sebi
Innerhalb eines Frames kommen die Bits mit 9600 Baud. Zwischen den Frames kann sich der Sender beliebig viel Zeit lassen. Wenn du die Messung der Framezeit über Framezeit + Zwischenframezeit machst und dann durch die Zahl der Frames teilst, kann das die Beobachtung erklären.
Das verstehe ich, aber nach dem Protokoll von MODBus für serielle Übertragung darf zwischen 2 Zeichen maximal 1,5 * Framezeit liegen. Die Zeit zwischen senden des ersten Frame bis zum nächsten darf 2,5 * Framezeit, also 2,86ms sein. Zwiscchen request und respones muss beim MODBus eine Zeit von 3,5 Frame liegen. Dieses Kriterium wollte ich zum erkennen des Ende eines Frames und zum "Startschuss" für die respones nehmen. Das ist so aber leider nicht möglich.
Kann das eigentlich an der Schnittstelle liegen.bzw. kann das pausenverhalten über Einstellungen im gerätemanager beeinflußen?
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.