Aulastung AVR bei Datenübertragung?

OP #325577
Lesenswert?
• ▲
▼
Hallo,

ich wollte ein paar Daten vom AVR an den PC senden. Nun frage ich mich,
wie der Zusammenhang zwischen kbs und aufgewandte Rechenzeit vom AVR
ist.
Angenommen ein Mega32 läuft mit 4MHZ quarz. Schafft er es ca 50
Integerwerte 6mal in der Sekunde zu sende, ohne das seine anderen
Aufgaben (ADC, Display, Berechnungen) beeintächtigt werden?
Welche kbs-wert wäre da am sinnvollsten? Oder erstmal von 4MHZ gleich
auf 16MHZ hoch?
Vielen Dank.
Gast #325579
Lesenswert?
• ▲
▼
Es kommt wohl eher auf das Programm (und die Baudrate) an.
Wenn du den Datenverkehr dadurch realisierst, dass du immer abfragst,
ob das Byte schon gesendet wurde, dann wartest du ziemlich viel.
Wenn du die Sache aber per Interrupt (und Ringpuffer) steuerst,
beeinflussen sich die einzelnen Aufgaben weniger.
Es kommt auf die Programm-Struktur nicht unbedingt auf die
Taktfreequenz an.
Gast #325580
Lesenswert?
• ▲
▼
Die Datenmenge ist und Baudrate ist da nicht das Problem. Eher die
Implementierung. Wenn die Daten in einen Ringpuffer gestellt werden und
per ISR die UART bedient wird merkt der uC herzlich wenig von der
Kommunikation. Jedes zu sendende Byte wird dann nur wenige cycles
benoetigen um es in den UART data buffer zu transportieren und die
Bufferverwaltung zu erledigen.
#325582
Lesenswert?
• ▲
▼
Das kommt drauf an (normal schafft er das locker):

Integer (AVR) 2 Byte  50  6 = 600 Byte/sek
das entstspricht (etwa) 6000 Baud/sek + Overhead für
Übertragungsprotokoll.

Da du mit 4 MHz vermutlich nur eine geringe Baudrate mit 9600 Baud
zusammen bringst (verwende besser einen "Baudratenquarz" mit 3,68
MHz) könnte dieser Punkt hier schon knapp werden.

Von der Rechenleistung sollte der AVR aber locker ausreichen (16 MHz
sind da schon der overkill). Die anderen Aufgaben werden aber schon
(geringfügig) beeinträchtigt. Irgendwo muss die Rechenleistung ja her
kommen. Hier mal ein Rechenbeispiel:

Wenn wir jetzt mal annehmen du hast einen Quarz von 3,68 MHz und 115200
Baud (sind ca. 12 Kb/s) und ein Integer + Overhead braucht 3 Byte dann
schaffst du ca. 4000 Integers / Sekunde. (Limit von der Schnittstelle)
für jeden Integer hast dann 920 Takte/Befehle zur verfügung, wobei
simples rüberschaufeln ca 100-200 Takte brauchen wird. Wenn du nicht
mit jedem Integer noch eine aufwändige Berechnung durchführst und das
interruptgesteuert programmierst, bleibt dir in der Mainloop selbst bei
dieser Geschw. noch genügend Rechenleistung (ca. 80%), das Display
aktualisieren.

Gruß
Roland
Gast #325583
Lesenswert?
• ▲
▼
4.000.000  8  38400 - 1 = 12,02

Wenn er wirklich mit einem 4MHz Quarz läuft, dann würde diese Lösung
mit Double-Speed-Bit gehen. Es verschlechtert den Empfang vom UART,
aber er will ja nur senden.
Gast #325587
Lesenswert?
• ▲
▼
@Roland

"wobei simples rüberschaufeln ca 100-200 Takte brauchen wird".

Erklaer bitte was du mit "Rueberschaufeln" meinst. Den Transfer
leistet die UART ohne Hilfe des cores. Der muss bei 115200 Baud nur
alle 87 usec ein paar wenige cycles (<< 30) spendieren um die UART mit
einem weiteren Datenbyte zu fuettern. Daraus ergibt sich ein Lastanteil
von 0,00082% bei 3,68MHz Taktfrequenz fuer die Bedienung der UART. Hab
ich da was falsch verstanden ?
#325589
Lesenswert?
• ▲
▼
Hmmm...

Ich "schaufle" da garnicht, ich überlasse das dem LCD-Treiber (mit
256 Bytes Ringbuffer), der schiebt das im sowiso aufgerufenen
Timer-Interrupt statt auf LCD einfach an UART. Das hat den Vorteil,
dass ich alle (für das LCD vorhandenen) Print-Routinen (Umwandlung von
Variablen oder Konstanten in ASCII-Text) für die Ausgabe nutzen kann.
Beispiel: http://www.hanneslux.de/avr/stopuhr/index.html

...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.