Hallo Leute, ich verzweifel hier grad ein wenig an einem Projekt, für welches ich noch genau 1 Woche habe. Ich muss ein Thermometer bauen der die Außentemperatur misst und mithilfe eines ATmega8 die Temperatur in LEDs ausgibt. Die Skala sieht dabei wie folgt aus: (<15°C = blaue LED , zwischen 15°-25°C gelbe LED und alles über 25.0°C = rote LED).Ich habe die Schaltung nach dem Schaltbild zusammengesteckt (Nur den rechten Teil vom Schaltbild also die rechte Seite des ATmega8 betrachten). Die Main Datei hab ich selber geschrieben da ich aber keine Ahnung habe wie man so einen Temperatursensor bedient habe ich im Internet herumgesucht und die DS18S20 Dateien bei magicpocket.net gefunden, es ist also sehr wahrscheinlich dass die Schaltung deswegen nicht funktioniert weil die DS18S20 Dateien falsch/nicht benutzbar sind. Kurz zum Problem: Sobald ich nun eine Spannungsquelle anschließe leuchtet egal welche Temperatur es herrscht nur die LED die an PC0 angeschlossen ist und keine andere es scheint also so zu sein als dass der Temperatursensor garnicht angesteuert ist. Die meisten Kombinationen von Mikrocontrollern und Temperatursensoren die ich so gefunden habe verbinden die Ausgabe mit LCDs und nicht mit LEDs deshalb wollte ich euch fragen wie ich dieses Projekt realisieren kann bzw. wo die Fehler liegen in der Main Datei oder in der Temperatursensordatei. Ich habe noch folgende Seite im Internet gefunden: http://physudo.blogspot.de/2013/05/temperaturmessung-mit-dem-ds18s20-uber.html lässt sich hiermit der Temperatursensor richtig bedienen und falls ja wie Implementier ich dass am besten in meine Main Datei?
:
Bearbeitet durch User
Sany P. schrieb: > Kurz zum Problem: Dein Hauptproblem ist, dass du gedacht hast das würde alles einfach so aus dem Stand heraus funktionieren und deshalb bräuchtest du keine Debug Möglichkeit, wie eben ein LCD oder eine UART oder sonst irgendwas, wo du dir Werte ausgeben lassen kannst. Jetzt geht nichts und deshalb bist du angeschmiert, weil du noch nicht mal vernünftig debuggen kannst sondern auf raten angewiesen bist. > Die meisten Ansteuerung von Mikrocontrollern und Temperatursensoren > verbinden dass ganze mit LCDs rate mal warum Vielleicht hast du ja Glück und das ganze hängt an schlechten Timings. Wenn ich so einen Mist schon sehe
1 | #define fcpu_delay_us(num) delay_int(num/(LOOP_CYCLES*(1/(F_CPU/1000000.0))))
|
2 | |
3 | ...
|
und eine eigene delay Funktion, dann schwant mir nichts gutes. Der AVR-gcc hat eigene delay Funktionen mitbekommen (in delay.h) die recht gut funktionieren. Tausch diesen ganzen delay Müll da mal aus.
1 | void therm_write_bit(uint8_t bit) |
2 | {
|
3 | //Pull line low for 1uS
|
4 | THERM_LOW(); |
5 | THERM_OUTPUT_MODE(); |
6 | |
7 | // **********************************
|
8 | // fcpu_delay_us(1);//1
|
9 | _delay_us(1); |
10 | |
11 | //If we want to write 1, release the line (if not will keep low)
|
12 | if(bit) THERM_INPUT_MODE(); |
13 | |
14 | // ***********************************
|
15 | //Wait for 60uS and release the line
|
16 | // fcpu_delay_us(50);//60
|
17 | _delay_us(60); |
18 | |
19 | THERM_INPUT_MODE(); |
20 | }
|
21 | |
22 | usw. usw. |
vielleicht hast du ja Glück und das war bereits alles. Wenn nicht. In der Codesammlung gibt es von einigen Leuten DS1820 Routinen. Wenn du was vom Peter Danegger findest, die Routinen sind normalerweise ausgereift.
Sany P. schrieb: > Sobald ich nun eine Spannungsquelle anschließe leuchtet egal welche > Temperatur es herrscht nur die LED die an PC0 angeschlossen ist und > keine andere es scheint also so zu sein als dass der Temperatursensor > garnicht angesteuert ist. Wenn man ein Programm irgendwoher kopiert, das den Temperatursensor an PB0 erwartet, ist es blöd, den Temperatursensor an PB1 anzuschliessen.
@MaWin: hab versucht den Temperatursensor an PB0 anzuschließen es ging leider auch nicht bzw auch im Programm einfach mal umgeschrieben leider keine Wirkung @Karl Heinz: hab auch alle delay funktionen rausgelöscht aber denke eher ich such mal wie von dir vorgeschlagen ein paar Lösungen von P.Danegger und schreib die Temperaturansteuerung nochmal komplett neu. Ja ein LCD wäre nicht schlecht gewesen aber leider hat unser Betreuer uns da nicht genauer draufhingewiesen nur dass wir nen ATmega8, Steckbrett, paar Widerstände/LEDs und nen Temperatursensor brauchen um nen Thermometer zu bauen. P.S: lässt sich so der Sensor ansteuern und in mein Programm implementieren? http://physudo.blogspot.de/2013/05/temperaturmessung-mit-dem-ds18s20-uber.html http://physudo.bplaced.net/Thermometer.c
:
Bearbeitet durch User
Sany P. schrieb: > @Karl Heinz: hab auch alle delay funktionen rausgelöscht von rauslöschen hab ich nichts gesagt. Sondern von: eine windige Lösung durch eine bewährte und getestete Lösung zu ersetzen.
Karl H. schrieb: > Sany P. schrieb: > >> @Karl Heinz: hab auch alle delay funktionen rausgelöscht > > von rauslöschen hab ich nichts gesagt. > Sondern von: eine windige Lösung durch eine bewährte und getestete > Lösung zu ersetzen. Und überprüf noch mal die vorgegebenen Zeiten mit dem Datenblatt des DS1820. Die in deinem Originalcode auftauchenden Zahlenwerte sind nicht vertrauenerweckend. Da wurde offenbar nach eine in den delay Routinen enthaltene Zeitdifferenz dadurch ausgeglichen, dass der die zu wartende Zeit angebende Zahlenwert zu tief angesetzt wurde. Wenn bei einer angestrebten Wartezeit von 60 Millisekunden im Code ein Aufruf mit
1 | mein_super_duper_delay( 50 ); // warte 60 Millisekunden |
steht, dann stimmt da etwas grundsätzlich nicht. PS: Ich hab da einen Fehler gemacht. DIe Wartezeiten sind Millisekunden und nicht Mikrosekunden. Der entsrpechende delay heisst
1 | _delay_ms( 60 ); // warte 60 Millisekunden |
und nicht _delay_us
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.