Temperaturmessung mit ATmag88 intern ADC8 (Assembler)

Gast #1561703
Lesenswert?

Hallo,

der Mega88 hat ja einen internen Temperatursenor, mit diesem möchte ich 
die Raumtemperatur messen. Laut Datenblatt soll ich dem Aref pin mit 
einem Kondensator bestücken. Soll das heißen es reicht den Kondensator 
mit einem Pin an Aref anzuschließen und den zweiten Pin auf Masse zu 
legen oder muss der Arefpin zusätzlich auf Vcc legen?

Gruß, pacer
Gast #1562519
Lesenswert?

>Zur Zeit habe ich den Mega88 PU im Einsatz.
das ist der alte atmega88 ohne temp. sensor, das "pu" ist nur der 
gehäuse typ.

>Da ich den Pin vorher auf
>Vcc hatte, hoffe ich mal, dass ich das Teil nicht geschrottet habe.
habe es jetzt im datenblatt gesehen das der referenz pin einen 
eingangswiderstand von ca. 32k ohm hat.
dadurch sollte eigentlich nichts passieren wenn aref 5 volt hat und die 
1,1 volt interne referenz zugeschalten ist.
Gast #1562672
Lesenswert?

Na so alt ist der Mega88 nu auch nicht, ich hab ihn Ende letzten Jahres 
bei Reichelt gekauft (ATMEGA 88-20 PU).
Die 1,1V liegen am Ref-Pin an. Trotzdem liefert mir mein Programm 1023 
zurück.

Da es immer noch ein Fehler in der Software sein kann hier mal meine 
Initroutine:
1
 
2
ldi     temp, (1<<REFS0) | (1<<REFS1) | (0<<ADLAR) | (1<<MUX3)    ; Kanal 8, interne Referenzspannung 1.1V
3
sts     ADMUX, temp ; Bits rechts ausgerichtet (10Bit)
4
ldi     temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)    ; ADC enable, Teiler 128
5
sts     ADCSRA, temp

und mein Hauptprogramm:
1
Hauptschleife:          
2
 GetSampleADC8:
3
  lds    temp, ADCSRA
4
  ori    temp, (1<<ADSC) 
5
    sts     ADCSRA, temp          ; den ADC starten
6

7
 wait_adc8:
8
  lds    temp, ADCSRA
9
  sbrc    temp, ADSC            ; wenn der ADC fertig ist, wird dieses Bit gelöscht
10
    rjmp    wait_adc8
11

12
; ADC mit 10 Bit einlesen:
13
    lds      ADClow,  ADCL        ; immer zuerst LOW Byte lesen
14
    lds      ADChigh, ADCH        ; danach das mittlerweile gesperrte High Byte
15

16
;ADC-Wert in ASCII umwandeln und ausgeben
17
  rcall ChangeIntoASCII
18
  rcall warte_1s
19
  rcall warte_1s
20
  rcall warte_1s
21
;SendNewLine
22
  ldi temp, 1
23
  rcall Befehl_an_LCD
24

25
rjmp Hauptschleife

vielleicht findet ja jemand einen Fehler?

Gruß, pacer
#1562743
Lesenswert?

Gibt es den "Neuen" überhaupt schon???
Ich habe noch nichtmal das Datenblatt dazu eingekellert, so neu ist der.

Mit Tiny24 habe ich mal ein Thermometer gebaut (siehe Anhang). Die 
Hardware ist hier beschrieben:
http://www.hanneslux.de/avr/divers/pm24/index.html

...
Angehängte Dateien:
Gast #1562797
Lesenswert?

Was heißt normal zugänglich? Dort kann jeder bestellen. Im Gegensatz zu 
den großen deutschen Distributoren ist es bei denen kein Problem auch 
als Privatkunde zu bestellen. Die Lieferung erfolgt nur etwas langsamer 
(ca. 3 Werktage). Und im Vergleich zu Farnell und RS finde, zumindest 
ich persönlich, es dort vergleichsweise günstig.
Gast #1562847
Lesenswert?

>;Kanal 8, interne Referenzspannung 1.1V
der atmega88 hat keinen kanal 8 der ist laut datenblatt "reserved" 
weshalb auch ein falsches ergebnis ausgelesen wird.

>ich bräuchte einen mit der Bezeichnung Mega88PA-PU?
so ist es.

>Kann man die Revision des Chips auch anhand der Signatur erkennen?
ja kann man.
der atmega88pa hat laut datenblatt : 1E930F
und die alte version atmega88      : 1E930A

>Ähm, wo finde ich denn das Änderungsprotkoll zu den Mega88?
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607#Migration_Notes

AVR512: Migration from ATmega48/88/168 to ATmega48P/88P/168P
AVR528: Migrating from ATmega48P/88P/168P to ATmega48PA/88PA/168PA

die atmega88P version gab es auch noch die wurde dann von der atmega88pa 
version abgelöst.
#2266666
Lesenswert?

Nur mal so zur Information: Laut Datenblatt beträgt die Genauigkeit des 
internen Temperatursensors +/-10°C. Ich kenne niemanden, der mit einer 
auf 10 Grad genauen Temperaturmessung zufrieden wäre! Dieser Sensor ist 
lediglich dazu gedacht, die Prozessortemperatur in etwa abschätzen zu 
können, um ihn bei drohender Überlastung runterzutakten, Warnmeldungen 
auszugeben oder andere Maßnahmen zur Abkühlung zu treffen. Einen anderen 
Zweck hat dieser Sensor nicht!!!

Nachteilig ist es übrigens, dass die interne 1,1 Volt Referenzspannung 
nicht genutzt werden kann, wenn man eine externe Spannung an Aref 
anliegen hat, mit der man andere ADC Messungen durchführt. D.h. in 
diesem Fall kann die Messung mit dem internen Temperatursensor nicht bei 
1,1 Volt Referenzspannung stattfinden, sondern muss mit der Spannung an 
Aref stattfinden, was aber auch geht. Die ausgelesenen 
(Temperatur-)Werte sind dann "zu klein", wenn die Spannung an Aref > 1,1 
Volt ist. Man muss sie daher entsprechend skalieren mit dem Faktor 
(Uaref/1,1V). Bei 5 Volt an Aref beträgt dieser Faktor also 4,55. Das 
bedeutet auch, dass in diesem Fall der Temperaturwert "nur" auf 4,55 
Grad genau ist. Aber das ist völlig egal, weil der Sensor ja eh nur mit 
einer Genauigkeit von 10 Grad misst.

Wenn ich bei meinem Atmega328P an Aref z.B. 5 Volt Referenzspannung 
anliegen habe und eine Temperaturmessung durchführe, erhalte ich einen 
Wert von 76-77 bei 25 Grad Chip-Temperatur. Mit dem Faktor 4,55 
skaliert, ist das also ein Wert um 350 (Achtung! Das sind KEINE 
Millivolt, sondern ADC-Werte, also LSB). Umgerechnet ist diese Spannung 
also ca. 370 mV.

Wenn man diese Regeln beachtet, kann man auch mit 5 Volt 
Referenzspannung (oder anderen Vcc) eine gute Abschätzung der 
Prozessortemperatur erreichen.

Gruß, Volker

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