Forum: Mikrocontroller und Digitale Elektronik ATMega8 - LED-Thermometer (DS18S20)


von Sany P. (Firma: Schüler) (sanyp)


Angehängte Dateien:

Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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.

von Sany P. (Firma: Schüler) (sanyp)


Lesenswert?

@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
von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.