Forum: Mikrocontroller und Digitale Elektronik AVR USART Timing Frage


von Marco (Gast)


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...

von Stefan B. (stefan) Benutzerseite


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.

von Peter D. (peda)


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

von Michael G. (linuxgeek) Benutzerseite


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?

von Falk B. (falk)


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

von Stefan B. (stefan) Benutzerseite


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.

von Peter D. (peda)


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

von Falk B. (falk)


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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Mit Mumpitz kann ich leben.

von Marco (Gast)


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?

von Falk B. (falk)


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

von Marco (Gast)


Lesenswert?

Danke!

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
Noch kein Account? Hier anmelden.