Forum: Mikrocontroller und Digitale Elektronik Tempsensor DS18B20 1-wire und PIC


von Tobi D. (fanti)


Lesenswert?

Hiho zusammen,

ich würde gerne meine Anfänger PIC Kenntnisse weiter ausbauen, habe mir 
deshalb 2 Temperatursensoren besorgt und würde diese gerne am PIC 
auslesen.
Allerdings komme ich mit dem 1-wire Protokoll nicht zurecht.
In den tiefen des Internet habe ich auch einige Projekte und Codefetzen 
gefunden, doch meistens als C-Code oder nich vollständig.
Auch in der Suche hier gibts einige Beiträge zum thema DS1820 aber bis 
jetzt habe ich noch keinen zum laufen gebracht und wäre für jede hilfe 
dankbar.
Ich habe mich für die Assemblerprogrammierung entschieden was aber im 
nachhinein wohl ein Fehler war, da die meisten Programme heute eher in C 
geschrieben werden.
Ich arbeite mit dem PIC16f84 bzw pic18f88, wobei die Codes ja mit 
kleinen Anpassungen kompatibel zu anderen PICs sind.
Meine Frage an euch, hat jemand zufällig irgendwo ein lauffähigen 
Assemblercode für einen DS18B20 oder DS18S20 ( bzw den Baugleichen 
DS1820) übrig, der nur die Temperatur ausliest und lediglich das 
ergebnis in einem 8 Bit Register speichert? die meisten codes sind so 
umfangreich dass man den überblick über das eigentliche Protokoll 
verliert.
wäre echt super

gruß fanti

von Olaf (Gast)


Lesenswert?

> ich würde gerne meine Anfänger PIC Kenntnisse weiter ausbauen,

Wenn DU deine Kenntnisse ausbauen willst, warum liesst du dann
nicht mal das Datenblatt und programmierst das selber. Dabei
lernt man naemlich. Abschreiben bringt einen nicht weiter.

> Ich habe mich für die Assemblerprogrammierung entschieden was
> aber im nachhinein wohl ein Fehler war,

Das ist natuerlich zum Teil Geschmacksache, aber IMHO kann man PICs
hoechstens in C ertragen. :-)

> die meisten codes sind so umfangreich dass man den überblick
> über das eigentliche Protokoll verliert.

Noe, die Dinger sind relativ anspruchsvoll. Wenn du wissenmaessig noch 
bei Null anfaengst dann nimm lieber einen LM75 oder einen andere I2C-Bus 
Sensor. Das ist fuer die ersten Versuche weniger frustrierend.

Olaf

von Atlas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

als Anlage hab ich eine einfache 1-wire Ansteuerung für einen
Temperatursensor DS1822 mit einem PIC 18F in Assembler beigefügt.
Die Anpassung auf Deine Hardware und den DS18B20 sollte damit
auch für Anfänger möglich sein.
Wichtig ist immer das Datenblatt ausführlich durchzulesen.

von Tobi D. (fanti)


Lesenswert?

@olaf
danke für deine Antwort, doch es hat mich nicht schlauer gemacht.
Seit wann muss man denn das Rad neu erfinden um zu verstehen wie es sich 
dreht?
Desweiteren interpretiere ich, ich soll umsteigen auf avr, C lernen und 
bei Problemen selbst ne Lösung finden^^

@atlas
das ist nett von dir, ging ja fix
Da das Programm sehr zeitkritisch ist, mit welcher Frequenz läuft der 
PIC?

von Atlas (Gast)


Lesenswert?

@ Da das Programm sehr zeitkritisch ist, mit welcher Frequenz läuft der
PIC?

Es ist ein 4 MHz Quarz angeschlossen, folglich ist die Taktfrequenz
für einen Befehlszyklus 1 MHz (1 us).

von malptech (Gast)


Lesenswert?

hallo.

ich wollte die frage noch mal aufgreifen, da ich das gleiche problem 
habe. ich wollte die temparatur-sensoren über einen pic18f4550 
ansprechen, doch bei meinem zusammengeschnittenen code hängt sich mein 
µC auf, was wahrscheinlich an den delays liegt.

hat jemand einige fertige funktionen, um die temperaturmessung in gang 
zu setzen und diese dann abzurufen.

danke im voraus.

lg,
malptech

von Lehrmann M. (ubimbo)


Lesenswert?

Olaf schrieb:
>> Ich habe mich für die Assemblerprogrammierung entschieden was
>> aber im nachhinein wohl ein Fehler war,
>
> Das ist natuerlich zum Teil Geschmacksache, aber IMHO kann man PICs
> hoechstens in C ertragen. :-)

Diese Diskussion entzieht sich mal wieder jeder Grundlage... ich sag 
sowas von AVR ...

von Sergey (Gast)


Lesenswert?

Probier mal MikroC, da gibts eine fertige 1-wire Library, wenn du C 
magst:
http://www.mikroe.com/forum/viewtopic.php?f=147&t=23735

Da du am Anfang vermutlich noch nicht viel Funktionen einbauen wirst, 
sollten dir die 2K Demolimit eigentlich reichen. MikroC ist gut für 
einfache Steuerungsaufgaben.

von usuru (Gast)


Lesenswert?

die DS18... Sensoren haben mich auch schon zur Verzweiflung gebracht, 
seitdem nehme ich nur noch TSIC

http://www.mikrocontroller.net/articles/Temperatursensor#TSic
Beitrag "Re: digitaler Thermosensor"

von John (Gast)


Lesenswert?

Tobi D. schrieb:
> Seit wann muss man denn das Rad neu erfinden um zu verstehen wie es
> sich dreht?

Hallo Tobi (fanti),
Du musst nicht das Rad neu erfinden, aber erst wenn Du es geschafft hast 
eins zu bauen das sich tatsächlich dreht, dann weist Du dass Du es 
verstanden hast.

In der Appnote APP2420 von Maxim gibt es eine Beschreibung von 1-Wire 
und Assemblercode für PIC16F628.
http://www.maxim-ic.com/app-notes/index.mvp/id/2420

Gruß
John

von John (Gast)


Lesenswert?

Sorry, habe erst jetzt gesehen, dass die erste Frage schon fast ein Jahr 
alt ist.

von malptech (Gast)


Lesenswert?

hallo.

jo danke für die schnellen antworten. ich habe jetzt die funktion zum 
abrufen der temperatur geschrieben. funktioniert alles auch so weit, 
auch das kompilieren. woher weiß ich jetzt, was er da misst. ich kriege 
keine Verbindung vom µC zum PC hin. über USB läuft es nicht. hatte 
vorher ein lauflicht erstellt und da hat er die verbindung zum pc 
gehabt. kann das an den delays liegen, dass er keine interrupt ausführt 
und usb-verbindung nicht aufrecht halten kann?
1
// USBTasks()
2
// "Service loop for USB tasks."
3
void USBTasks(void)
4
{
5
    /*
6
     * Servicing Hardware
7
     */
8
    USBCheckBusStatus();                    // Must use polling method
9
    if(UCFGbits.UTEYE!=1)
10
        USBDriverService();                 // Interrupt or polling method
11
    
12
    #if defined(USB_USE_CDC)
13
      CDCTxService();
14
    #endif
15
}
16
17
// High priority interrupt vector
18
#pragma code InterruptVectorHigh = 0x08
19
void InterruptVectorHigh (void)
20
{
21
  _asm
22
    goto InterruptHandlerHigh        //jump to interrupt routine
23
  _endasm
24
}
25
26
// High priority interrupt routine
27
// Hier Behandlung von Trigger- und Timer-Interrupt
28
#pragma code
29
#pragma interrupt InterruptHandlerHigh

1
// LED-Blinken zur USB-Statusanzeige
2
// beide an: "Attached"
3
// Nur RC0 an: "Powered"
4
// Nur RC1 an: "Default"
5
// Nur RC0 blinkt: "Address"
6
// Nur RC1 blinkt: "Detached"
7
// Abwechselndes Blinken: "Configured" (funktionsfähiger Zustand)

Im moment leuchten beide LEDs.

Lg,
alptech

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.