www.mikrocontroller.net

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


Autor: Karsten (Gast)
Datum:

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

Autor: Flo (Gast)
Datum:

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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
;************************** mißt ADC-Wert des NTC **************************
; Sub: Wartet ca. 20ms
; Parameter:  -
; Return:    -
; Scratch-Reg:  -
;***************************************************************************

tiny_temp_read:
    ldi    TEMP_0,(1<<REFS1) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0)    ; 1,1V Refs, ADC4
    out    ADMUX,TEMP_0

    ldi    TEMP_0,(1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)    ; ADC ein, Prescale 64 -> 125kHz
    out    ADCSRA,TEMP_0

    ldi    TEMP_0,(1<<ADC3D)                ; digital In-Buffer aus
    out    DIDR0,TEMP_0   

    ldi    TEMP_0,3

tiny_temp_read_loop:
    sbi    ADCSRA,ADSC                    ; Start

tiny_temp_read_wait:
    sbic  ADCSRA,ADSC                    ; fertig?
    rjmp  tiny_temp_read_wait                ; nein

    in    TEMP_L,ADCL
    in    TEMP_H,ADCH

    dec    TEMP_0
    brne  tiny_temp_read_loop

    cbi    ADCSRA,ADEN                    ; ADC aus
    
    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

Autor: Drachenbändiger (Gast)
Datum:

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

Autor: Karsten (Gast)
Datum:

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

Autor: Drachenbändiger (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Karsten (Gast)
Datum:

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

Autor: Drachenbändiger (Gast)
Datum:

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

Autor: Karsten (Gast)
Datum:

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

Autor: Karsten (Gast)
Datum:

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

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.