www.mikrocontroller.net

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


Autor: Tobi D. (fanti)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Atlas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi D. (fanti)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Atlas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: malptech (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Sergey (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: usuru (Gast)
Datum:

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

http://www.mikrocontroller.net/articles/Temperatur...
Beitrag "Re: digitaler Thermosensor"

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: John (Gast)
Datum:

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

Autor: malptech (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?
// USBTasks()
// "Service loop for USB tasks."
void USBTasks(void)
{
    /*
     * Servicing Hardware
     */
    USBCheckBusStatus();                    // Must use polling method
    if(UCFGbits.UTEYE!=1)
        USBDriverService();                 // Interrupt or polling method
    
    #if defined(USB_USE_CDC)
      CDCTxService();
    #endif
}

// High priority interrupt vector
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh        //jump to interrupt routine
  _endasm
}

// High priority interrupt routine
// Hier Behandlung von Trigger- und Timer-Interrupt
#pragma code
#pragma interrupt InterruptHandlerHigh

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

Im moment leuchten beide LEDs.

Lg,
alptech

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.