Hallo, ich möchte an einem AVR (wahrscheinlich ATmega8) einen RS485 Bustreiber mit einer Baudrate von 187,5 kbit/s betreiben. Hängt man den RS485 Bustreiber nun besser an den eingebauten Hardware-UART (RX/TX) oder benutzt man einen Software-UART? Andre
Nimm nen 3 Mhz Quarz oder ein vielfaches davon und nimm den Hardware-UART. Bernd
Kommt drauf an was du vorhast. Wenn der Hardware-UART zur Verfügung steht, nimm ihn doch. Falls du aus irgendeinem Grund keinen Hardware-UART benutzen kannst (z.B. weil er schon verwendet wird) dann musst du ihn eben per Software nachbilden. Allerdings ist dann natürlich die CPU-Auslastung vom Controller deutlich größer, da du bei jedem zu sendenden Bit einen Pin schalten musst. Bei einem 12.xxx MHZ Quarz hast du dann noch ca. 65 Takte zwischen 2 Bits. Wenn der Controller nix anderes machen soll, ist das durchaus Ok.... Auf jeden Fall benötigst du jedoch einen Hardware-Timer und idealerweise einen Interrupt-fähigen Pin zum empfangen, sonst wird der Controller für nix anderes mehr Zeit haben...
"Bei einem 12.xxx MHZ Quarz hast du dann noch ca. 65 Takte zwischen 2 Bits." Das ist nicht gerade viel. :o( Also ist es wohl besser, den Hardware-UART zu benutzen. Ich weiss nur nicht, ob der auch so schnell ist. Deshalb eben hier die Frage. Meistens ist ja bei 115k Schluss. Wie sieht es hier beim AVR aus? Gemäß der Theorie liegt bei einer f-cpu=18.432 MHz der UBRR bei 5,144 (ergibt bei Rückrechnung mit 5 eine Baudrate von 192000 -> 2,4 % Abweichung). Aber klappt das auch so in der Praxis? Andre
wenn du eine unübliche Baudrate verwenden willst, solltest du nicht unbedingt einen für Standardbaudraten geeigneten Quarz wählen...:-)
Naja, mit dem Quarz kann man ja immer noch etwas experimentieren (16 MHz sind noch schlechter). Mir geht es aber mehr um den Fakt, ob der Hardware-UART überhaupt so schnell kann (und nicht nur theoretisch).
The maximum baud rate for the USART of an AVR is above 1 Mbps. See in the datasheet "Examples of Baud Rate Setting". A 12 MHz crystal, baud rate register set to 3 will give a perfect 187500 baud rate. (0% baud rate error). Schuricht Distrelec: 644586 A 15 MHz crystal, baud rate register set to 4 will give a perfect 187500 baud rate. (0% baud rate error). Schuricht Distrelec: 644592 A 18 MHz crystal, baud rate register set to 5 will give a perfect 187500 baud rate. (0% baud rate error). Schuricht Distrelec: 644596
187,5 ist kein problem für den AVR wie o.a. einen quarz mit vielfachem von 3 MHz Mega8 geht nur bis 16 -> 15MHz 80 TZ/Byte Mega x bis 20 -> 18MHz 96 TZ/Byte Mit den Taktzyklen (TZ) kann man noch viel machen und die Hardware mit Buffer sagt einem ja, wann man nachladen muß (Interrupt) gruß hans PS leichtes übertakten ist immer möglich (Mega 8 mit 18 ;) )
Danke an alle. @Anonymous: Stimmt, ein Blick ins Datenblatt hätte mir wohl geholfen... ;o)
Die 115200 kBaud Grenze kommt vom Pegelwandler wie z.B. Max232 o.Ä. Wenn Du den entsprechenden RS485 Baustein verwenden würdest, gingen 1 Mbit locker. Die einzige Frage, ob die Daten so schnell beigeschafft werden können. Da wären dann >=16MHz angenehm. Bernd
>Mega x bis 20 -> 18MHz 96 TZ/Byte Beim Standardformat 8N1 kommt man auf ca. 960 Taktzyklen/Byte bei 18MHz. Das lastet einen AVR mit ca. 5% aus (Rx und Tx mit FIFO). Software UARTs sind oberhalb von 38,4kBd kritisch, wenn noch andere Interrupts im Programm zugelasssen sind.
Gerd wrote:
> 187,5kBd? Möchtest du MPI nachbilden?
Na MPI ist zu speziell ...
Ich denke er hat irgendwas mit Profibus im Allgemeinen vor.
(MPI ist zu Profibus kompatibel, ich weiß)
Mit freundlichen Grüßen
Stefan
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.