Forum: Mikrocontroller und Digitale Elektronik ADC im AVR Studio Simulator


von Andy11 (Gast)


Lesenswert?

Wenn ich mein Programm simuliere, wo ich eine ADC Auswertung vom ADC 
habe:
1
StartADConChanel0_8Bit:
2
  push r16
3
    in r16, ADMUX
4
    andi r16,0b11110000  ;Maskierung
5
    ori r16, 0b00000000  ;Maskierung
6
    out ADMUX, r16    
7
  pop r16
8
  
9
      sbi ADCSRA, ADSC   ;Starte ADC durch setzen des Bits ADSC  
10
ABC0:    sbis ADCSRA, ADSC  ;Warte bis Messung fertig ist
11
ret ;dann zurück
12
rjmp ABC0 ;ansonsten schau nach bis sie fertig is

Wenn ich dieses Unterprogramm aufrufe, dann braucht das im Asembler 
55,75 us, jetzt frage ich mich aber ob das im richtigen Programm auch si 
ist, weil wenn ich das ADSC Bit auch händisch setzen kann und dann aus 
der Schleife komme, und vielleicht ist das auch so bei meiner richtigen 
Messung.

Oder ist das das maximale was mein UP brauchen darf, damit er aufgibt 
ohne das ADSC als Rückmeldung zu bekommen?

lg andy

von spess53 (Gast)


Lesenswert?

Hi

>damit er aufgibt ohne das ADSC als Rückmeldung zu bekommen?

Wer soll hier aufgeben? Das UP wartet bis der ADC fertig ist. Und das 
ist er normalerweise nach 13 ADC-Takten.

MfG Spess

von Andy11 (Gast)


Lesenswert?

spess53 schrieb:
> Wer soll hier aufgeben? Das UP wartet bis der ADC fertig ist. Und das
> ist er normalerweise nach 13 ADC-Takten.
1
ABC0:    sbis ADCSRA, ADSC  ;Warte bis Messung fertig ist
das hier passiert im AVR Sim nicht von allein, soweit ich weiß

lg andy

von spess53 (Gast)


Lesenswert?

Hi

>das hier passiert im AVR Sim nicht von allein, soweit ich weiß

Das ADSC gelöscht wird, kann ich jetzt nicht 100%-ig beschwören. Aber 
der ADC-Complete-Interrupt wird ausgelöst (sofern freigegeben). Und das 
hängt beides zusammen.

Mach doch einfach mal einen Breakpoint in die Zeile: 'ret ;dann zurück', 
und lass den Simulator laufen. Aber bitte etwas länger warten. Der 
Simulator ist um einiges langsamer als der reale AVR.

MfG Spess

von Alexander V. (avogra)


Lesenswert?

ich hoffe, dein µC-Takt in der Simulation stimmt mit dem später real 
eingesetzten überein?

von Andy11 (Gast)


Lesenswert?

spess53 schrieb:
> Mach doch einfach mal einen Breakpoint in die Zeile: 'ret ;dann zurück',
> und lass den Simulator laufen. Aber bitte etwas länger warten. Der
> Simulator ist um einiges langsamer als der reale AVR.

hab ich gemacht, und ich bekomme 27,88 us raus, aber was bringt mir das 
jetzt?

von Andy11 (Gast)


Lesenswert?

>ich hoffe, dein µC-Takt in der Simulation stimmt mit dem später real
>eingesetzten überein?
nein das tut er nicht, aber ich berücksichtige das indem ich die Zeit 
durch 2 Rechne.

lg andy

von spess53 (Gast)


Lesenswert?

Hi

>hab ich gemacht, und ich bekomme 27,88 us raus, aber was bringt mir das
>jetzt?

Ich dachte du wolltest wissen, wie lang dein UP dauert?

Wenn du

1. Die Taktfrequenz für deine Simulation richtig eingestellt und
2. den Cycle Counter am Anfang des UP auf Null gestellt hast

entspricht der angezeigte Wert der Laufzeit im realen AVR.

MfG Spess

von Andy11 (Gast)


Lesenswert?

spess53 schrieb:
> 1. Die Taktfrequenz für deine Simulation richtig eingestellt und
> 2. den Cycle Counter am Anfang des UP auf Null gestellt hast
>
> entspricht der angezeigte Wert der Laufzeit im realen AVR.

habe ich gemacht, das UP selbst dauert wenn ich in der ersten Zeile bin 
und alles auf 0 ist und ich dann auf Step out gehe, dann kriege ich die
55,75 us. Der letzte Schritt dauert aber mehr als nur 13 Zyklen, wenn 
ich händisch durchgehe, und das war dann meine Frage.

lg andy

von bbb (Gast)


Lesenswert?

normale zyklen != adc zyklen

von spess53 (Gast)


Lesenswert?

Hi

>normale zyklen != adc zyklen

Richtig. Du musst den Prescaler des ADC berücksichtigen. Also, wenn du 
einen Prescaler von 128 eingestellt hast, dauert ein ADC-Takt 128 
Controller-Takte. Und das mal 13 ergibt die Wandlungszeit.

MfG Spess

von Andy11 (Gast)


Lesenswert?

>2. den Cycle Counter am Anfang des UP auf Null gestellt hast

bbb schrieb:
> normale zyklen != adc zyklen

laut Spess schon,
wie kann ich denn in ADC Zyklen umrechnen?
was stimmt jetzt?

lg andy

von spess53 (Gast)


Lesenswert?

Hi

>laut Spess schon,

Wieso. Ich habe in meinem ersten Post geschrieben:
 'normalerweise nach 13 ADC-Takten'.

Das dir der Unterschied nicht geläufig war, habe ich nicht geahnt. 
Sorry.

MfG Spess

von Andy11 (Gast)


Lesenswert?

ok, jetzt stimmt es überein. Und diese 200 Taktzyklen braucht er jetzt 
tatsächlich im Controller?

Weil in einem Tutorial habe ich gelesen, dass man nicht unbedingt auf 
die Rückmeldung warten muss, sondern 3 nop auch reinmachen kann und es 
auch funktionieren könnte, deshalb die Unsicherheit.

lg andy

von spess53 (Gast)


Lesenswert?

Hi

>Weil in einem Tutorial habe ich gelesen, dass man nicht unbedingt auf
>die Rückmeldung warten muss, sondern 3 nop auch reinmachen kann und es
>auch funktionieren könnte, deshalb die Unsicherheit.

Wer schreibt denn solchen Unsinn? Nur wenn du den ADC-Complete-Interrupt 
benutzt, brauchst du nicht warten. Und dann noch nicht mal ein NOP. Im 
Zweifelsfall solltest du dich einfach am Datenblatt orientieren.

MfG Spess

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.