Tempsensor DS18B20 1-wire und PIC

OP #1703000
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
> 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
Gast #1703207
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.
Angehängte Dateien:
OP #1703467
@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 #1703489
@ 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).
Gast #2106068
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.