Hallo zusammen, Ich versuche gerade, den internen Temperatursensor des Attiny 25 zum laufen zu bringen. Soweit funktioniert auch alles - bis auf die Ergebnisse. Es "floatet leicht"... genauer genommen schwanken die Werte so zwischen 40 und 700! Grundsätzliche Infos zum Aufbau: Attiny mit LED am PB4. An PB1 hängt der TX-Pin eines MAX232. Stromversorgung läuft über einen Linearregler. Ansonsten ist an Bauteilen nur ein Vorwiderstand für die LED, ein 10k Pullup + ein Schalter für Reset, die paar Kondensatoren für den MAX und je ein Kondensator (100nF) an der Stromversorgung und zw. AREF und GND. Also sehr übersichtlich - hier liegt auch nicht das Problem. Zum Sourcecode: http://pastebin.com/kRdKHq1j Die sendRS232Byte funktioniert zuverlässig (anderweitig getestet). Nun zum eigentlichen Problem: Ein Auszug aus den übertragenen Werten, die relativ konstant und ganz grob um die 70 liegen sollten bei Zimmertemperatur, schaun folgendermaßen aus: 061 026 053 054 054 052 052 050 054 052 134 054 050 050 054 066 050 015 052 111 064 050 011 123 027 054 011 066 009 054 011 054 (Bitte beachten: ich viertle den ADC-output, damit er in 1 Byte passt) Habs auch schon mit einem anderen Tiny probiert, mit sehr ähnlichen Ergebnissen. Hat irgendjemand eine Idee oder sieht den Fehler? Schonmal Danke Gruß Florian
[offtopic] > Zum Sourcecode: > http://pastebin.com/kRdKHq1j Sourcecode (oder sonstiges Beiwerk) extern abgelegt ist oft ein Killerkriterium fürs Weiterlesen. [/offtopic]
oh, danke für den Hinweis - ich finde es so angenehmer, deswegen hatte ich es so gemacht. Aber das soll ja nicht das problem sein :) Hier also das gleiche im Anhang. Gruß
Sorry wegen Doppelpost, aber Bearbeiten ging schon nicht mehr. Hier noch der Schaltplan Gruß
Hmm, bin ratlos. Ich sehe keine offensichtlichen Haken in der Software oder dem Schaltplan.
Versuch mal was passiert wenn du die Optimierung umstellst. oder den Interrupt aktivierst wo du ein volatile flag+=1 machst nachdem du vor den Starten der Rechnung flag=0; gemacht hast. dann wartest du auf flag!=0.
Florian S. schrieb: > (Bitte beachten: ich viertle den ADC-output, damit er in 1 Byte passt) Setz doch ADLAR und nimm dann nur ADCH. Fragen: Passt der Prescaler zur Taktfrequenz(hab jetzt nicht gerechnet)? Warum setzt du das ADIF-Bit(Ist das Interruptflag, was normalerweise durch SetBit durch schreiben einer 1 gelöscht wird, jaja ist verwirrend)? Schon mal mit der 2.56V-Referenz probiert(auch mit externem Cap)? mfg mf
Hallo, danke für die Antworten. also erst zu Mini Float: das mit ADLAR könnte ich mal testen, aber sollte ja keinen direkten Unterschied machen, danke trotzdem. Prescaler is 128, Takt ist 8Mhz ohne Teiler -> 62,5Khz, laut Datenblatt solltens zwischen 50 und 200 sein, passt also. Ich setze das ADIF um es zu löschen, wie du schon festgestellt hast. Warum? Gute Frage... Gewohnheit ;) Mit der 2,56-Referenz hab ichs net probiert, weil man laut Datenblatt die 1,1er (zwingend) nehmen soll, wenn man ADC4=interner Temperatursensor messen möchte. @Michael D.: Werd mal die andere Optimierung testen. Im Moment is -Os, wie üblich. Interrupt meinst du ADC-Interrupt statt
1 | while(ADCSRA&(1<<ADSC)); |
? Gruß Florian
Mit der Temperaturmessung vom ATTiny25 hatte ich auch schon seltsame Phänomene... Bei mir hatte es nur funktioniert, wenn der ATTiny25 mit <3.5V lief. Über 3.5V hatt der Temperatursensor "die aktuelle Mondphase gezeigt" - nach ein paar Tagen "Einspielzeit" ging es dann aber auch mit 5V - komisch. Was passiert, wenn Du den µC mal mit 3V laufen lässt? Gruß Jonathan
Hallo Jonathan, danke für deine Antwort. Scheint als hättest du recht gehabt! hab ihn jetz grad mal bei 4V laufen, da is der Output konstant. Vielen Dank! Danke auch an den Rest! Sehr seltsam... Gruß Florian
Ich hab mal nen ATtiny25 und ATtiny85 bei verschiedenen VCC auf dem STK500 ausprobiert. Große Schwankungen konnte ich nicht feststellen:
1 | ATtiny25, Messung alle 5s: |
2 | 5,5V: |
3 | 292 294 294 292 294 294 294 294 292 294 292 294 |
4 | 5,0V: |
5 | 296 294 294 294 294 294 294 294 294 294 294 294 |
6 | 4,5V: |
7 | 296 296 296 296 296 296 296 296 296 296 296 296 |
8 | 4,0V: |
9 | 298 298 298 298 298 297 296 297 298 296 296 297 |
10 | 3,5V: |
11 | 300 298 298 298 298 298 298 298 298 298 298 298 |
12 | 3,0V: |
13 | 300 300 299 300 298 299 300 300 300 299 299 298 |
14 | |
15 | ATtiny85: |
16 | 5,5V: |
17 | 288 292 294 292 294 292 292 294 294 294 294 294 |
18 | 5,0V: |
19 | 294 294 294 294 294 294 294 294 294 296 294 294 |
20 | 4,5V: |
21 | 296 296 296 296 296 296 296 296 296 296 296 296 |
22 | 4,0V: |
23 | 297 296 296 296 296 296 296 296 296 296 296 296 |
24 | 3,5V: |
25 | 298 296 296 297 296 297 296 296 296 296 296 296 |
26 | 3,0V: |
27 | 298 297 297 297 297 298 297 297 297 297 296 297 |
Es fällt nur auf, daß der Wert zu kleinen VCC leicht steigt. Außerdem werden gerade Werte öfter ausgegeben. Anbei das Testprogramm. Peter
Hallo Peter, danke für die Antwort. Hab dein Programm mal mit meinem verglichen und konnt keinen großen Unterschied feststellen. Testen geht leider nicht mehr, hab das Problem inzwischen anderweitig gelöst und fest eingebaut. War nur irgendwie sehr auffällig, dass bei 5V solche krassen Schwankungen drin waren (s.o.), aber bei 4V das ganze bis auf +/-2 konstant war. Ich habe übrigens danach mal rein interessehalber weitere Tests gemacht und festgestellt, dass der ADC mit 1,1V Referenz bei mir allgemein Mist liefert wenn ich mehr als 4V Versorgungsspannung hab - ich vermute also, das Problem liegt an der Spannungsreferenz. Gruß Florian
Hm, ja, ich habe dieses Phänomen auch nur bei einem ATTiny25. Ein anderer tut das nicht. Außerdem ist es nur bei fabrikneuen AVRs aufgetreten - nach einigen Tagen Betrieb ging es dann über den ganzen Versorgungsspannungsbereich (was ein Wort!). Vielleicht hast Du ja noch einen unbenutzten ATTiny25? Gruß Jonathan
Florian S. schrieb: > Hab dein Programm mal mit meinem verglichen und konnt keinen großen > Unterschied feststellen. Ich sehe grad, Du gibst ja ein Byte direkt aus. Dann könnte es gut sein, daß Deine Baudrate bei verschiedenen VCC nicht stimmt und Du dadurch Mist liest. Mein Code gibt den Wert als Text aus. Dadurch merkt man sofort, ob die Baudrate oder der Wert nicht stimmt. Peter
Ja, aber ich habe bei mir den Wert (in °C umgerechnet) auf einer 7-Segment-Anzeige ausgegeben. Und über 3 - 4 Volt kam nur noch Müll raus. Also wird es wohl nicht an der Baudrate liegen...
Jonathan Strobl schrieb: > Ja, aber ich habe bei mir den Wert (in °C umgerechnet) auf einer > 7-Segment-Anzeige ausgegeben. Hast Du die Anzeige gemultiplext? Dann muß man sie mit der AD-Wandlung synchronisieren: Beitrag "ADC mit Multiplexanzeige" Ich würde auch erst mal den ADC-Wert anzeigen, vielleicht macht ja die Umrechnung den Fehler. Peter
Peter Dannegger schrieb: > Florian S. schrieb: >> Hab dein Programm mal mit meinem verglichen und konnt keinen großen >> Unterschied feststellen. > > Ich sehe grad, Du gibst ja ein Byte direkt aus. > Dann könnte es gut sein, daß Deine Baudrate bei verschiedenen VCC nicht > stimmt und Du dadurch Mist liest. > > Mein Code gibt den Wert als Text aus. Dadurch merkt man sofort, ob die > Baudrate oder der Wert nicht stimmt. > > > Peter Hi, nein, daran kanns nicht liegen bei mir. Hab den Code zum senden getestet (mit verschiedenen bekannten werten), das hat 100% zuverlässig funktioniert. Gruß Florian
Peter Dannegger schrieb: > Jonathan Strobl schrieb: >> Ja, aber ich habe bei mir den Wert (in °C umgerechnet) auf einer >> 7-Segment-Anzeige ausgegeben. > > Hast Du die Anzeige gemultiplext? > Dann muß man sie mit der AD-Wandlung synchronisieren: > > Beitrag "ADC mit Multiplexanzeige" > > Ich würde auch erst mal den ADC-Wert anzeigen, vielleicht macht ja die > Umrechnung den Fehler. > > > Peter Das hat schon alles gepasst, ja? ;) Die Anzeige habe ich über einen DM74LS154N (4-zu-16-Dekoder) gemultiplext. Die Anzeige war wärend jeder Messung dunkel. Und außerdem MUSS es ja am AD-Wandler oder am Temperatursensor liegen, denn nach ein paar Tagen ging es auch mit 5V. Glaubst Du mir jetzt? :P Ein anderer ATTiny25 (auch fabrikneu) zeigte das selbe Verhalten, obwohl ein anderes Programm drauf war (ohne Umwandlung in °C). Gruß Jonathan
Ich hatte letzte Woche auch das Problem mit den falschen Temperaturwerten. Die Ursache lag darin, dass über den PB0 (alias MOSI, AREF) ein Strom -in- den ATTiny geflossen ist. Dies passierte durch ein noch angeschlossene 5Volt Programmiergerät (MOSI war High) an einen 3.5Volt ATTiny. Gruss Daniel
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.