Wie internen Temperatursensor des ATTinys 25 ansteuern.

Gast #1652920
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
#1652955
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
Gast #1652957
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!
Gast #1653003
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
Gast #1653032
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).
Gast #1653132
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
Gast #1653334
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
Gast #1660219
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren