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