Tempsensor DS18B20 1-wire und PIC

OP #1703000
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
Gast #1703090
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
OP #1703467
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?
Gast #2106068
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
Gast #2108097
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
Gast #2108759
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren