ADC im AVR Studio Simulator

Gast #1752782
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
Gast #1752810
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
Gast #1752839
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?
Gast #1752859
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
Gast #1752862
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
Gast #1752889
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
Gast #1752900
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
Gast #1752914
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren