Forum: Mikrocontroller und Digitale Elektronik Wie internen Temperatursensor des ATTinys 25 ansteuern.


von Karsten (Gast)


Lesenswert?

Hallo,

eine Frage an die Experten:

Ich versuche den internen Temperatursensor des ATTinys 25 anzusteuern.
Auf große Genauigkeit kommt es mir nicht an.

Bin so langsam echt am verzweifel, was mach ich falsch? Habe mich streng
an das Datenblatt gehalten.

hier mal der Quellcode:

ADTemperatur:

  ldi temp_interrupt, 0b10101111  ;intern
  out admux, temp_interrupt
  ldi temp_interrupt, 0b11000011
  out adcsra, temp_interrupt
  nop
  nop
  nop
  nop
  nop
Feedback3:
  SBIC adcsra, 6
  rjmp Feedback3
  in Temperatur_UL, ADCl
  in Temperatur_UH, ADCh



Über eine kleine Hilfe wäre ich euch sehr dankbar. Seit zwei Tagen
bastele ich schon dran rum und habe irgendwie ein Brett vorm Kopf.

Was für Werte habe ich denn bei Raumtemperatur in den Resgistern zu 
erwarten?
Ergebnis soll linksbündig sein. Will nur das Highbyte auswerten.

Die Externen Wandler arbeiten problemlos.

Grüße

Karsten

von Flo (Gast)


Lesenswert?

Du weist nicht, was du für Werte erwarten kannst?
Kleine Frage: Wie stellst du fest, dass die Wandlung nicht tut?
Kommt immer 0 raus oder wie macht sich das bemerkbar?

von Michael U. (amiga)


Lesenswert?

Hallo,
1
;************************** mißt ADC-Wert des NTC **************************
2
; Sub: Wartet ca. 20ms
3
; Parameter:  -
4
; Return:    -
5
; Scratch-Reg:  -
6
;***************************************************************************
7
8
tiny_temp_read:
9
    ldi    TEMP_0,(1<<REFS1) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0)    ; 1,1V Refs, ADC4
10
    out    ADMUX,TEMP_0
11
12
    ldi    TEMP_0,(1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)    ; ADC ein, Prescale 64 -> 125kHz
13
    out    ADCSRA,TEMP_0
14
15
    ldi    TEMP_0,(1<<ADC3D)                ; digital In-Buffer aus
16
    out    DIDR0,TEMP_0   
17
18
    ldi    TEMP_0,3
19
20
tiny_temp_read_loop:
21
    sbi    ADCSRA,ADSC                    ; Start
22
23
tiny_temp_read_wait:
24
    sbic  ADCSRA,ADSC                    ; fertig?
25
    rjmp  tiny_temp_read_wait                ; nein
26
27
    in    TEMP_L,ADCL
28
    in    TEMP_H,ADCH
29
30
    dec    TEMP_0
31
    brne  tiny_temp_read_loop
32
33
    cbi    ADCSRA,ADEN                    ; ADC aus
34
    
35
    ret

das ist die Routine aus meinem Sensor im Gefrierfach...

Der Offset der Werte ist stark Exemplarabhängig, mit Thermometer 
vergleichen und als Konstante dazurechnen reicht für einfache Sachen.

Die Ein-/Ausschalterei des ADC ist dafür, den AVR im Powerdown wenig 
Strom verbrauchen zu lassen.

Gruß aus Berlin
Michael

von Drachenbändiger (Gast)


Lesenswert?

Karsten schrieb:
> Was für Werte habe ich denn bei Raumtemperatur in den Resgistern zu
> erwarten?
> Ergebnis soll linksbündig sein. Will nur das Highbyte auswerten.

Datenblatt, Table 17.2

BTW: Hier werden sich mehr Leser um Deinen Code kümmern, wenn Du 
anstelle der absoluten Werte symbolische verwendest!

von Karsten (Gast)


Lesenswert?

im datenblatt stehen ja ein paar werte drin die bei 25 grad zu erwarten 
sind.
hatte bisher einen tiny13 eingesetzt.

der tiny25 dient als pwm controller für einen hochsetzer der einen
konstanten strom liefert.

wenn die lampe zu warm wird soll er einfach auf die kleinste stufe die
leistung reduzieren.

wenn noch wer erfahrung mit dem internen sensor gesammelt hat, bin
für jede hilfe dankbar!

auch schon mal vielen dank für die sie schon geantwortet haben.


lg

karsten

von Drachenbändiger (Gast)


Lesenswert?

Was Deine eigentlich Frage ist, wird mir bisher nicht klar.

Ob Du wirklich 2 Bits verwerfen willst, kann ich nicht entscheiden.

Mach doch mal Folgendes:

- ADC für Temperaturmessung initialisieren
- Messwert auslesen, diesen ersten Wert verwerfen
- ADSC erneut setzen, noch einmal messen
- diesen Wert ausgeben (UART, LCD, LEDs ... irgendwie halt)

Das Ganze ohne große Belastung des Controllers bei Raumtemperatur, um 
einen Referenzwert zu bekommen. Eventuell auch eine Messreihe bei 
verschiedenen Temperaturen (z.B. Plastiktüte mit warmem Wasser [T 
bekannt] auf den µC legen).

von Hannes L. (hannes)


Lesenswert?

Hier gibt es noch eine Temperaturmessung mittels Tiny24, dessen Sensor 
mit dem Tiny25 identisch sein sollte:
Beitrag "Re: Temperaturmessung mit ATmag88 intern ADC8 (Assembler)"

...

von Karsten (Gast)


Lesenswert?

hallo,

ich ralle es leider nicht, wie ich den sensor initialisiert bekomme.
habe eigentlich mich nach dem datenblatt gerichtet.

der attiny steuert eine lampe mit einem hochsetzsteller an und
wenn die zu warm wird soll er auf die kleinste stufe dimmen.

mit einem externen sensor bisher kein problem. nur habe ich den externen
port gebraucht und will den internen verwenden. auf genauigkeit kommt es 
bei der sache nicht an, nur die finger soll man sich nicht verbrennen..

lg

karsten

von Drachenbändiger (Gast)


Lesenswert?

Hat Flo schon gefragt, und Du hast noch nicht geantwortet:
Woran willst Du erkennen, dass Du den internen Sensor nicht korrekt 
initialisiert hast?

von Karsten (Gast)


Lesenswert?

hallo,

werde morgen versuchen den ad wert einfach als pwm wert
auszugeben. das sollte mit dem oszilloskop ja kein problem sein.


stimmt schon, leider weiß ich nicht ob ich den adwandler nicht schon 
richtig initialisiert habe.


ich werde berichten.

grüße

karsten

von Karsten (Gast)


Lesenswert?

Hallo allerseits,

so bin leider erst heute dazu gekommen  den AD-Wert des internen Fühlers
über den PWM-Ausgang des ATTinys auszugeben.

vielen Dank an die die mich auf den rechten Pfad der Erkenntnis gebracht 
haben.

Wie schon einige vermutet haben war der Temperatursensor richtig 
initialisiert und arbeitet auch. Allerdings hatte ich wohl einfach
einen falschen Registerinhalt angenommen und deshalb auch keine
Funktion im meinem Sinne gehabt!


Vielen Dank an Alle! Frohe Ostern

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.