Hi Leute Der DS1820 ist nicht parasitär angeschlossen, d.h. GND an Pin1, Port D.6 an Pin 2 und 5V+ an Pin 3. Hier mein COde $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 14745600 $baud = 9600 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0 Config 1wire = Portd.6 Dim Ar(2) As Byte , A As Byte , I As Byte , Temperatur As Integer Dim Halb As Byte Cls Lcd "Temp:" Do Waitms 300 1wreset 'reset the device 1wwrite &HCC 'read ROM command 1wwrite &H44 Waitms 200 'read ROM command 1wreset 'reset the device 1wwrite &HCC 'read ROM command 1wwrite &HBE 'read ROM command For I = 1 To 2 Ar(i) = 1wread() 'place into array Next Locate 2 , 1 Temperatur = Ar(1) If Ar(2) > 0 Then Temperatur = 0 Else Shift Temperatur , Right Lcd Temperatur ; "."; Halb = Ar(1) And 1 If Halb = 1 Then Lcd "5" Else Lcd "0" Lcd " C" Loop End Quelle für den COde: http://www.roboternetz.de/phpBB2/viewtopic.php?t=2401 Wieso wird mir als Temperatur immer 0.0 Grad angezeigt? Der Sensor wird und wurde übrigens nicht warm! Liebe Grüsse
Hallo, 1. Widerstand von D6 nach plus eingebaut ?? 2. die Berechnung sieht irgendwie merkwürdig aus Temp = (ar(2) << 7) + (ar(1) >> 1) ;MSB u. LSB zusammen, Bit0 entfernen if ar(1) and 7 then Temp = Temp or 0x8000 ;wenn negativ - Vorzeichen anpassen if ar(1) and 1 then Temp=Temp+0.5 ## mit dem shiften musst du mal nach Bascom umsetzten, da kenne ich mich nicht aus ! PS: wenn die Kommandos schon kommentiert sind, dann bitte richtig - und nicht alles falsch übernehmen ! Sascha
achso ... ich weiß ja nich wie das bei Bascom ist, aber ein DIM ar(2) definiert ein Feld mit 2 Elementen, und die sind dann eingenlich ar(0) und ar(1) !! Sascha
also, ich habe einen 4.7k Ohm Widerstand eingelötet und dann einen Wert von 0.5 Grad bekommen. Dann habe ich den MC den ich hatte durch ne falsce fuse-bit einstellung geschrottet, n'neuer ist bestellt. (Wie lautet in AVR-Studio schon wieder die richtige Einstellung für nen externen Quarz?) Ich werde den Code dann anpassen sobald ich den neuen MC hab. Liebe Grüsse! PS: Kann die falsche Temperatur auch an der falschen Taktfrequenz liegen? Liebe Grüsse
Barracuda schrieb: > PS: Kann die falsche Temperatur auch an der falschen Taktfrequenz > liegen? Grundsätzlich ja. Das 1-Wire Protokoll ist zeitabhängig und damit abhängig von genauen Warteschleifen für Timeslots etc.. Wenn die Taktquelle falsch angegeben ist, klappt die Kommunikation nicht. 1-Wire Tutorial http://www.maxim-ic.com/products/1-wire/flash/overview/index.cfm
Barracuda schrieb: > Dann habe ich den MC den ich hatte durch ne falsce fuse-bit einstellung > geschrottet, n'neuer ist bestellt. glaube ich kaum, dann hast du ihm wohl den Takt abgedreht - evl. mal einen Takt extern einspeisen oder SPIEN abgeschaltet - dann nur mit HighVoltage-Prog. noch anzusprechen > (Wie lautet in AVR-Studio schon wieder die richtige Einstellung für nen > externen Quarz?) für 14MHz ->ext. Crystal/Resonator high Freq. Sascha
hm sascha, leidr deinen Eintrag zu spät gesehen, neue schon bezahlt und
alte schon aufgeschnitten in der hoffnung was sehen zu können - naja,
hab auch schon für blödere sachen geld ausgegeben;p
>>für 14MHz ->ext. Crystal/Resonator high Freq.
da hab ich aber verschiedenene auswahlmöglichkeiten...
Hi Barracuda, ich hatte neulich das gleiche Problem, mit 2 verschiedenen Sensoren. Grund war bei mir letztlich das die sensoren kaputt waren (hatte ich schon mal dauerhalft benutzt). neuer Sensor hat geholfen. Vielleicht hat er tatsaechlich einen klitsch weg... bye uwe
So, konnte das Problem lösen, das Problem lag an der quarz-sache. Alles richtig eingestellt, hier oben ists nun 22.5 Grad Celsius warm:D hier nochmals der funktionierende Code für alle andern;) $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 14745600 $baud = 9600 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0 Config 1wire = Portd.6 Dim Ar(2) As Byte , A As Byte , I As Byte , Temperatur As Integer Dim Halb As Byte Cls Lcd "Temp:" Do Waitms 300 1wreset 'reset the device 1wwrite &HCC 'read ROM command 1wwrite &H44 Waitms 200 'read ROM command 1wreset 'reset the device 1wwrite &HCC 'read ROM command 1wwrite &HBE 'read ROM command For I = 1 To 2 Ar(i) = 1wread() 'place into array Next Locate 2 , 1 Temperatur = Ar(1) If Ar(2) > 0 Then Temperatur = 0 Else Shift Temperatur , Right Lcd Temperatur ; "."; Halb = Ar(1) And 1 If Halb = 1 Then Lcd "5" Else Lcd "0" Lcd " C" Loop End
hallo, danke für die DArstellung des funktionierenden Codes. Ich habe versucht mein DS mit diesem Code zu steuern. Es klappt nicht! Erst nachdem ich die Zeile $baud = 9600 gelöscht habe, hat es fiunktioniert. Woran liegt es? Was ist überhaupt die Bedeutung dieser Zeile. Kann es sie einfach löschen ohne Wirkung? Kann eine Anfängerfrage sein, bitte sei nicht böse;) , denn ich bin einer! Grüße Wimmer
Hallo, ich habe bereits an anderen Stellen hier gelesen, das es bei $baud=9600 zu div. Randerscheinungen kommen soll. Woran es liegt, habe ich bisher nicht weiter untersucht. Für Anfänger immer schön, wenn so was wie $baud=9600 alles mögliche macht, und man sich nicht kümmern muß, das die RS232 funktioniert. Wenn man tiefer einsteigt, beißt sich manchmal was, so wie in diesem Fall. Viele Grüße Herbert
Zitat aus der Bascom-Hilfe: The baud rate is selectable from the Compiler Settings. It is stored in a configuration file. The $BAUD directive overrides the setting from the Compiler Settings. Damit kann man zum Beispiel die Baudrate während der Programmausführung verändern. Das Einstellen und Errechnen der Baudrate braucht auch Zeit und deswegen vermute ich, daß die Wait_Befehle in dem Programm nicht mehr stimmen und der Temperaturfühler dann nicht richtig gelesen wird. Wenn man nichts seriell übertragen will, braucht man auch diese Kompilerdirektive ($Baud) nicht einzutragen und handelt sich dadurch keinen Ärger ein. MfG Paul
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.