ADC im AVR Studio Simulator

Gast #1752782
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 #1752792
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
Gast #1752801
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
Gast #1752810
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
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 #1752850
>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
Gast #1752859
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
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
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 #1752896
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
Gast #1752900
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.