www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ds18b20 temperaturmessung mit pic18f4550


Autor: malptech (Gast)
Datum:

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

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

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

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

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

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

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

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:
Angehängte Dateien:

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

Autor: malptech (Gast)
Datum:

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

Autor: Helmut (Gast)
Datum:

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

Autor: malptech (Gast)
Datum:

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

lg,
malptech

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

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

Autor: malptech (Gast)
Datum:

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

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei mal was lauffähiges...

Autor: malptech (Gast)
Datum:

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

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nächster Test

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.