Hi Leute, ich will mehrere ds18s20 mit einem AVR auslesen. Also Programmiersprache nehme ich Bascom und die Schaltung simuliere ich ersteinmal mit Proteus. Nun habe ich schon verschiedene Beispiel Quelltexte runtergeldaden, aber keiner funktioniert. Eine Id kann ich von dem Sensor auslesen, und diese besteht dann auch die CRC-Prüfung. Auch wenn ich mehrere Sensoren verwende kann ich alle Id's auslesen. Auch wenn ich einen Sensor direkt adressiere, scheint danach nur noch der eine sensor zu reagieren.Also erstmal scheint alles korrekt. Nur leider bekomme ich wenn ich das Scratchpad auslesen will nach dem ich &HBE gesendet habe weit mehr als 9 Byte zurück. Erst habe ich mich gewundert, warum die empfangenen Daten nie sinnvolle Werte annehmen und auch nie eine CRC-Prüfung bestehen, und danach erst mitbekommen, das ich wenn ich ohne eine weitere Sende aufforderung einfach weiter lese, viel mehr Bytes empfange als eigentlich möglich sein söllte. Wenn ich ohne vorher ein &HBE gesendet zu haben oder ohne vorher den Chip zu adressieren mit 1wread den Bus auslese empfange ich nur FF. Wie kann es sein das ich so viele und so unverständliche Daten empfange? Das Simmulationsmodell des ds18s20 unter Proteus müsste eigentlich funktionieren, da es auch in einem von Proteus mitgelieferten Sample problemlos von einem AVR augelesen werden kann. Die Software müsste eigentlich auch richtig sein, da ich da nun schon tausende Beispiel Programme probiert habe, die alle funktionieren sollen und sich alle nicht wirklich in den Kernfunktionen unterscheiden. (natürlich hab ich auch was selber geschrieben, aber um fehler auszuschliessen auch fertige Progamme ausprobiert) Sorry für den langen Text, aber ich wollt auch gleich die Situation umfassend beschreiben und nicht einfach nur irgendwas posten. Freundlichst Moppat
Hi Moppat, ohne bascom-code oder wenigstens ein hexfile und ein bischen Schalt- oder Verdrahtungsplan? Wie soll man da eine Erkenntnis machen? Da kannst du ja gleich eine Glaskugel anglotzen ;-)
Ich glaube nicht das es am Bascom code liegt, ich habe verschiedenste Programme ausprobiert und alle hatten den gleichen Erfolg. Das finden der Id hat geklappt, kommunikation auch. Also wenigstens fühlt sich der richtige ds1820 angesprochen und sendet wenn er dazu aufgefordert wird etwas. Nur halt leider nicht das was ich erwarte. im grossen und ganzen ist es immer das gleiche: 1wreset 1wwrite &HCC 1wwrite &H44 Waitus 750 1wreset ' Den gewünschten Sensor auswählen 1wverify Dsid1(1) 'die Id ist vorher ermittelt worden und 1. tatsächlich ' die die ich bei Proteus eingestellt habe und auch durch crc bestätigt 1wwrite &HBE Sc(1) = 1wread(9) If Sc(9) = Crc8(sc(1) , 8) Then T = Makeint(sc(1) , Sc(2)) T = T / 2 Print T ; " Grad Celsius" Else ' Wenn Fehler Scratchpad zur Kontrolle Hexadezimal ausgeben For I = 1 To 9 Print Hex(sc(i)) Next End If Ich hab es auch schon mit der Application Note von Bascom probiert, der AN#111. Aber auch der gleiche Fehler. Auch wenn ich den ds1820 vorher nicht adressiere (also mit 1wverify) sondern nur einen anschliesse und dann mit 1wwrite &HCC einfach alle anspreche klappt es nicht. Wenn ich keines von beiden mache krieg ich auf mein 1wwrite &HBE auch nur FF als Antwort. Also scheint auch so als fühle sich der richtige angesprochen.
Teile uns doch einmal mit, wie du den DS1820 angeschlossen hast. Vom Code her sieht das auf den ersten Blick ok aus, aber poste doch mal bitte den ganzen Code, nicht nur Fragmente.
Ich hab als Anhang einfach mal die Aplication Notr Nr.111 von Bascom hochgeladen, die habe ich auch ausprobiert (sie arbeitet ja nach dem gleichen prinzip) und hatte die gleichen teilweise richtigen (aber leider dann doch irgendwo falschen) Ergebnisse. Ich hab natürlich bei mir die LCD-Ausgabe gegen einen Print befehl ausgetauscht, weil ich es ja übr rs232 rausgeben wollte. Aber das funktioniert ja auch wunderbar. Ich glaub auch nicht das ich den Sensor falsch angeschlossen habe, da ich ja Daten empfange und die Id ja auch richtig ist. Trotzdem kann ich ja kurz beschreiben wie ich ihn angeschlossen habe. GND an Masse, Vcc natürlich an Vcc also +5V und die Datenleitung an meinen AVR. PortB.2 hab ich genommen und den auch bei 1wire config eingestellt. (der Pin wird auch durch nichts anderes verwendet) Ach ja und den Pullup hab ich vergessen. Erst hatte ich 10k(auch mal 2,2 und 4,4) nach Vcc dann hab ich in dem Sample von Proteus gesehen das es einen extra Pullup wiederstand gibt, aber der hilft auch nicht. Hab ja irgendwie gedacht das das an Proteus liegt, aber scheinbar funktioniert der ds1820 unter Proteus mit der Beispielsoftware prima. Auch habe ich keine änlichen Probleme im Netzt gefunden. Vieleicht liegt es ja genau an der kombination von Bascom und Proteus, aber warum söllte es?
Versuche zum Testen mal den Code hier: Dim Id(8) As Byte , Answer(9) As Byte Dim T As Integer Dim Temp As Single Dim Celsius As String * 5 1wreset Id(1) = 1wsearchfirst() Main: Do 1wverify Id(1) 1wwrite &H44 Waitus 800 1wverify Id(1) 1wwrite &HBE Answer(1) = 1wread(9) T = Makeint(Answer(1) , Answer(2)) Temp = T / 16 Celsius = Fusing(Temp , "#.##") Print Celsius Loop End Zuerst wird der erste Sensor auf dem Bus gesucht und dessen ID dann verwendet. Das läuft bei mir absolut Problemlos mit einem DS18b20. Du wirst den Teiler (Temp = T / 16) anpassen müssen, da der DS18b20 auf 1/16 Grad genau ist (2 müsste für dich passen).
Ich hab auch gerade gesehen, Proteus gibt unmengen Warnungen aus. [DS18S20] RAM COMMAND UNSUPPORTED Es scheint also doch an Proteus zu liegen.Warum funktioniert dann das Proteus Beispiel auch mit Ds18s20 und avr?
Komischer Weise meldet Bascom den Fehler auch nur bei ca. jeder 5.-10. Anfrage, bei allen anderen nett. Und natürlich kommt nur Murks an.
Bin ich den der einziegste, wo der Ds18s20 nur teilweise unter Proteus funktioniert? Wäre wirklich toll wenn Ihr mir weiter helfen könntet.
Danke für die Links, leider kann ich mit ihnen nicht soviel anfangen. Codeschnipsel habe ich schon genügend und hab auch schon oft genug programmiert um mir diese einfache Aufgabe selber zuzutrauen. Aber leider scheint es wohl nicht am Code zu liegen sondern an der Verbindung von Bascom und Proteus. Außer jemand kann mich hier eines besseren belehren, dafür wäre ich natürlich sehr dankbar.
Moppat wrote: > Bin ich den der einziegste, wo der Ds18s20 nur teilweise unter Proteus > funktioniert? Sorry für meine Unwissenheit, aber wer oder was ist Proteus? ;)
Kein Problem, eher müsste ich mich entschuldigen, das ich es nicht genauer umschrieben hab, aber ich habe sowieso immer schon so viel geschrieben, wollt mich möglichst kurz fassen. Proteus ist ein Tool um einerseits schaltungen zu simmulieren und andererseits dann ein Board daraus zu Layouten. Ich benutze es Vorwiegend wegen der Simulationsmöglichkeit. Meine Testschaltung existiert also bisher auch nur unter Proteus.
Ah ok, das bringt Licht ins Dunkel. Vielleicht ist das tatsächlich ein Bug in Proteus, denn "meine" Schaltung bestand funktionierend auf dem Breadboard. Bei den ersten Versuchen bekam ich nur unregelmässig eine verwertbare Antwort vom DS18b20, was am fehlenden Pull-Up Widerstand lag. Der interne Pull-Up im AVR reichte nicht aus. Ich glaub ich habs dann mit 4k7 probiert, weil ich auf die Schnelle nichts anderes zur Hand hatte und alles wurde gut.
Ja, das ist ja das komisch, der quelltext ist eigentlich richtig und trotzdem geht es nicht. Hoffentlich findet sich noch wer, der mir weiterhelfen kann.
Noch ein letzter verzweifelter Aufruf in die Community, es gibt doch bestimmt jemanden da draußen der mit dem ds18s20, bascom und proteus schon gute erfahrungen gemacht hat, wie habt ihr das denn bitte gemacht?
Ich würde es mal in Natura aufbauen. Ein Simulator ist auch nur ein Mensch, der nicht alles kann....;-) MfG Paul
Moppat wrote: > Noch ein letzter verzweifelter Aufruf in die Community, es gibt doch > bestimmt jemanden da draußen der mit dem ds18s20, bascom und proteus > schon gute erfahrungen gemacht hat, wie habt ihr das denn bitte gemacht? Ich habe keine Probleme mit DS18(B)20 gehabt in C oder Assembler. DS18S20 sollte nicht viel anders sein. Allerdings weiß ich genau 0,nix über Bascom/Proteus. Bascom ist ja hier im Forum auch etwas verbreitet, Proteus höre ich allerdings zum ersten mal. Gibts denn bei Proteus kein Forum dafür? Simulieren tue ich nur, wenn es wirklich garnicht anders geht (also schon einige Jahre nicht mehr). Ich bevorzuge einen realen AVR. Mit Bootloader ist der ja auch fix geflasht. Peter
So ist es. Mit Simulatoren habe ich eigentlich auch nur schlechte Erfahrungen gemacht. Sachen die in der Simulation perfekt funktionierten waren in der Realität nicht zum Laufen zu bringen und umgekehrt. Seitdem mache ich immer einen Testaufbau entweder auf Lochraster oder Steckboard.
Das kann ich gut verstehen. Und ich bin mir auch der nachteile solcher simulatoren bewußt. Habe aber auch andererseits recht gute Erfahrungen mit solchen Simmulatoren gemacht. Gerade mit solchen wo man die peripheri gleich mit simmulieren kann. Ausserdem ist dieses Projekt eigentlcih das eines Freundes von mir, und da er noch nicht soviel erfahrung mit den µC hat, fand ich die idee ganz gut, das erstmal zu simmulieren, damit man Gleich die ganze Schaltung und Software per E-mail austauschne kann, wenn mal was nicht geht. Auch kriegt er die Bauteile nur vom Cheff finanziert, wenn er eine funktionierende Simmulation vorweisen kann. Das interressante ist ja, das bei Proteus ein Beispiel-code mit dabei ist, der in C geschrieben wurde und der scheint zu funktionieren. Peter, kannst du mir vieleicht mal ein Hexfile von deinem C-code schicken, dann kann ich mal ausprobieren ob es wirklcih die Kombination Bascom und Proteus ist, oder ob das generell nicht so richtig funktioniert. Besten Dank noch für eure netten Antworten.
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.