Hallo,
ich weis die ist ungenau, ist auch nur eine Übung.
Welche 1,1V Reference aktiviert man?
Im ADMUXB Register oder die im ADMUXA Register?
Datenblatt Seite 144, 146.
Mit dem Code
1
read_onboard_Temp();// liest µC Temperatur aus
2
message.wert[1]=ADCL;//
3
message.wert[2]=ADCH;//
4
message.wert[3]=ADC;//
bekomme ich momentan ausgelesen für
ADCL = 28
ADCH = 1
ADC = 28
Wenn die ADC = 28 der Rest vom Byte Überlauf ist, dann stimmt das
irgendwie nicht. Das müssten ca. 45 sein, wenn 25°C = 300 LSB sind.
1
voidset_onboard_Temp_Measurement()
2
{
3
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);// ADC enable und Prescaler 64 (125kHz)
4
ADMUXA=(1<<MUX3)|(1<<MUX2);// enable Temp.Sensor
5
ADMUXB=(1<<REFS0);// 1,1V Reference
6
}
7
8
9
voidread_onboard_Temp()
10
{
11
ADCSRA|=(1<<ADSC);// Start A/D Wandlung
12
while(ADCSRA&(1<<ADSC));// warten auf fertige Wandlung
Aus ADCL = 28 und ADCH = 1 (BYTE)
würde ich ADC (WORD)
ADC = ADCL + 256 * ADCH = 28 + 256 * 1 = 284
zusammensetzen. Das ist etwas unter 300 (< 25 °C)
Keine Ahnung, wie deine Prog-Bibliothek den Wert ADC
zusammenwurstelt...
Zur Auswahl des Temperatursensors muss ADMUX richtig gesetzt werden:
MUX[5:0] bits in ADMUX register to “111111”
Zur Auswahl der Referenzspannungsquelle 1,1 V intern gehören
REFS0, REFS1 und REFS2:
REFS0 = 0
REFS1 = 1
REFS2 = 0
ADMUX Bits 7:6 – REFS[1:0]: Voltage Reference Selection Bits
ADCSRB Bit 4 – REFS2: Reference Selection Bit
Könnte ja sein, dass es hilft, wenn alle Einstellungen passend
gewählt sind ;-)
Hallo Veit,
deinen Code habe ich jetzt nicht geprüft.
Noch ein Hinweis in anderen Datenblättern zur internen
Referenzspannungsquelle findet man noch einen Hinweis, dass nach dem
Einschalten der Referenzspannungsquelle eine Wartezeit im 100 µs Bereich
notwendig ist !
Evtl. ist das hier auch noch der Fall.
Hallo,
okay, ADC ist ein 10Bit Wert. Kann mit Byte nicht stimmen. Mein
Lesefehler. Den kann ich so nicht übertragen. Muß demzufolge die
Einzelbytes nehmen, übertragen und dann zusammensetzen. Demnach müßten
meine Settings stimmen, wenn du auf 284 kommst. Hat ja 10% Toleranz das
Ding.
Aber wie kommst du auf deine Registersettings?
Hast du ins ATtiny841 Datenblatt geschaut?
http://www.atmel.com/Images/Atmel-8495-8-bit-AVR-Microcontrollers-ATtiny441-ATtiny841_Datasheet.pdf
Temperatursensor ADMUXA: MUX Bit 3 und 2 setzen
1,1V Reference ADMUXB: REF0 Bit setzen
ist meine Interpretation
Was ist dann mit der 1,1V Reference im ADMUXA Register? Was ist das?
Table 16-3
Hallo,
wenn die 284 LSB stimmen beim auslesen, dann liegt das Teil ja wirklich
hoffnungslos daneben. Im Grunde muß ich nur 275 vom LSB abziehen und
habe die Temp. in Grad Celius. Dann lande ich bei 9°C statt 25°C.
Das wären mehr als +/- 10°C.
Primär gehts mir darum ob ich die richtigen Bits in den richtigen
Registern setze.
Vielleicht mal den 'ADC Noise Reduction Mode' versuchen, der hat bei
meinem ATtiny84A (ich weiß, ist ein anderer Chip) eine deutliche
Verbesserung gebracht (wobei allerdings 'gut' noch immer etwas anderes
ist).
Hallo,
gut, ohne Nachkalibrierung gehts also nicht. Auch gut, ist kein Problem.
Hauptsache meine Settings stimmen erstmal.
Kann mir noch jemand sagen was die 1,1V Reference im ADMUXA Register zu
bedeuten hat? Normalerweise nimmt man doch die Auswahl im ADMUXB
Register.
Seite 144, 146.
Hi
>Kann mir noch jemand sagen was die 1,1V Reference im ADMUXA Register zu>bedeuten hat?
Das ist ganz einfach der Multiplexereingang zum Messen der
1,1V-Referenz.
MfG Spess
>Kann mir noch jemand sagen was die 1,1V Reference im ADMUXA Register zu>bedeuten hat?
Schau dir die Abbildung an
Figure 16-1. Analog to Digital Converter Block Schematic
Hallo,
okay, dachte das wäre irgendwie bissel sinnlos die eigene Referenz zu
messen. Aber auch dafür gibts Anwendungen wie eigene Ub zu überwachen
usw.
Vielen Dank.