Archiv verlassen und diese Seite im Standarddesign anzeigen : bascom und ds1820
hallo
habe diese soft im netz gefunden. Damit soll man die temp. eines ds1820 auslesen können. Leider funkt das bei mir nicht. Auf dem display kommt nur Temp: und 0.0C. Habe auch mit einem mega8 getestet genau das selbe.
Vieleicht weiss jemand was ich falsch mache und kann mir helfen.
'*******************************************
'* Compiler : BasCom *
'* Hardware : AVR-Ctrl *
'* Temp.Sens : DS1820 *
'* Chip type : MEGA128 *
'* Clock frequency : 16,000000 MHz *
'* http://www.mikrocontroller.com *
'*******************************************
'$include "ac_lcd.inc"
$regfile = "m128def.dat"
$crystal = 16000000
Config 1wire = Portc.0 'use this pin
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
Mfg. team
Hi
Wie sieht denn deine Schaltung aus?
Kannste nen Bild machen?
Oder wirklich am besten die Schaltung posten!
MfG
Martin
$regfile = "m128def.dat"
Das Prog ist für den MEGA128 gemacht. Wenn du das auf einem anderen Controller testen willst, musst du die regfile ändern.
EDIT:
Ich denke, du musst in der "ac_lcd.inc"-Datei auch die Taktfrequenz entsprechend anpassen.
So, ich hab mir grad mal das Datenblaat runtergeladen und mir ist folgendes aufgefallen:
Waitms 300
1wreset 'reset the device
1wwrite &HCC 'read ROM command <- FALSCHER BEFEHL!
1wwrite &H44
Waitms 200 'read ROM command
1wreset 'reset the device
1wwrite &HCC 'read ROM command <- FALSCHER BEFEHL!
1wwrite &HBE 'read ROM command
Versuchs mal mit 1wwrite &H33. Ich weiß nicht, obs funktioniert, aber einen Versuch wärs wert.
hallo
danke für die antworten fehler gefunden. Es gehört ein wiederstand vom ausgang des ds1820 auf plus.
Mfg. theam
hallo
wieder einmal. Da es nun doch noch sommer geworden ist und ich im urlaub zuhause bin und natürlich viiiiel zeit habe, möchte ich mich wieder mit Atmel und Bascom beschäftigen.
Da ich es ja entlich geschaft habe mit ds1820 die temp. auf einem lcd displ. anzuzeigen währe die nächste aufgabe wie gehts mit mehreren sensoren und was mir noch wichtiger ist wie kann ich negative temperaturen anzeigen. Habe ja schon das datenblatt angeschaut aber zu einen erfolg bin ich noch nicht gekommen.
Währe schön wenn mir wer helfen könnte.
Mfg. team
Hallo,
Das steht eigentlich beides im Datenblatt........
1. Wenn du mehrere Sensoren hast hängst du sie alle an den einen Pin des µc. Dann musst du noch ins Prog schreiben:
maxsensors = 1wirecount()
Ar(1) = 1wsearchfirst()
For i = 2 to maxsensors
Ar(i) = 1wsearchnext()
Next i
2. Wenn du wissen willst, ob deine Temperatur Negativ ist, musst du erst 8 Bit lesen. Wenn diese 8 Bits alle 1 oder alle 0 sind weisst du erstmal, dass es sich bei den Bits nicht um Zahlen, sondern ums Vorzeichen handelt. Beispiel: 11111111 = neg. Temp.; 00000000 = pos. Temp.
Ich hoffe das hilft dir!
Martin
Marko1704
19.11.2004, 10:37
Hi Erstmal,
ich hab das mit der Temperaturmessung mit DS1820 hinbekommen, wie normal angegeben 0,5°C Genauigkeit.
Nun hab ich im Netz verschiedentlich gelesen, das der auch 0,1°C kann!
Nur wie das steht natürlich nie dabei. Hat da jemand evtl. nen tip für mich?
http://www.mcselec.com/an06.htm
Hallo zusammen!
Auch ich habe den Mega8 mit dem DS18S20 zum Laufen gebracht. Jetzt möchte die Temperaturanzeige nur "so nebenbei" haben.
Wichtiger sind andere Programmfunktionen, die schnell abgearbeitet werden sollen. Wenn ich den DS18S20 per Interrupt auf einen Timer lege, hält das Hauptprogramm ja solange an, wie die Interruptroutine (also das Auslesen des Sensors) läuft. Und das sind ja schon aufgrund der beiden Wartezeiten insgesamt 500mS!
Baue ich die Sensorabfrage in das Hauptprogramm ein, warte ich ja auch mind. 500ms. Wie kann ich den DS18S20 "unabhängiger" auslesen, sodaß mein Hauptprogramm nicht gestört wird? (Da war doch mal was mit Freilauftimern, oder???)
Übrigens reicht es völlig, wenn die Temperaturanzeige alle 1-2 Sekunden aktualisiert wird.
Hat jemand eine Idee für BASCOM?
Vielen Dank!
Nachttrag:
Gruß Stefan! ;-)
Hi Stefan,
bin zwar auch Anfänger in Bascom un Co., aber Multitasking am Mega8
währ ne tolle Sache, wenn ich's mir auch nicht so recht vorstellen kann.
Was natürlich nicht heiß, das ein Crack auch das hinbekommt.
Aber warum nimmste nicht einfach nen zweiten Mega und lässt den
dann das Messergebnis per UART rüber schieben? Haste auch gleich
nen Interrupt bei ;o)
mfg
Marko
Hi Marko!
Ganz so aufwendig wollt eich's dann auch nicht treiben. ;-) Ich hab' jetzt mal probiert statt der 200ms einfach meinen übrigen code "reinzuschieben". Das geht sogar ganz gut. Aber je nach codelänge vertut sich der Sensor immer um ein paar Grad!?! Momentan wären es nämlich 37°C Raumtermperatur bei mir. ;-D Ist der Code länger, klappt's komischer Weise...
Allerdings wird mein Hauptprogramm immer wieder durch einen externen Interrupt unterbrochen. (Es wird aber nur ein Befehl "incr zähler" ausgeführt. Dann "return") Und wenn diese Interrupts nun sehr schnell sind, "steigt" meine Temperatur?? Wie geht das? "Return" heißt doch, gehe zurück, wo Du aufgehört hast.
...
on int0 Int0_Interrupt
...
Do
1wreset 'reset the device
1wwrite &HCC 'read ROM command
1wwrite &H44
'weiterer code etc
'...
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 ; ".";
'restlicher code
loop
'#############
Int0_Interrupt:
incr zähler
return
End
Gruß Stefan
Alf_Wuffi
15.12.2004, 02:36
Hallo,
erhöhe mal die Stackwerte. Dann stimmts wahrscheinlich. Die Interrupts fressen mindestens 32 Bytes
Wolfgang
Hallo Wolfgang! :-)
Sorry für die blöde Frage, aber wie (?) erhöht man Stackwerte?
Gruß Stefan
Alf_Wuffi
15.12.2004, 12:56
in Bascom unter Options -Compiler-Chip findest Du unten die drei Werte. Die sind von Haus aus viel zu klein gestellt. Jetzt spielt es noch eine Rolle, welchen Chip Du benutzt -SRAM Größe - . Wenn Du nicht mindestens einen Mega 8 benutzt, kann es verdammt eng werden.
Wolfgang
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.