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
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
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
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
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
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
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 ;-)
wie ist dein pic getaktet und wie hast du den ds18b20 angeschlossen (parasitär oder normal über vdd und gnd)? lg, malptech
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.