mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC im AVR Studio Simulator


Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mein Programm simuliere, wo ich eine ADC Auswertung vom ADC 
habe:

StartADConChanel0_8Bit:
  push r16
    in r16, ADMUX
    andi r16,0b11110000  ;Maskierung
    ori r16, 0b00000000  ;Maskierung
    out ADMUX, r16    
  pop r16
  
      sbi ADCSRA, ADSC   ;Starte ADC durch setzen des Bits ADSC  
ABC0:    sbis ADCSRA, ADSC  ;Warte bis Messung fertig ist
ret ;dann zurück
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy11 (Gast)
Datum:

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

lg andy

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander v. Grafenstein (avogra)
Datum:

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

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bbb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
normale zyklen != adc zyklen

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.