Hallo, seit einiger Zeit beschäftige ich mich mit der Temperaturerfassung in meinem Haus und der Heizungsanlage. Relativ schnell fand ich den Lösungsansatz über den DS18S20: - Schaltung: http://lena.franken.de/hardware/temperaturmessung.html (es gibt noch eine erweiterte Schaltung in der VCC auch integriert ist) - digitemp Software auf Basis Windows Mittels einer Access-Datenbank, Visual Basic 6 und digitemp habe ich mir ein Programm gestrickt in der prinzipiell: - Digitemp aufgerufen wird und Temperaturen in ein Textfile geschrieben werden - Die Textdatei ausgelesen wird und die Temperaturen in die Datenbank geschrieben werden, mit Zeitstempel Man könnte meinen das Projekt sei beendet, jedoch möchte ich ohne digitemp auskommen. Das Ziel ist, mit Visual Basic 6 und ev. MScomm die Auslesung durch zu führen. Leider ist es mir bisher nicht gelungen trotz der Infos von Maxim den richtigen Ansatz zu finden. Seit Wochen suche ich im Internet. Bitte um Hilfe! Gruß Axel
Servus Axel, schau Dir mal die Seite an: http://www.fredhemme.de/ Temperaturmessung mit dem PC. Software kostet aber was! Gruß GG
Hallo GG, mit Fred Hemme hatte ich bereits Kontakt, an den Kosten lag es sicherlich nicht, denn er wollte nicht viel. Jedoch hat er nicht das Programm zur Auslesung der DS 18S20 geschrieben, sondern zur Auswertung der gelesenen Daten. Dies habe ich bereits in meiner Digitemp-Version via Visual Basic 6 auch geschrieben. Mein Ziel ist es die Routine zur Auslesung der DS18S20 in Visual Basic durchzuführen. Trotzdem vielen Dank für den Hinweis. Gruß Axel
Hallo ich habe zwar keine Lösung für dein Projekt , aber ich würde mich freuen wenn du mir deine Erfahrungen und Lösungen zukommen lassen könntest denn ich arbeite auch an so einer Software die mir Temperatur ausliest . beste grüsse von mir und viel Erfolg Mfg Jörn
Servus, ich habe vor einigen Jahren mal was damit in VB6 gemacht, sowohl Seriell als auch USB (Platinen habe ich noch, sind aber SMD). Als Grundlagen dienten die Routinen "TMEXLIB" von Maxim/Dallas. Such doch mal nach "TMEX". Gruß Timo
Hallo ja das wäre ja super wenn du mir das erklären könntes wie ich den Ds1820 mit VB anspreche ich bin ein absoluter Neuling . Habe grade mal nen wecker Programmiert und wollte mich nun mal daran wagen. Bitte könntest du mir das erklären im einzelnen ?Ich habe den Ds1820 so wie bei lena franken angeschlossen und es funktioniert auch mit Digitemp aber ich wollter ja was eigenes zum auslesen . Dachte mir das so : Rom id auslesen ? Temperatur auslesen und danach auf einem Label oder Textfeld anzeigen . Ganz einfach und Simpel ohne Schnick Schnack ;-) Danke im voraus . und einen schönen TAg noch Gruss Jörn
Schau Dir mal das an. Die Beschreibung in ist aus C aber recht leicht in VB portierbar 1-Wire Ansteuerung via TMEX-API Befehlsreferenz: ftp://ftp.dalsemi.com/pub/auto_id/softdev/owdocs/Docs/TMEX/tmex3vlg.html Genereller Ablauf: long integer SessionHandle // global unsigned char m_Status[5125] // global 1.StartSession short integer PortNum,PortType TMReadDefaultPort(&PortNum, &PortType) SessionHandle = TMExtendedStartSession(PortNum, PortType, Null) TMSetup (SessionHandle) 2.SelectID (String 64Bit-ID) short int ROM[9] String sText while(TMNext(SessionHandle,&m_Status) > 0) { ROM [0] = 0 TMRom(SessionHandle,&Status,&ROM) sText = ROM[7] + ROM[6] + ROM[5] + ROM[4] + ROM[3] + ROM[2] + ROM[1] + ROM [0] if(sText == 64Bit-ID) return true // ID gefunden und jetzt aktiv } return false // ID nicht gefunden 3.Gerätespezifische Kommandos [s.u.] 4.StopSession TMClose(SessionHandle) // wichtig, damit die Serielle Schnittstelle wieder freigegeben wird !!! TMEndSession (SessionHandle) Gerätespezifische Kommandos z.B.Beispiel DS2408 SetPort (Byte ToSet) unsigned char p[4] p[0] = 0x5A p [1] = ToSet p[2] = ~ToSet // invertiert p[3] = 0xFF TMAccess(SessionHandle,&m_Status) TMBlockStream(SessionHandle,p,4) // zur Kontrolle: p[3] muß jetzt den Wert 0xAA enthalten
Das Grundproblem besteht im Interface. Die verwendeten Interfaceschaltungen bestehen aus ein paar Dioden und führen nur eine Pegelanpassung durch. Das Timing muß vom PC abgewickelt werden. Dazu benötigt man den Durchgriff auf die Schnittstelle. Unter Turbo Pascal und WIN95 / WIN98 funktionierte das so: function resetcom(n:byte):boolean; { Diese Funktion initialisiert den Port N. Wenn alles ok ist, gibt die Funktion TRUE zurück, andernfalls FALSE. } var s : array [1..4] of word absolute $40:0; begin resetcom := false; SPA := 0; { } if (n>0) and (n<5) and (s[n] > 0) then begin { COM1..COM4 } spa := s[n]; { Adresse laden } port[spa+3] := $83; { Teiler adressieren } port[spa ] := 1; { 115200 bps } port[spa+1] := 0; { 115200 bps } port[spa+3] := 3; { 8 Daten, 1 Stop, No Parity } port[spa+1] := 0; { no interrupts } port[spa+4] := 1; { RTS aus, DTR ein } m:=t+10; repeat until (m<t); { Betriebsspannung muß einschwingen } port[spa+4] := 3; { RTS und DTR ein } resetcom := true end end; function touchreset:boolean; { Diese Funktion sendet ein Reset-Signal auf den aktuellen Port. Wenn ein Chip erkannt wurde, gibt die Funktion TRUE zurück, andernfalls FALSE. } var f : boolean; x,y : Byte; begin touchreset := false; m:=t+1; repeat until (t>m); m:=t+1; repeat until port[spa+5] and $60 = $60; { warten, bis Trmshiftreg und Trmholdreg leer } while odd(port[spa+5]) do x := port[spa]; { alle Empfangsregister 'leerlesen' } port[spa+3] := $83; { Teiler adressieren } port[spa+1] := 0; { 10473 bps } port[spa ] := 11; { 10473 bps } port[spa+3] := 3; { 8 Daten, 1 Stop, No Parity } port[spa ] := $F0; { Reset-Puls senden } repeat { Auf Zeichen oder timeout warten } y:= port[spa+5]; { Statusregister lesen } f:= odd(y); { f := Data ready } until f or (t>m); if f then x:= port[spa] else x:= $F0; if (x<>$F0) then begin touchreset := true; if ((y and $18)<>0) then begin { wenn break oder framing error } repeat until port[spa+5] and $60 = $60; { warten bis Trmshiftreg und Trmholdreg leer } repeat f:= odd(port[spa+5]) until f or (t>m); if f then x:= port[spa] { Empfangsregister 'leerlesen' } end end; port[spa+3] := $83; { Teiler adressieren } port[spa ] := 1; { 115200 bps } port[spa+3] := 3 { 8 Daten, 1 Stop, No Parity } end; Die heute aktuellen Betriebssysteme lassen das Anwenderprogramm nicht mehr direkt an die Schnittstellen. Damit wird es schwierig, das Timing sicherzustellen. Die Alternative besteht darin ein Interface-IC für den one-wire-bus zu benutzen, dass seriell angesprochen wird. (Gibt es bei Dallas) Diese Adapter sich jedoch zur Zeit eher selten anzutreffen. Gruß Joachim
Hallo alle zusammen, mein Beruf hat mich mal wieder komplett unter Kontrolle, laßt mir etwas Zeit. Vielen Dank für alle Infos, ich werde sie auswerten. Grüsse Axel
Hallo Mensch ist das schwierig aber gut von nichts kommt ja auch nichts. Also ich möchte das Programm ausschlieslich mit einer alten Win Version 98 nutzen . Können wir das gemeinsam zusammenstricken ? So das ich das lernen kann ? Ich habe VB 6 instaliert auf meinen alten Laptop , und da ist auch die digitemp Software drauf . So nun wollen wir mal anfangen ;-) Ich eröffne ein neues Project = Standart exe eine neue Form erscheint und ich lege mein Visuelles design fest einen Button zum einschalten einen Timer für das Timing einen MsComm zum öffnen der com 1 Schnittstelle ( die bleibt auch immer comm 1 ) und ein Label zum anzeigen der Daten wenn ich nun doppelt auf den Button klicke , würde ich erst MSComm1.CommPort = 1 ' Use Com1 as the default Com port MSComm1.Settings = "9600,N,8,1" ' 9600 baud, no parity, 8 data, ' and 1 stop bit. schreiben und nun """""Hilfe """" P.S wir arbeiten das schon aus denke ich :-) Danke für eure Hilfe Gruss Jörn
Hallo Jörn, einen Anfang hast Du nun bereits getan und auf Schwierigkeiten bist Du mental eingestimmt. Wie Du an dem oben stehenden Pascal-Code siehst, sollte man den UART zur Initialisierung des one-wire-Busses auf 10473 bps einstellen. Warum das so ist kannst Du hier nachlesen: http://www.maxim-ic.com/appnotes.cfm/an_pk/214 Dieser Applikationbericht wird Dir bei der Realisierung deines Projektes eine Hilfe sein! Gruß Joachim
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.