Forum: Compiler & IDEs DS18B20 + LCD + ATmega will nicht funktionieren


von Tobias P. (Gast)


Lesenswert?

µC: ATmega8 (8 MHz)
Compiler: aktuelle Version von WinAVR
Programmer: AVR-ISP (von Atmel)
Erfahrung: Anfänger

Problem:
Will einen dig. Temperatursensor an einen ATmega8 anschließen und den
Temperaturwert auf einem 2x16 char LCD anzeigen.
Das eigendliche Problem ist, dass es zwar mehrere Codesammlungen gibt,
aber keine davon wirklich funktionieren will.

z.B.
http://mc-project.de/Pages/AVR/Programme/Programme.html
http://www.mikrocontroller.net/attachment.php/84831/1wire.zip

Ich bin schon am verzweifeln. Vielleicht gibt es ja hier jemanden, der
schon mal in der gleichen Lage war und mir hoffendlich weiterhelfen
kann.

von Elektrikser (Gast)


Lesenswert?

Was genau funktioniert nicht? Die Ansteuerung der DS18x20? Oder das
Display? Schreib mal genauer, wo es dich drückt...

Gruß Elektrikser

von Jens D. (jens) Benutzerseite


Lesenswert?

schau mal hier
http://www.siwawi.arubi.uni-kl.de/avr_projects/tempsensor/index.html
damit hatte ich sie ausgelesen bekommen udn auf einem LCD angezeigt

Gruss

von Tobias P. (Gast)


Lesenswert?

Das LCD funktioniert perfekt.
Nur die Ansteuerung des DS18B20 will nicht funktionieren.

von Elektrikser (Gast)


Lesenswert?

Dann schau dir den Link von Jens an. Diese Ansteuerung funktioniert sehr
gut.

von Tobias P. (Gast)


Angehängte Dateien:

Lesenswert?

So hab jetzt mit einem anderen Beispielprogramm versucht und
entsprechend abgeändert.
Allerdings bekomme ich bei 24°C Raumtemperatur (mit Thermometer
gemessen) mit dem DS18B20 142°C angezeigt.

Als Anhang hab ich mal die Dateien angehängt, mit denen ich zur Zeit
arbeite.

von Tobias P. (Gast)


Angehängte Dateien:

Lesenswert?

Das ist meine main.c

von Tobias P. (Gast)


Angehängte Dateien:

Lesenswert?

Und hier noch die Ds18s20.h

von Tobias P. (Gast)


Lesenswert?

So hab nun den Fehler selbst gefunden.
Im Scatchpad wurde nur das erste Byte gelesen.

In DS18B20.c muss folgendes geändert werden:
unsigned char read_scratchpad (void) {
        --cut--
  //for (i=0; i<9; i++)
  scratchpad [0] = read_byte ();
  scratchpad [1] = read_byte ();
  reset (); //terminate transfer (read 2bytes)
        --cut--

Und in Temp_LCD.c folgendes:
                --cut--
                for (;;)
    {
    read_scratchpad ();
    temperature = (scratchpad [1] << 8) + scratchpad [0];
    temperature *= 0.0625; //für 12bit
    itoa (temperature, buffer_temp, 10);
    lcd_gotoxy (5,0);
    lcd_puts (buffer);
    lcd_puts (" C");
    }
                --cut--

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.