Forum: Mikrocontroller und Digitale Elektronik ds18b20 temperaturmessung mit pic18f4550


von malptech (Gast)


Lesenswert?

Hallo liebe Forenmitglieder.

Ich habe folgendes Problem: Ich möchte die Temperatur mittels eines 
ds18b20 und pic18f4550 messen. Der Programmcode funktioniert auch soweit 
(kann den auch zur Verfügung stellen, falls gewünscht), jedoch habe ich 
gemerkt, nachdem ich einen Oszi an dem 1-wire-bus angeschlossen habe, 
dass der bus nie auf 0 gezogen wird. wenn ich den ds1820
rausnehmen, sehe ich die flanken usw. aber mit dem ds1820 wird es nur
auf 5V-480mV runter gezogen. offenbar verhindert er dass die leitung
komplett auf 0 gezogen wird. warum ist das so?

angeschlossen habe ich (wie im Datenblatt steht) Gnd-> Gnd, mittleren
Pin (DQ)-> Port des PIC und den VDD-> 5V.

Bin für jede Hilfe dankbar. Lg,
malptech

von malptech (Gast)


Angehängte Dateien:

Lesenswert?

Edit:

Ich habe jetzt den VDD Pin des DS18B20 an Gnd angeschlossen (Parasitäre 
Spannungsversorgung) und nun wird er komplett auf 0 gezogen. Ich 
verstehe nicht warum er es jetzt macht.

Allerdings habe ich jetzt immer noch das Problem, dass die Ansteuerung 
bzw. Auslesen des PIC über USB nicht funktioniert. Ich denke, dass er im 
Interrupt bleibt und da nicht mehr rauskommt.

Weiß jemand bescheid oder könnte mir einen Tip geben. Danke im Voraus.

Lg,
malptech

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Hallo,

in welchem Takt läuft der Timer? Gerade so was relativ langsames, wie 
die 1Wire Funktionen, würd ich nicht im Interrupt machen. Ansonsten, 
nutze ich den DS18B20 mit einem PIC18F47J53. Bei zugriffen über 1Wire, 
schalte ich den Interrupt ab.

Gruß Sascha

von malptech (Gast)


Angehängte Dateien:

Lesenswert?

hallo Sascha.
In den Funktionen für die DS1820 wird vor Funktionsaufruf immer der 
Interrupt deaktieviert und dann später wieder aktiviert.

der PIC wird mit 48MHz getaktet. hier sind auch die Funktionen für den 
DS1820.


Könntest du vielleicht deinen Code zur Verfügung stellen, oder vlt. 
sagen was bei mir nicht richtig läuft.

Danke und Lg,
malptech

von Sascha F. (sascha_focus) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

anbei der Code, den ich nutze. Beim auslesen der Temperatur sperre ich 
die Interrupts. Bei mir läuft es über Bits, die ich in einem Timer 
Interrupt setze.

  1ms = Temp_Sens_Reset
 10ms = Temp_Sens_Start
850ms = Temp_Sens_Read

So, siehts in der main Schleife aus:

  if(Temp_Sens_Reset)
    {
    Temp_Sens_Reset=0;
    Temp_Sens_Present=OWReset();
    }
  if(Temp_Sens_Start && !Temp_Sens_Present)
    {
    Temp_Sens_Start=0;
    Convert_Temperature();
    }
  if(Temp_Sens_Read && !Temp_Sens_Present)
    {

    Temp_Sens_Read=0;
    temperatur=Read_Temp_DS18B20();
    temperatur=(temperatur*100/16);
    }

Damit erhalte ich jede Sekunde einen neuen Wert.

Gruß Sascha

von malptech (Gast)


Lesenswert?

Hallo Sascha.

Zunächst mal danke für die schnelle Antwort. Ich kriege das leider immer 
noch nicht zum Laufen.

Wie sieht genau dein main aus? Ich verstehe nicht, was 
if(Temp_Sens_Reset) bringen soll. wie definierst du Temp_Sens_Reset und 
die anderen Variablen.

lg,
malptech

von Helmut (Gast)


Lesenswert?

Wenn der 18B20 im "pharisäer" Modus ist, dann bekommt er seine 
Versorgungsspannung auch von dem Pin.

Wenn Der bis auf GND gehen würde, ist quasi seine Betriebsspannung weg.

Gibst du ihm Ub per Pin, ist er in der Lage ohne Probleme den Datenpin 
auf oder in Richtung GND bringen zu können.

Gruß Helmut

PS.:Ich habe so etwas mit Mikroe-Basic auch mit USB-HID programmiert.
Da ist es so, dass ab und zu mal eine Messung, schätze mal wegen des 
USB-Pollens, falsch läuft. Aber es gibt ja noch RS232 ;-)

von malptech (Gast)


Lesenswert?

wie ist dein pic getaktet und wie hast du den ds18b20 angeschlossen 
(parasitär oder normal über vdd und gnd)?

lg,
malptech

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Hallo,

der PIC läuft auf 12MHz, der DS18B20 ist normal angeschlossen.

"Wie sieht genau dein main aus? Ich verstehe nicht, was
if(Temp_Sens_Reset) bringen soll. wie definierst du Temp_Sens_Reset und
die anderen Variablen."

Das sind Nits, die ich definiert habe. Diese setze ich in einem Timer 
Interrupt. In der Main werden diese abgefragt, wenn gesetzt die 
jeweilige Funktion ausgeführt und zurückgesetzt. Somit läuft jede 
Sekunde eine Messung.
Beim auslesen des DS18B20 habe ich die Interrupts ausgeschaltet, damit 
nichts das auslesen stört, weil es sonst zu aussetzern gekommen ist.

Gruß Sascha

von malptech (Gast)


Lesenswert?

hallo.

ich habe das jetzt so umgeschrieben,dass jedesmal der interrupt 
ausgeführt wird, und der befehl dann zur temperatur-convertierung 
gesendet wird.
mein pic ist auf 48mhz getaktet, ich habe einfach die delays 
entsprechend angepasst. aber am ausgang des ds18b20 kriege ich immer 
noch nur eine 1, also überhaupt keine änderung, keine flanken/ 
pegeländerung oder so.
könntest du deinen main.c hochladen.

lg,
malptech

von Sascha F. (sascha_focus) Benutzerseite


Angehängte Dateien:

Lesenswert?

Anbei mal was lauffähiges...

von malptech (Gast)


Lesenswert?

Hallo.

Ich bin gerade dabei das Programm umzuschreiben für den PIC18F4550, aber 
ohne Erfolg. Ich kriege die ganze Zeit folgende Fehlermeldung und weiß 
nichts damit anzufangen:

p18f4550.h:296:Error [1109] type mismatch in redeclaration of 
'PORTAbits'
p18f4550.h:320:Error [1109] type mismatch in redeclaration of 
'PORTBbits'
p18f4550.h:349:Error [1109] type mismatch in redeclaration of 
'PORTCbits'
p18f4550.h:372:Error [1109] type mismatch in redeclaration of 
'PORTDbits'
p18f4550.h:388:Error [1109] type mismatch in redeclaration of 
'PORTEbits'
p18f4550.h:550:Error [1109] type mismatch in redeclaration of 'PIE1bits'
p18f4550.h:561:Error [1109] type mismatch in redeclaration of 'PIR1bits'
p18f4550.h:572:Error [1109] type mismatch in redeclaration of 'IPR1bits'
p18f4550.h:589:Error [1109] type mismatch in redeclaration of 'PIE2bits'
p18f4550.h:606:Error [1109] type mismatch in redeclaration of 'PIR2bits'
p18f4550.h:623:Error [1109] type mismatch in redeclaration of 'IPR2bits'
p18f4550.h:634:Error [1109] type mismatch in redeclaration of 
'EECON1bits'
p18f4550.h:1077:Error [1109] type mismatch in redeclaration of 
'OSCCONbits'
p18f4550.h:1212:Error [1109] type mismatch in redeclaration of 
'STKPTRbits'
i2c_bus.c:6:Error [1205] unknown member 'TRISC4' in '__tag_55'
i2c_bus.c:6:Error [1131] type mismatch in assignment
i2c_bus.c:7:Error [1205] unknown member 'TRISC5' in '__tag_55'
i2c_bus.c:7:Error [1131] type mismatch in assignment
i2c_bus.c:18:Warning [2052] unexpected return value


@Sascha: Wie gibst du die Temperaturwerte aus, über USB am PC oder 
Display oder ... Wofür brauchst du die dateien rtc.h und i2c_bus.h. Es 
gibt doch schon fertige Bibliotheken für den i2c

von Sascha F. (sascha_focus) Benutzerseite


Angehängte Dateien:

Lesenswert?

Nächster Test

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.