mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit "MatchRom" bei DS18B20


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: André M. (killroymenzel)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe ein Problem den Sensor (DS18B20) direkt zu adressieren.
Mit einem Sensor und "SkipRom" funktioniert es einwandfrei, allerdings 
wollte ich jetzt mehrere Sensoren anschließen, so dass ich nicht drum 
rum komme die Sensoren direkt zu adressieren.
Erst habe ich den Sensor per "ReadRom" ausgelesen (über UART angezeigt) 
und die Adresse dann als Text im ProgrammFlash abgelegt.
Dann habe ich versucht die 8 Bytes nach gesetztem "MatchRom" zu senden 
und den Sensor auszulesen.
Als Ergebnis bekomme ich jetzt "-00,0°C" angezeigt.
Die Berechnungsroutinen kann ich ausschließen, da es mit "SkipRom" 
funktioniert.

Beim nächsten Versuch habe ich beim Auslesen des Sensors diese 8 Bytes 
direkt im Speicher abgelegt und die MatchRom-routine greift direkt auf 
den Speicherinhalt zu.
Dieses funktioniert allerdings genauso wenig. Auch "00,0°C"

Im Anhang sind meine DS18B20 unterroutinen.


Vielleicht hat ja jemand eine "zündende Idee" und kann mir dabei helfen.

Danke im Vorraus


André

PS: So wie ich mich kenne, ist das mal wieder ein kleiner Fehler 
zwischen meinen Ohren ;-)

Autor: André M. (killroymenzel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat niemand eine Idee?

Ich weiss schon nicht mehr, wo ich suchen soll.......



André

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
André Menzel schrieb:
> und die Adresse dann als Text im ProgrammFlash abgelegt.

Ich sehe nirgends ein LPM.
Und warum als Text, das 1-wire Protokol versteht keinen Text, nur binär.

Autor: chris (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hatte damals auch so meine Probleme mit der direkten Adresse, das 
Auslesen und Abspeichern hat funktioniert nur leider habe ich Trottel 
damals 1tens von hinten angefangen die Bytes zu senden, also mit dem CRC 
begonnen und dann auch anstatt 8, 9Bytes übertragen, kam nie was an, wie 
auch.

Eine Zeitlang ruhen gelassen und nochmal das Datenblatt studiert, Fehler 
behoben und seit dem läuft das Ding ohne Probleme.

André Menzel schrieb:
> Als Ergebnis bekomme ich jetzt "-00,0°C" angezeigt.
> Die Berechnungsroutinen kann ich ausschließen, da es mit "SkipRom"
> funktioniert.

Hast du denn auch eine Messung angestoßen?

guck sonst einfach mal in die Angehängte ZIP rein
ist zwar für ein      DS18 S 20
bis auf die Tempberechnung ist ja die Kom gleich.

Wenn du dein Fehler gefunden hast lass mal was hören.

Autor: André M. (killroymenzel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Ich sehe nirgends ein LPM.
> Und warum als Text, das 1-wire Protokol versteht keinen Text, nur binär.

Natürlich als binär bzw Hex dargestellt. Ich meinte nur dass es im Flash 
mit abgelegt ist. (Also ohne RomRead und wegspeichern)
Das lag im Hauptprogramm.

chris schrieb:
> guck sonst einfach mal in die Angehängte ZIP rein
> ist zwar für ein      DS18 S 20
> bis auf die Tempberechnung ist ja die Kom gleich.

Werde ich mir anschauen......

chris schrieb:
> Wenn du dein Fehler gefunden hast lass mal was hören.

Ja, letzte Nacht habe ich es hinbekommen - zwar anders als ich wollte 
aber:

SelectRom:    rcall    One_Wire_Reset      ;OneWire Reset
        ldi      accu,0x55        ;Match_Rom einleiten
        rcall    One_Wire_Write      ;senden
        ldi      accu,0x28
        rcall    One_Wire_Write
        ldi      accu,0xC7
        rcall    One_Wire_Write
        ldi      accu,0x51
        rcall    One_Wire_Write
        ldi      accu,0xCB
        rcall    One_Wire_Write
        ldi      accu,0x04
        rcall    One_Wire_Write
        clr      accu
        rcall    One_Wire_Write
        clr      accu
        rcall    One_Wire_Write
        ldi      accu,0x6F
        rcall    One_Wire_Write
      ret

So hat es geklappt. Warum das mit einem z-pointer, oder mit ausgelesenem 
Rom im SRAM nicht geklappt hat, weiss ich noch nicht und arbeite noch 
daran.
Jetzt weiss ich wenigstens dass der ausgelesene RomCode stimmt.

Wenn ich es geschafft habe, lass ich von mir hören....heute Abend oder 
so....


André

Autor: André M. (killroymenzel)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
chris schrieb:
> guck sonst einfach mal in die Angehängte ZIP rein

Was deine Zeischleifen angeht, hätte ich ein Verbesserungsvorschlag:

/************************************************
        Delay timer            
                        
*  Aufruf   =  timer,@0            *
*  @0  =  direkter Wert in µs            *
  minimaler delay von 2  µsekunden      
  maximaler delay von 65 millisekunden    
*  !Berechnungen der verschiedenen        *
*  XTALS nicht getestet (derz.4MHz)!      *
************************************************/
.macro  timer
    ldi    yh,high(((XTAL/4000000)*@1)-1)  ;berechnung von
    ldi    yl,low(((XTAL/4000000)*@1)-1)  ;verschiedenen XTALS
t1:    sbiw  yl,1
    brne  t1
    nop
    nop
    nop
.endmacro



Im Anhang meine Routine für Reset, Byte schreiben und Byte lesen.


André

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
André Menzel schrieb:
> Hallo,
> Ich habe ein Problem den Sensor (DS18B20) direkt zu adressieren.

doofe Frage, warum tut man das?

ich lese immer alle DS aus und ordne dann die gefundenen nach 
SerialNummer meiner Temperatur Webseite der Zimmer zu.

Ich finde es interessant das man Einzelne adressieren kann, aber wozu?

Mit search all kann ich auch mal eben einen neuen Sensor anhängen dessen 
Nummer ich noch nicht kenne und den in meine Seite einpflegen.

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> Ich finde es interessant das man Einzelne adressieren kann, aber wozu?

Warum nicht ? Der Hersteller wird sich schon was dabei gedacht haben 
diese Möglichkeit bereit zustellen, leider steht das in den DB's nicht 
drin.
Aber vermutlich hängt es von der Sensoranzahl ab...

André Menzel schrieb:
> Was deine Zeischleifen angeht, hätte ich ein Verbesserungsvorschlag:

ja ein wenig altbacken ich weiß ;-)

Autor: André M. (killroymenzel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> doofe Frage, warum tut man das?
>
> ich lese immer alle DS aus und ordne dann die gefundenen nach
> SerialNummer meiner Temperatur Webseite der Zimmer zu.

aber woher weisst du welcher Sensor in welchem Zimmer hängt?

Das heisst dass du bei "jedem" Temperaturmessen ein SearchRom ausführst 
und dann trotzdem die Seriennummern zuordnen musst?

Wenn ich das richtig verstehe ist auf deiner Webseite jede Seriennummer 
einem Zimmer zugeordnet. Aber dass musstest du doch auch irgendwie 
rausfinden - oder hasst du ein Sensor "heiß" gemacht, dass du ihn 
identifizieren konntest?


André

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man muss eine Zuordnung von Adresse zu Funktion in die 
Gerätekonfiguration einpflegen, ins EEPROM oder was man dafür zur 
Verfügung hat. Im einfachsten Fall hängt man die Sensoren einzeln 
nacheinander ran und ordnet der neu gefunden S/N ihre Funktion zu. Genau 
und nur dann benötigt man SearchROM. Für die Messung reicht MatchROM.

: Bearbeitet durch User
Autor: Joachim B. (jar)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
André Menzel schrieb:
> aber woher weisst du welcher Sensor in welchem Zimmer hängt?

wer hängt denn die Sensoren in meine Zimmer auf, doch ich meist, bis 
jetzt immer.

André Menzel schrieb:
> Das heisst dass du bei "jedem" Temperaturmessen ein SearchRom ausführst
> und dann trotzdem die Seriennummern zuordnen musst?

ich weiss doch in welchem Zimmer welcher Sensor hängt, meldet sich 
28xxyyzzuuvv ist es das kleine Zimmer

André Menzel schrieb:
> Wenn ich das richtig verstehe ist auf deiner Webseite jede Seriennummer
> einem Zimmer zugeordnet. Aber dass musstest du doch auch irgendwie
> rausfinden - oder hasst du ein Sensor "heiß" gemacht, dass du ihn
> identifizieren konntest?

wenn nur einer dran hängt habe ich seine Nummer, die übernehme ich für 
meine Webseite und Zimmer und ja in der Anfangsphase habe ich auch mal 
mit Kältespray gespielt obwohl das unnötig ist.

Autor: André M. (killroymenzel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt verstehe ich wie du das meinst...

Ich hatte vor ganz ohne SearchRom auszukommen. Erst lese ich mit RomRead 
den RomCode aus und dann wollte ich diesen über die serielle 
Schnittstelle mit meinem PC "einpflegen".
Dann ist immer definiert welchen Sensor ich wo anhänge.


Abgesehen davon...:
Ganz schön kalt in deiner Wohnung. Ich würde im Zählerschreank leben. 
;-)

André

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
André Menzel schrieb:
> Abgesehen davon...:
> Ganz schön kalt in deiner Wohnung. Ich würde im Zählerschreank leben.
> ;-)

ich bin Energiesparer, wenn ich nicht daheim bin darf die Heizung 
runterfahren sie kommt kurz vor meiner Heimkehr wieder hoch, deswegen 
überwache ich ja die Temperaturen per Webseite, vielleicht schaffe ich 
es noch mal ein Webinterface für die Thermostaten zu bauen. :-)

: Bearbeitet durch User
Autor: Karl H. (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
André Menzel schrieb:
> Peter Dannegger schrieb:
>> Ich sehe nirgends ein LPM.
>> Und warum als Text, das 1-wire Protokol versteht keinen Text, nur binär.
>
> Natürlich als binär bzw Hex dargestellt. Ich meinte nur dass es im Flash
> mit abgelegt ist. (Also ohne RomRead und wegspeichern)
> Das lag im Hauptprogramm.

Dann kann das hier
SelectRom:    ldi      zl,low(RealRom)
        ldi      zh,high(RealRom)

...
SR10:      ld      accu,z+          ;Ein Byte aus der Romtabelle laden...

aber so nicht funktionieren.
Wenn du aus dem Flash lesen willst, dann darf das kein LD Befehl sein, 
sondern muss ein LPM sein.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Speicher#Flash-ROM_2

Und aufpassen auf den Unterschied zwischen der normalen Wordadressierung 
und der beim LPM notwendigen Byteadressierung. Genau deswegen taucht 
dort überall die Multiplikation mit 2 auf.


Im übrigen ist es keine so gute Idee, wenn du mehrere Lösungsarten 
beschreibst, die du probiert hast, und niemand weiss dann mehr, zu 
welcher Probiererei der angegebene Code gehört.

: Bearbeitet durch Moderator
Autor: André M. (killroymenzel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> ich bin Energiesparer

find ich Klasse

Joachim B. schrieb:
> wenn ich nicht daheim bin darf die Heizung
> runterfahren sie kommt kurz vor meiner Heimkehr wieder hoch

Das lohnt sich m.M. nur wenn man länger ausser Haus ist, da die Energie, 
um die Wohnung wieder zu erwärmen nur unwesentlich kleiner ist, als die 
Temperatur "zu halten".
Aber da kommt es noch drauf an wie gut das Gebäude isoliert ist, welche 
Heizung man hat, wie groß die Wohnung ist, etc. etc. Da giebt es einiges 
zu beachten und zu berechnen.
Für mich persönlich habe ich ausgerechnet dass sich das nicht wirklich 
lohnt.
Obwohl meine Heizung solch eine Steuerung schon besitzt, mit ausser Haus 
gehen, absenkung, Urlaub, etc.etc.
Bei mir habe ich nur die Urlaubsfunktion benutzt.

André

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
André Menzel schrieb:
> Das lohnt sich m.M. nur wenn man länger ausser Haus ist, da die Energie,
> um die Wohnung wieder zu erwärmen nur unwesentlich kleiner ist, als die
> Temperatur "zu halten".

ich bin oft meist fast immer über 10-12 Stunden ausser Haus und die 
Wärmeverluste in größeren Temperaturunterschieden sind heftiger, so gut 
ist das Haus nicht gedämmt und die Fenster sind auch nur '74er Standard.

Jedenfalls mit den programmierbaren Thermostaten sind die Heizkosten 
sehr erträglich, die haben sich innerhalb eine Jahres bezahlt gemacht.

Autor: André M. (killroymenzel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super.......
Bei mir ist es eben so dass ich in einem Reihenhaus lebe und dieses ist 
erst 2012 gebaut worden. Ich möchte die Temperatursensoren "fast" nur 
zur Doku verwenden und halt die Räume nur im "kleinen Bereich" zu 
Regeln.
Das wird sowieso noch Spannend, da ich überall Fussbodenheizung habe und 
die sehr "träge" ist.
Hauptsächlich will ich auch Licht und ein paar auserwählte Steckdosen 
überwachen und schalten können.
Aber wir werden sehen - steckt alles noch in Kinderschuhen. Ist ja 
schließlich nur Hobby.


André

Autor: André M. (killroymenzel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl Heinz schrieb:
> Dann kann das hierSelectRom:    ldi      zl,low(RealRom)
>         ldi      zh,high(RealRom)
>
> ...
> SR10:      ld      accu,z+          ;Ein Byte aus der Romtabelle
> laden...
>
> aber so nicht funktionieren.
> Wenn du aus dem Flash lesen willst, dann darf das kein LD Befehl sein,
> sondern muss ein LPM sein.

hmmm da hatte ich das ganze Versucht mit dem Ram zu "lösen".
D.h. im ReadRom habe ich es ins Ram geschrieben und dort wollte ich es 
rausholen.

Karl Heinz schrieb:
> Im übrigen ist es keine so gute Idee, wenn du mehrere Lösungsarten
> beschreibst, die du probiert hast, und niemand weiss dann mehr, zu
> welcher Probiererei der angegebene Code gehört.

Stimmt, sorry, Ich denke deswegen sind auch ein paar Missverständnisse 
aufgetreten.
Werd ich das nächste mal beachten wenn ich ein Problem schildere.

Danke für den Hinweis.


André

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.