Forum: Mikrocontroller und Digitale Elektronik DS18B20 auslesen mit PIC


von Halo (Gast)


Lesenswert?

hi,
ich möchte gerne die Temperatur eines DS18B20 auslesen. Problem ist 
jedoch dass ich den nicht mal ansprechen kann ^^

Ich nutze folgende Funktion:
1
unsigned char ow_reset (void){
2
3
        unsigned char Erkennung;        //Fuer den Rueckgabewert
4
5
        DQ=0;                           //Portbit loeschen (PORTx=0)
6
        TRIS_DQ=0;                      //Der DQ-IO ist ein Ausgang
7
        Delay10TCYx(196);               //490µs warten
8
        TRIS_DQ=1;                      //Der DQ-IO ist ein Eingang (DQ=High (Pull-up))
9
        Delay10TCYx(24);                //60µs warten
10
        Erkennung=DQ;                   //Pegel einlesen
11
        Delay10TCYx(96);                //240µs warten (Ende)
12
13
        return (Erkennung);             //Erkennungsbit zurueck geben
14
}
DQ ist der ein/ausgehende Wert (PORTAbits.RA1) und TRIS_DQ ist der Pin 
(TRISA.RA0)
Ich verwende den PIC18F442 und habe die Eingänge auf Digital umgestellt:
1
ADCON1      = 0x07;              //Analogports auf Digital umschalten
Jedoch erhalte ich als Rückgabewert immer nur 1! Habe es inzwischen mit 
3 sensoren getestet und es ist immer das gleiche! Ich gehe davon aus, 
dass ich irgendwas mit den Delays falsch gemacht habe... die Hardware 
habe ich herz und nieren geprüft. 4k7 Pull-Up auf Vdd(5V). Sensor ist 
nicht verpolt oder gar gewesen! Spannung ist stabil.

Ich verwende einen 4MHz Quarz als Takt und habe PLL aktiv! also läuft 
der PIC auf HSPLL somit auf 16MHz.
Daher habe ich die Delays wie folgt berechnet:

16MHz/4 = delaytakt = 4MHz
X = anzahl der µs
Also rechne ich:
X*1000000/delaytakt =
490µs * 1000000 / 4MHz = 1960 Zyklen
dafür nutze ich dann delay10TCYx(196)

Vielleicht habe ich einen Fehler gemacht...  Auf jeden fall sitze ich 
schon tage dran und lese und lese und lese... komme einfach nicht 
weiter. Danke für eure Unterstützung!

von holger (Gast)


Lesenswert?

>DQ ist der ein/ausgehende Wert (PORTAbits.RA1) und TRIS_DQ ist der Pin
>(TRISA.RA0)

Wozu zwei Portpins?

von Andreas (Gast)


Lesenswert?


von Frank K. (fchk)


Lesenswert?

Es gibt von Maxim eine Appnote, wie man 1-Wire mit einem UART plus 
OC-Treiber (ich nehme dafür immer ganz gerne einen 74AHC1G125) 
realisiert. Damit bist Du unabhängig von der Prozessorgeschwindigkeit 
und brauchst keine kritischen Delays, weil der UART das kritische Timing 
in Hardware macht.

http://www.maxim-ic.com/app-notes/index.mvp/id/214

Vielleicht kommt Du ja damit besser klar.

fchk

von Mike (Gast)


Lesenswert?

Sooh kritisch ist das Timing des DS18B20 nun auch nicht. Da würde ich 
mal das Datenblatt nehmen und mit Simulator oder Oszi nachmessen.

von Solution (Gast)


Lesenswert?

Halo schrieb:
> ich möchte gerne die Temperatur eines DS18B20 auslesen. Problem ist
> jedoch dass ich den nicht mal ansprechen kann ^^
Dann schau dir mal den Compiler und dessen examples dort an:
http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/

von Halo (Gast)


Lesenswert?

hey,
ich danke euch für die antworten.
Und muss euch was gestehen ;)
Das Problem ist gelöst!
@Andreas:
Der thread ist von mir :D

Ich habe einen dooooofen fehler gemacht. und im Datenblatt die bemerkung 
"Bottom view" überlesen. Somit habe ich den sensor verpolt und es konnte 
nicht funktionieren! Ist nun geändert, funktioniert 1a und die sensoren 
haben es überlebt! Ich danke euch

von bitte löschen (Gast)


Lesenswert?

Das muss Dir nicht peinlich sein. Ich wollte neulich einen TL431 im 
TO92-Gehäuse verwenden und habe dafür auf 
http://www.dynamag.com/pyGEDA/software ein gEDA-Symbol gefunden. Nach 
dem Einlöten wurde das Teil heiß. Grund war genau der gleiche Fehler, 
nur umgekehrt. In meinem Datenblatt steht "top View", woraus sich nach 
der TO92-Belegung von gschem 1=REF, .. ergibt. Das Symbol hatte REF auf 
3 liegen, also umgedreht.
Das Symbol passte weder zum gschem Standard-Footprint "TO92" noch zum 
"mitgelieferten" Footprint "TO-92".
Also: Andere veröffentlichen sogar Mist aufgrund dieses Fehlers. :-D

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.