mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny13 ADC FRAGE ASM (VERSTEHEN)


Autor: Gerd A. (inputsammler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey

Ich versuche mich gerade mal an den ADC um ihn zu verstehen.
Habe hier einen Attiny13 und eine 4x3 Matrix die ich über ADDC einlese.
Und über einen SW Uart ausgebe.

Im Moment ist adc auf Interupt eingestellt und es kommen auch die 
passenden Werte am terminal an.

Meine 1.Frage ist funktioniert das überhaupt.
Interupt kommt
--> lese WERT nach R1
--> dann lese ich den Wert nochmal ein um zu sehen ob er sich verändert 
hat. Eina Art sicherstellen das auch der richtige Wert kommt.
Aber kann er sich zu dieser zeit überhaut ändern ??

2. Frage
Im Moment ist er im FreeRunning Mode.
Dachte wenn ich nicht immer aktiv sein soll sondern nur wenn sich was am 
ADC Eingang (WERT) ändert muß ich ihn mit Interrup steuern.
Aber er ist immer im Interupt (LED blinkt)
Was muß ich machen damit er nur beim ändern des ADC Wertes in den 
Interupt geht.

Danke vor erst mal

Gruß Gerd
intadc:              
      ;[STACK usw...] Hier macht die Int-Service-Routine irgendwas, benutzt Register R16
getADC:    in rKey,ADCH ; Lese AD-Wandler MSB
      mov R1,rKey ; kopiere AD-Wandler-Wert nach R1
      
      in R16,ADCH  ; LADE ADC WERT für CP nach R16
      ldi  temp,40  ; Für Entprellen lade ich 40 mnal sehen ob adc gleich ist


Entprell1:    ; von temp ein abzeihen decrement
      IN R24,ADCH  ; Lade ADCh nochmal in Register rmp (R20)  
      CP R24,R16  ; Vergleiche die 2 Ergebinisse 
      BRNE  getADC  ;If Z set
      dec  temp 
      brne  Entprell1
      sbi PORTB,REL1    ; Ausgang = aus ein
      rcall GetKeyCode

HIER SIND dann noch ein paar pausen unw erkennung des Wert aus der Tabelle übergabe an UART

     cbi PORTB,REL1    ; Ausgang = aus low
     RETI


  

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so wird as nix:
wenn du schnell genug 40 mal den ADC ausliest wird er immer den gleichen 
Wert haben
und du solltest in der Interruptroutine nicht so viel Zeit verplempern,
kein Wunder wenn gleich der nächste Interrupt kommt

Autor: Frank Schlaefendorf (Firma: HSCS) (linuxerr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wozu liest du den adc mehrmals aus? der adc kann einen interrupt 
generieren, wenn er mit der messung fertig ist und in die 
interruptroutine nimmst du die auswertung der adc-werte hinein, fertig. 
ein polling ist unnötig.

Autor: Gerd A. (inputsammler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke erst mal,

Der Interupt kommt sobald er fertig ist mit dem einlesen.
Also kann ich es nicht in der Routine testen ob der ADC wert der gleiche 
ist (können schon aber macht keinen Sinn) Verstanden

Das Problem das ich habe das DIE ADC Interrupt schnell hintereinander 
kommen.

Will den ADC Wert einer Zahl in der Tabelle ZUWEISEN. (Zahl von 1-12)
das geht auch so weit so gut.

Dich ich will sichergehen das der Wert auch 10x hintereinander der selbe 
ist.

Habe es mal geändert --> schalte global Interupt ab werte die sachen aus 
dann wieder aktiv.

BITTE nicht steinigen aber ich will hald asembler lernen damit ich den 
AVR auch verstehe..

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.