www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR USART Timing Frage


Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich beschäftige mich zur Zeit mit dem USAT eines AT90CAN.
Kann mal jemand folgende Aussage bestätigen oder widerlegen:

Bei einer USART Übertragungsrate von 9600bps bleibt ein empfangenges 
Byte 830µs in UDR0 (9600/8 = 1200; 1/1200 = 830µs).
Das bedeutet wenn eine andere Interrupt Service Routine aufgerufen wird, 
kann diese locker 500µs lang sein ohne das ein Zeichen per UART vrloren 
geht. Ist das richtig? Kommt mir sehr lang vor...

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
9600/10 wenn man mit 1 Start und 1 Stopbit und 0 Paritätsbit rechnet.
=> 1042 µs / Zeichen

Ja es ist auf der Zeitskala des µC sau langsam. Es reicht für mehr als 
4000 Eintakt-Instruktionen bei 4 MHz. Deshalb ist das 
UART-Pollingverfahren Verschwendung von Resourcen und 
UART-Interruptbetrieb sinnvoll.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:
> Deshalb ist das
> UART-Pollingverfahren Verschwendung von Resourcen und
> UART-Interruptbetrieb sinnvoll.

Das ist natürlich Bullshit, wie alle pauschale Aussagen.

Es kommt immer auf die jeweilige Aufgabe an.
Z.B. ein Bootloader pollt auf die UART, da er ja nichts anderes zu tun 
hat, als auf die Daten zu warten, die er flashen soll.
Er spart sich dann die ganze Pusherei und Popperei (kleinerer Code).


Und in der Regel macht man gerade langsame Sachen lieber im Polling und 
schnelle Sachen als Interrupt, damit schnelle Sachen nicht beeinflußt 
werden.

Erst recht beim AVR, da der ja keine Interruptprioritäten hat.


Peter

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm... ich dachte Interrupts mit niedrigerer Vektornummer haben beim AVR 
hoehere Prioritaet?

Zitat aus dem Datenblatt:

The complete list of Vectors is shown in “Interrupts” on
page 46. The list also determines the priority levels of the different 
interrupts. The lower the address the higher is the priority level.

Wobei bei nested Interrupts jeder aktivierte Interrupt den aktuellen 
unterbrechen kann... also im Endeffekt isses nich weit her mit den 
Prioritaeten. Die Frage ist nur: Wenn zwei Interrupts fast zeitgleich 
ausgeloest werden, welcher wird bevorzugt?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Michael G. (linuxgeek)

>Hm... ich dachte Interrupts mit niedrigerer Vektornummer haben beim AVR
>hoehere Prioritaet?

Interrupt

>Prioritaeten. Die Frage ist nur: Wenn zwei Interrupts fast zeitgleich
>ausgeloest werden, welcher wird bevorzugt?

Der mit dem niedrigeren Interruptvektor.

MfG
Falk

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:
> Stefan "stefb" B. wrote:
>> Deshalb ist das
>> UART-Pollingverfahren Verschwendung von Resourcen und
>> UART-Interruptbetrieb sinnvoll.
>
> Das ist natürlich Bullshit wie alle pauschale Aussagen.

Peter, ich bin getroffen von deinem so unfreundlichen Kommentar zu 
meiner Antwort.

Wäre es nicht gegangen, deine Argumente zu bringen, ohne mir natürliche 
Bullschitterei anzuhängen?

Natürlich ist es eine pauschale Aussage. 'tschuldigung, dass ich keine 
Goldwaage mitgebracht habe und bei meinem Schnellschuss jeden möglichen 
Aspekt berücksichtigt habe oder die Aussage bis ins Unkenntliche 
relativiert habe.

Spass macht das nicht mehr.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:

> Peter, ich bin getroffen von deinem so unfreundlichen Kommentar zu
> meiner Antwort.

O.k., nächstes mal sag ich wieder "Mumpitz".


> 'tschuldigung, dass ich keine
> Goldwaage mitgebracht habe und bei meinem Schnellschuss jeden möglichen
> Aspekt berücksichtigt habe oder die Aussage bis ins Unkenntliche
> relativiert habe.

Gerade bei den AVRs sollte man mit Interrutps sparsam umgehen.
Deshalb fand ich Deine Aussage sehr leichtfertig.
Auf die Goldwaage legen wäre was anderes.


> Spass macht das nicht mehr.

Nicht immer alles so ernst nehmen.
Wir wärs mit ner Runde Bullshit Bingo:

http://www.hjsv.com/games/bingo/bingo-d.html


Peter

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter Dannegger (peda)

>Gerade bei den AVRs sollte man mit Interrutps sparsam umgehen.

Num mach mal halblang. Du tust ja gerade so, als ob die AVRs 
schwerstbehindert wären, weil sie keine Interruptprioritäten haben.

MfG
Falk

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Mumpitz kann ich leben.

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte jetzt rausfinden wie hoch ich die UART Baudrate stellen kann 
ohne das ein Zeichen verloren geht.

Dazu habe ich den längsten Pfad der ISR mit AVR Studio simuliert. Die 
Bearbeitung dauert 35,31µs. Das würde bedeutet die Baudrate darf maximal 
250kbps betragen. Jetzt habe ich aber was gelesen, das UDR über 2 Puffer 
verfügt. Bedeutet das, die Baudrate darf theoretisch 750kbps betragen 
ohne das etwas verloren geht?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Marco (Gast)

>Bearbeitung dauert 35,31µs. Das würde bedeutet die Baudrate darf maximal
>250kbps betragen.

Ja, wenn dein Quarz das hergibt.

>Jetzt habe ich aber was gelesen, das UDR über 2 Puffer
>verfügt.

In Empfangsrichtung.

> Bedeutet das, die Baudrate darf theoretisch 750kbps betragen
>ohne das etwas verloren geht?

Nein. Der Puffer kann nur KURZZEITIG Daten aufnehemen, wenn die CPU 
gerade mit anderen Dingen beschäftigt ist. Im MITTEL aber reichen deine 
35,31us nicht, um DAUERHAFT 750kBaud verlustfrei zu empfangen.

Interrrupt

MFG
Falk

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.