Forum: Mikrocontroller und Digitale Elektronik ds18s20 mit Bascom unter Proteus


von Moppat (Gast)


Lesenswert?

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

von Ein (Gast)


Lesenswert?

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 ;-)

von Moppat (Gast)


Lesenswert?

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.

von Moppat (Gast)


Lesenswert?

Kann mir wirklich niemand helfen?

von Dominique G. (dgoersch)


Lesenswert?

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.

von Moppat (Gast)


Lesenswert?

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?

von Moppat (Gast)


Angehängte Dateien:

Lesenswert?

hups, da habe ich wohl glatt das hochladen vergessen ;-)

von Dominique G. (dgoersch)


Lesenswert?

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).

von Moppat (Gast)


Lesenswert?

Klappt leider auch nicht, macht die gleichen Fehler.

von Moppat (Gast)


Lesenswert?

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?

von Moppat (Gast)


Lesenswert?

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.

von Moppat (Gast)


Lesenswert?

Bin ich den der einziegste, wo der Ds18s20 nur teilweise unter Proteus 
funktioniert?
Wäre wirklich toll wenn Ihr mir weiter helfen könntet.

von Avr N. (avrnix) Benutzerseite


Lesenswert?


von Moppat (Gast)


Lesenswert?

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.

von Dominique G. (dgoersch)


Lesenswert?

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? ;)

von Moppat (Gast)


Lesenswert?

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.

von Dominique G. (dgoersch)


Lesenswert?

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.

von moppat (Gast)


Lesenswert?

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.

von Moppat (Gast)


Lesenswert?

Hat denn wirklich niemand ne Idee, wodran es liegen könnte?

von Moppat (Gast)


Lesenswert?

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?

von Paul Baumann (Gast)


Lesenswert?

Ich würde es mal in Natura aufbauen. Ein Simulator ist auch nur ein
Mensch, der nicht alles kann....;-)

MfG Paul

von Peter D. (peda)


Lesenswert?

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

von Kurt (Gast)


Lesenswert?

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.

von Moppat (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.