www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik kleines Problemchen bei ADC-Messung...


Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich baue gerade mit einem Tiny15L einen Temperaturfühler mit
Segmentanzeige. Und da ich für diesen µC keinen C-Compiler gefunden
habe, bin ich gerad dabei das ganze in Assembler umzusetzen.

Der nun doch schon relativ große geratene Quellcode funktioniert bisher
recht gut, jedoch liegt da irgendwie ein Problem beim Auslesen des ADCs
vor. Die ADCH/ADCL-Register gibt mir nämlich stehts denn selben wert,
binär:01000001xx bzw. dezimal in 8-Bit umgewandel:65 auf das Abzeige.
Egal ob ich den zu testenden ADCPin auf GND oder VCC leg.

Ich bin mir ziemlich sicher das es nur irgendeine Kleinigkeit sein
kann, evtl. lese ich das ADCL/ADCH falsch aus!? Oder ist der ADC
hinüber? ..mir qualmt der Kopf.

hier der relevanten Teil des Quellcodes..
Vielleicht kann mir da jemand einen kleinen Ratschlag geben.

-----------------------------------------------

;IDE : AVRStudio V4.09
;µC  : ATtiny15L

.def temp   = r18  ;Temporär-Register
.def Ziffer0  = r20  ;Ziffernspeicher
.def Ziffer1   = r21  ;Ziffernspeicher
.def Ziffer2    = r22  ;Ziffernspeicher
.def temp_H   = r23  ;ADCH-Buffer
.def temp_L  = r24  ;ADCL-Buffer



  ;----ADC-Initialisierung--- (hier Funktioniert was nicht)

  ldi temp,0x00       ;ADC abschalten
  out ADCSR,temp
  ldi temp,0b00000011 ;Aref=Vcc ;ADChannel=(ADC3/PB4)
  out ADMUX,temp
  ldi temp,0b10000011 ;ADMux-Enable, Prescaler eingestellt
  out ADCSR,temp



        ;---ADC-Messung--
  cli ;IRQs deaktivieren

  ldi temp, ADCSR  ;ADC-Starten
  ori temp,0b01000000
  out ADCSR, temp

  warteADC:
  sbic ADCSR, ADSC
        rjmp warteADC

  ldi temp_L,ADCL
  ldi temp_H,ADCH

        ;ldi temp_H,0b00000011  ;konstante Testwert funktionieren
  ;ldi temp_L,0b11111100  ;komischerweise




        ;hier zur Vollständigkeit meine Umwandlung in 8Bit-
        ;Dezimalzahlen, funktioniert wunderbar mit Testwerten

  ;--Umwandlung--
        lsr temp_L
  lsr temp_L
  lsl temp_H
  lsl temp_H
  lsl temp_H
  lsl temp_H
  lsl temp_H
  lsl temp_H

  andi temp_L,0b00111111
  andi temp_H,0b11000000
  add temp_H,temp_L

  ;8-Bit in Dezimal umwandeln --> in Ziffer[2..0] speichern
  ldi Ziffer0,0x00
  ldi Ziffer1,0x00
  ldi Ziffer2,0x00

  Dezimal2:   ;
  sbci temp_H,100
  inc Ziffer2
  brcc Dezimal2
  dec Ziffer2
  ldi temp,100
  add temp_H,temp

  Dezimal1:
  sbci temp_H,10
  inc Ziffer1
  brcc Dezimal1
  dec Ziffer1

  Dezimal0:
  ldi temp,11
  add temp_H,temp
  mov Ziffer0, temp_H

        ;nun sind die drei Dezimalzahl in Ziffer[2..0] (Maximalwert
255)

Autor: Werner A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, du musst die Wert per IN zurücklesen. So etwa

in adc_l, ADCL     ; gemessenen Wert einlesen
in adc_h, ADCH

Autor: Andreas F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

da war ich etwas langsamer,

ersetz mal alle diese LDI durch IN

  ldi temp, ADCSR  ;ADC-Starten (hier Funktioniert was nicht)
  ori temp,0b01000000
  out ADCSR, temp

  warteADC:
  ;ldi temp,ADCSR
  ;andi temp,0b01000000
  ;cpi temp,0
  ;brne warteADC
     sbic ADCSR, ADSC
     rjmp warteADC


  ;  --Umwandlung--
  ldi temp_L,ADCL ;10-Bit ADC in 8-Bit umwandeln (ab hier FUNKTIONIERT
alles es kommt aber stets 065 als ADC-Messwert)
  ldi temp_H,ADCH

viele Grüße

Andi

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wer hätte es geglaubt: es funktioniert. Vielen vielen dank, ihr seit
die Besten!!



PS: Sorry das das Thread so lang wurde..

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.