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
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?
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
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!
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
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).
Hier gibt es noch eine Temperaturmessung mittels Tiny24, dessen Sensor mit dem Tiny25 identisch sein sollte: Beitrag "Re: Temperaturmessung mit ATmag88 intern ADC8 (Assembler)" ...
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
Hat Flo schon gefragt, und Du hast noch nicht geantwortet: Woran willst Du erkennen, dass Du den internen Sensor nicht korrekt initialisiert hast?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.