Ds18s20

Hallo,

Michael hat im Bascom-Forum den Thread jetzt dichtgemacht weil ...
roboternetz.de - Temperatursensor DS18S20 Bascom
... da werden sie geholfen :p Das dritte Crossposting.

Da dieser Thread ja auch schon etwas älter ist werde ich also hier auch dicht machen ...
Wenn er sich entschieden hat wo er sich helfen lassen will, dann kann er ja nen neuen Thread aufmachen :rolleyes:

Gruß
Dino
 
Prima ! Freu ...

Ich habe in Bezug auf den DS18B20 noch einmal grundsätzliche Fragen und denke hier sind die gut platziert.

Ich habe verstanden, dass es beim dem Sensor auf den Prozessablauf ankommt, wenn man diesen ordentlich ansprechen will.
1) Initialisierung
2) ROM Command
3) Function command

ich würde jetzt folgenden Prozess erwarten:

1) 1wreset
2) 1wwrite &HCC (SKIP ROM ... alle Sensoren werden angesprochen)
3) 1wwrite &H44 (Temperaturmessung auf allen Sensoren starten)

Schleife über ALLE sensoren
4) 1wreset (erneute Initialisierung)
5) 1wwrite &H55 Sensornummer() (passenden Sensor ansprechen MATCH ROM)
6) 1wwrite &HBE (Temperatur auslesen)


Wo genau müßte ich denn dann die Auflösung der Temperatursensoren unterbringen.
Mache ich das genau ein einziges Mal, oder muss das bei jedem Systemstart als Programmvorlauf immer wieder durchgeführt werden. Und dann wie ?

a) 1wreset
b) 1wwrite &HCC (SKIP ROM - alle Sensoren ansprechen)
b) 1wwrite &B4E , &B0000 ( WRITE SCRATCHPAD - Auflösung,9bit gesetzt)
 
Hallo Ingo!

Puh.... es ist zwar schon eine ganze Weile her, dass ich mit den DS18x20 gearbeitet habe, aber beim Blick ins Datenblatt ist mir folgendes aufgefallen.

Mit 4Eh kannst du deine Konfiguration schreiben....
also die Auflösung einstellen.

Allerdings musst du immer drei Bytes schreiben:
das T-high Register
dann das T-low Register
und danach die Konfig.

Ich habe vom Datenblatt mal passende Bilder gemacht.



Grüße,
Cassio
 

Anhänge

  • DS18B20_Config_reg.jpg
    DS18B20_Config_reg.jpg
    171,1 KB · Aufrufe: 12
  • DS18B20_wr_config.jpg
    DS18B20_wr_config.jpg
    182 KB · Aufrufe: 7
ah verstehe v...
aber muss ich das jedes mal beim power on machen oder ist die konfig nicht flüchtig ?
 
Hi,

ein Blick ins Datenblatt ...

Memory:
The DS18B20’s memory is organized as shown in Figure 8. The memory consists of a scratchpad RAM
and a nonvolatile, electrically erasable (E2) RAM, which stores the high and low temperature triggers TH
and TL, and the configuration register. The scratchpad helps insure data integrity when communicating

Damit sollte das Configregister mit den Bits R0/R1 für die Auflösung also einen Reset überstehen. Kann man aber auch überprüfen wenn man das Register nach nem Reset ausliest. Dann sollte der Wert theoretisch noch vorhanden sein.

Im Bild8 im Datenblatt sieht man aber auch was im nicht flüchtigen Speicher steht.

Gruß
Dino
 
Ja. Das habe ich nun auch gefunden :) da habe ich glatt beim mehrmaligen Lesen entweder drübergelesen oder nicht verstanden.

Alles klar. Dann kann ich wenigstens an die Ansteuerung und das Auslesen einen Haken machen und mich mit der Aufbereitung des eigentlichen Temp Wertes begeben.
 
Hallo,

um diese Sensoren zu testen und zu verstehen habe icn vor ein paar Jahren eine Testplatine gebaut.
Kann bis zu 10 Sensoren Sockeln. Das Problem war auch bei mir die Software wenn mehrere und unterschiedliche Typen am Bus hängen und natürlich sollte auch Minus angezeigt werten.
Die letzte Lösungsfindung war das kalibrieren.

So nun mein Code.


CodeBox BascomAVR

'****************** Test-Platine ************************
'* ist ein Testmodul für Digital Temperatur-Sensoren  *
'* [DS18x20] DS18S20 ist ein 9 Bit Family Adr &H10  *
'* und DSB20 ein 12 Bit Family Adr &H28  *
'* somit große Unterschiede bei der "Empfindlichkeit"  *
'* Das lesen der Bit's ist somit auch Unterschiedlich.  *
'********************************************************


$regfile "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
$baud = 19200

'### LCD Verbindungen mit Controller###
Lcd_db4 Alias Portd.5
Lcd_db5 Alias Portd.4
Lcd_db6 Alias Portd.3
Lcd_db7 Alias Portd.2
Lcd_e Alias Portd.6
Lcd_rs Alias Portd.7

Config Lcdpin = Pin , Db4 = Lcd_db4 , Db5 = Lcd_db5 , Db6 = Lcd_db6 , Db7 = Lcd_db7 , E = Lcd_e , Rs = Lcd_rs

Config Lcd = 16 * 2  'dies ist die Kennung für Lib Lcdpin
Cursor Off Noblink  'Aus und nicht blinken
Lcdinit
Waitms 100

'für Test die am Port B.0 angeschlossenen Temperatursensoren
Declare Sub Ds1820_alleseriennummern()

'Temperatursensor Anschluß an Portpin B.0
Dim 1wtemp_adresse_1(8) As Byte  ' Adresse des Temperatursensors 1
Dim 1wtemp_adresse_2(8) As Byte  ' Adresse des Temperatursensors 2
Dim Temp_bytes(9) As Byte
Dim Tempdif As Integer
Dim Tempdif1 As Integer  'Variable zur Temp. Berechnung DeziGrad
Dim Temp1 As Single
Dim Temp2 As Single

'Format für Single eine Nachkommastellen
Config Single = Scientific , Digits = 1  'wenn die 2 benötigt anpassen.

'Temperatursensoren DS 18S20 an PortB.0 (Bascom Unterprogramm einbinden)
Config 1wire = Portb.0  'Temperatursensor 1und2
Portb.0 = 1  'Port auf H schalten

'------Temperatursensor erkennen-------
'testet die am Portpin B.0 angeschlossenen Temperatursensoren
Call Ds1820_alleseriennummern()

1wtemp_adresse_1(1) = 1wsearchfirst()  'ist der erste gefundene Sensor
1wtemp_adresse_2(1) = 1wsearchnext()  'suche nächsten
'1wtemp_adresse_3(1) = 1wsearchnext()  'wenn noch mehr erweitern

Cls


Do

'Temperatursensoren Daten einlesen
  Gosub Temperaturmessung
' Print "  Temp1  " ; Temp1
' Print "  Temp2  " ; Temp2
'nun was anzeigen
  Locate 1 , 1  'Cursor auf 1 Zeile, 1 Spalte
  Lcd "  Temp1  " ; Temp1
  Locate 2 , 1  'Cursor auf 2 Zeile, 1 Spalte
  Lcd "  Temp2  " ; Temp2

Loop
  End


Temperaturmessung:
  ' bei allen Sensoren den Messvorgang starten
  1wreset
  1wwrite &HCC  ' SKIP ROM, alle Sensoren ansprechen
  1wwrite &H44  ' CONVERT T, Temperatur messen
'Zeit zum Messen geben
  Waitms 50

'===== erster Temp.-Sensor ist ein S Typ=====

  1wreset
  1wverify 1wtemp_adresse_1(1)
  1wwrite &HBE  ' Read Scratchpad, Temperatur auslesen
'Zeit zum Messen geben
  Waitms 100
  Temp_bytes(1) = 1wread(8)
  Tempdif = Makeint(temp_bytes(1) , Temp_bytes(2))  'erstes und 2 Byte(LSB+MSB) zusammenfügen

  Tempdif = Tempdif * 50
  Tempdif = Tempdif - 25.6
  Tempdif1 = Temp_bytes(8) - Temp_bytes(7)
  Tempdif1 = Tempdif1 * 100
  Tempdif1 = Tempdif1 / Temp_bytes(8)
  Tempdif = Tempdif + Tempdif1
  Temp1 = Tempdif / 100

'(
'===== zweiter Temp.-Sensor wenn auch ein S Typ  =====
  ' Anfrage senden
  1wreset
  1wverify 1wtemp_adresse_2(1)
  1wwrite &HBE  ' Read Scratchpad, Temperatur auslesen
  Temp_bytes(1) = 1wread(8)
  Tempdif = Makeint(temp_bytes(1) , Temp_bytes(2))  'erstes und 2 Byte(LSB+MSB) zusammenfügen.

  Tempdif = Tempdif * 50
  Tempdif = Tempdif - 25.6
  Tempdif1 = Temp_bytes(8) - Temp_bytes(7)
  Tempdif1 = Tempdif1 * 100
  Tempdif1 = Tempdif1 / Temp_bytes(8)
  Tempdif = Tempdif + Tempdif1
  Temp2 = Tempdif / 100
'Zeit zum Messen geben
  Waitms 10
')

'===== erster Temp.-Sensor wenn es ein B Typ ist =====
  ' Anfrage senden
  1wreset
  1wverify 1wtemp_adresse_2(1)
  1wwrite &HBE  ' Read Scratchpad, Temperatur auslesen
'Zeit zum Messen geben
  Waitms 100

  Temp_bytes(1) = 1wread(8)
  Tempdif = Makeint(temp_bytes(1) , Temp_bytes(2))  'erstes und 2 Byte(LSB+MSB) zusammenfügen.
  Tempdif = Tempdif / 8  'hier der Unterschied
  Tempdif = Tempdif * 50
  Tempdif = Tempdif - 25.5
  Tempdif1 = Temp_bytes(8) - Temp_bytes(7)
  Tempdif1 = Tempdif1 * 100
  Tempdif1 = Tempdif1 / Temp_bytes(8)
  Tempdif = Tempdif + Tempdif1
  Temp2 = Tempdif / 100

Return


'-------------------------------------------------------------------------------

'############# nach Neustart Temperatursensor Test ###############

'wird dieser Test Erfolgreich beendet wird die "Messung" oben in den Variablen
'geschrieben [1wtemp_adresse_1(1)] ist der erste Sensor und
'und [1wtemp_adresse_2(1)] ist der zweite usw.

'Gibt die Seriennummer aller Sensoren des Bus über COM(TTL) aus.
'wenn Hardware-Fehler wird dieser angezeigt.

Sub Ds1820_alleseriennummern()
Local Crc As Byte
Local I As Integer
Local Anzahl As Integer
Dim Adresse(8) As Byte
Adresse(1) = 1wsearchfirst()  'prüft den ersten Teilnehmer am Bus
If Err = 0 Then  'Wenn err, dann gibt es keinen Sensor

'ist nur für Info die Hex-Adresse ist "Name" mit dieser Kenntnis
'kannst Du mit [1wwrite &H55 und 1wwrite Sensor1_id("Name") , 8
'jeden einzeln ansprechen. Mach bei mehreren Sensoren Sinn.

Print "sind Hex-Adresse der Ds1820"

'ab hier prüfen
Do
Crc = Crc8(adresse(1) , 7)
If Crc <> Adresse(8) Then Print "Daten fehlerhaft gelesen (CRC-Fehler)!"
  For I = 1 To 8
  Print Hex(adresse(i)) ;
  Print " ";
  Next
  Print

  Adresse(1) = 1wsearchnext()  'nächste suchen
Loop Until Err = 1
End If
'Print
Anzahl = 1wirecount()  'Anzahl der Sensoren
  Print "Anzahl der Sensoren am Bus: " ; Anzahl
  Print
  Print "Test abgeschlossen"
  Print "Hauptprogramm wird gestartet"
  Print
  Wait 5
End Sub




Dim Sngeeprom As Single  'Single to/from EEPROM
Dim Bytsngeep(4) As Byte At Sngeeprom Overlay
Dim Wrdaddr As Word  'EEPROM address
Dim Byttmp0 As Byte  'Temporary byte variable
Dim Sngtmp0 As Single  'Temporary single variable

'Declare subs
Declare Sub Eepromwritesng(byref Sngsingle As Single)
Declare Sub Eepromreadsng(byref Sngsingle As Single)

Wrdaddr = 11  'EEPROM start address
Sngtmp0 = 123.456  'Single to be stored in EEPROM
Call Eepromwritesng(sngtmp0)  'Store sngTmp0 to EEPROM

Wrdaddr = 11
Call Eepromreadsng(sngtmp0)  'Retrieve sngTmp0 from EEPROM

'==============================================================================
Sub Eepromwritesng(byref Sngsingle As Single)
'Decode sngSingle to 4 bytes of bytSngEEP for writing to EEPROM
'Input sngSingle is set to sngEEPROM, overlayed with bytSngEEP(i), i=1...4
'The 4 bytes bytSngEEP(i)are written to EEPROM
'Input:  sngSingle to be decoded & written to EEPROM
'  wrdAddr first EEPROM address

  Sngeeprom = Sngsingle  'Set input
  For Byttmp0 = 1 To 4
  Writeeeprom Bytsngeep(byttmp0) , Wrdaddr
  Incr Wrdaddr
  Next Byttmp0
End Sub

'==============================================================================
Sub Eepromreadsng(byref Sngsingle As Single)
'Encode 4 bytes read from EEPROM to sngSingle
'The 4 bytes are read to bytSngEEP(i), i=1...4
'bytSngEEP is overlayed @ sngEEPROM
'sngEEPROM is set to output sngSingle
'Input:  wrdAddr first EEPROM address
'Output: sngSingle encoded to single variable read from EEPROM

  For Byttmp0 = 1 To 4
  Readeeprom Bytsngeep(byttmp0) , Wrdaddr
  Incr Wrdaddr
  Next Byttmp0
  Sngsingle = Sngeeprom  'Set output
End Sub

Bitte beachten: Den Header auf passenden ATMEGA- Typ und Takt einstellen.

Mit freundlichen Grüßen
 
So, nun noch einmal grundsätzliche Fragen ....

Definition der Variablen mit 8Byte Länge
"Dim 1wtemp_adresse_1(8) As Byte ' Adresse des Temperatursensors 1"

Und nun das Ansprechen :
1wtemp_adresse_2(1) = 1wsearchnext() 'suche nächsten

Muss man das erste Byte hinter dem Variablen Namen angeben ? Wenn ja warum ?

Könnte ich auch auch die Variable 1wtemp_adresse_n (8)die ja ein 8 Byte Array ist zusätzlich nochmals als Array definieren ? Quasi ein Array im Array

DIM ARRAY (8) as Byte (10) ?

Oder dann Array (80) as Byte und dann greife ich an dieser Stelle jeweils 8 Bytes ab (via Index) und dann ab 9 ... etc.


Habe das hier gefunden .... verstehe das aber nicht so ganz:

Dim Byte_arr(32) As Byte
Dim Idx As Byte
Byte_arr(1).8 = 1
Print "Byte_arr(2) = " ; Bin(byte_arr(2))
Byte_arr(1).15 = 1
Print "Byte_arr(2) = " ; Bin(byte_arr(2))
Byte_arr(1).29 = 1
Print "Byte_arr(4) = " ; Bin(byte_arr(4))
Idx = 63
Byte_arr(1).idx = 1
Print "Byte_arr(8) = " ; Bin(byte_arr(8))
Idx = 255
Byte_arr(1).idx = 1
Print "Byte_arr(32) = " ; Bin(byte_arr(32))
 
Hallo Forum,

Bitte um Entschuldigung, dass Antwort 2 mal erscheint. Lag an meinem Browser IE8 dort sieht die Forumseite, nach Umstellung, sehr übel aus und ist kaum zu Händeln. Wollte die erste Antwort nur bearbeiten. Hat ja sichtlich nicht geklappt. Nun noch ein anderen Browser installiert und hoffe solche Peinlichkeit basiert nicht noch mal.

Meine Bitte an Administrator Dirk lösche den „Misst“ Danke!!!

Nun zur Frage von @IngoP.
Mein Code ist nur ein Beispiel wenn am 1Wire Bus mehre Teilnehmer angeschlossen sind und
sollen deren Adresse lese, wenn sich diese melden.
Einfach gesagt ist es ein Hardwaretest und Voraussetzung um sich dann mit den Messdaten zu beschäftigen.

Frage1: „Muss man das erste Byte hinter dem Variablen Namen angeben ?“ hat sich wohl erledigt wenn ich dich richtig verstanden habe. Ist nur ein Sensor angeschlossen, warum nach weitere suchen und Adresse(0) in eine Variable schreiben? Befehl: 1wsearchfirst() aktiviert Bus. Wurde der erste Sensor gefunden, ist Bus nur noch für diesen „offen“ um dessen Daten WR/RW abzufragen und in einer Variable zu speichern wenn programmiert. Nun wird der Bus mit 1wsearchnext() zurückgesetzt in Bascom sehr gut realisiert(merke 1 und suche weiter bis ....) 1wtemp_adresse_x ist eine Variable und mit (1) wird Adresse in Variable übergeben.

Frage2: „Könnte ich auch die Variable 1wtemp_adresse_n (8)die ja ein 8 Byte Array ist zusätzlich nochmals als Array definieren ? Quasi ein Array im Array“
Na klar. Aber den Sinn kann ich nicht nachvollziehen.

Immer daran denken die Controller sind keine „Hochleistungs-Prozessoren“. Also warum Ressourcen verschwenden.

Mit freundlichen Grüßen
 
Nun, ich habe ca. 10 Sensoren deren Adresse ich fest deklariere.

Da ich eine strukturierte Sensorvariablen definition für eine spätere elegantere Programmroutine haben möchte will ich das Array in einen Array legen ;-)
So dass die Adresse jedes Sensors im 8ByteArray liegen und dann jeweils das ganze 10 Mal.

Ist denn mein Ansatz an der Stelle richtig ?
 
Hallo IngoP,
dein Ansatz ist nicht falsch(„viele Wege führen nach Rom“) aber wenn schon ein Umweg dann lieber den unbeschwerlichen Weg mit Overlay nutzen. Ist nach meiner Erfahrung effektiver als mit Array.


Mit freundlichen Grüßen
 
Hallo IngoP,
dein Ansatz ist nicht falsch(„viele Wege führen nach Rom“) aber wenn schon ein Umweg dann lieber den unbeschwerlichen Weg mit Overlay nutzen. Ist nach meiner Erfahrung effektiver als mit Array.


Mit freundlichen Grüßen
Kannst Du ein plastisches Beispiel geben ?#

>>
DIM Sensornummern (80) as BYTE
DIM Sensornr as BYTE * 8 at ARRAY Sensornummern
<<
 
Zuletzt bearbeitet:
Hallo IngoP,

Grobes Schema:

Adresspuffer = 1wsearchfirst()

Const Max_len = 100 ‚sollte auf optimal eingestellt werden.
Dim Adresspuffer(max_len) As Byte
' ab Adresspuffer(2) die 1 Adresse ablegen
Dim Temp1 As Word At Adresspuffer(2) Overlay
Dim Temp2 As Word At Adresspuffer(10) Overlay
Dim Temp3 As Word At Adresspuffer(18) Overlay
Dim Temp4 As Word At Adresspuffer(26) Overlay
Dim Temp5 As Word At Adresspuffer(34) Overlay
Dim Temp6 As Word At Adresspuffer(52) Overlay
Dim Temp7 As Word At Adresspuffer(60) Overlay
Dim Temp8 As Word At Adresspuffer(68) Overlay
Dim Temp9 As Word At Adresspuffer(72) Overlay
Dim Temp10 As Word At Adresspuffer(80) Overlay

Nun kannst Du noch ein Overlay für Messdaten anlegen. Nur mal so „plastisch“

Messdaten = 1wverify 1wtemp_adresse_x(1)
Dim Messdaten(100) As Byte
Dim Temperatur1 As Single At Messdaten(1) Overlay
usw.

MfG
 
Adresspuffer = 1wsearchfirst()

Dieser Befehl liest dann die erste Sensornummer ein ... ok.
Aber was ist mit dem späteren ansprechen der weiteren "Tempn" ?
Geht dann der 1wserchnext automatisch auf den nächsten Overlay ?

Vielleicht denke ich auch gerade nur in einer falschen Welt, aber ich würde jetzt gerade beim Auslesen der einzelnen Temperaturen eine Schleife setzen 1 bis n und dann mit dem Index aus der Schleife die jeweils passende Sensornummer auswählen und dann dazu die Temperatur in die passende Indexschublade schreiben ...
So kenne ich das aus COBOL etc....

Sensornummer (8,10) as BYTE
Temperatur (9,10) as BYTE
[ VAR ( IX1, IX2 ) as VARTYPE ]

Die Overlays muss ich dann ja mit Temp1 .. Temp10 explizit anspringen.
Dem Grunde nach geht es mir um vereinfachten Code mit so wenig Befehlen wie möglich ... hmmm vielleicht würde ein Nassi Schneidermann helfen :-D
 
Zuletzt bearbeitet:
Hallo IngoP,
deine Frage war Array. Meine Antwort „wenn schon bevorzuge ich Overlays“
In meiner Umfangreichen „Haus- & Hofsteuerung“ 28 Messpunkte, nicht nur Temperatursensoren, ist meine eigenwillige Lösung völlig anders.

Alle Messdaten werden in eine Variable(String) geschrieben mit Trennzeichen pro Sensor. Die Sensoradresse interessiert mich nun nicht mehr. Weis ja die ersten Zeichen bis Trennzeichen ist Sensor 1 usw. Diese Variante hat den Vorteil ich kann diese Zeichenkette in Excel importieren für grafische Auswertungen oder in eine Datenbank schreiben.

Abschließend noch ein Hinweis. Die DS...... benötigen eine „Einschwingzeit“ von min 50ms nach ansprechen um Wert zu digitalisieren. Bei 10 Sensoren schon eine gefühlte Ewigkeit.
Meine Variante ist einen ATMega für Messdatenerfassung und einen zweiten mit TTL Uart verbunden, der nach Vorgabe alle Daten „bearbeitet“ und „veröffentlicht“. Funktioniert nach meinen Ansprüchen seit Jahren zuverlässig..
Nun sind wir vom eigentlichen Thema weit entfernt und sollten diese Diskussion beenden.

Mit freundlichen Grüßen
 
Ich muss nochmal nachfragen, da mein Sensor mir komische Werte liefert .... (PullUp ist vorhanden)
1) Muss der Tempsensor JEDES MAL nach dem Powerup auf seine 9bit Auflösung zurückgesetzt werden, oder behält er sich die Einstellungen ?
2) Auflösung der Binärdaten - Wenn ich doch den Sensor mit einer Range von -55 bis +85 °C habe, alles auf dem ersten Byte mir anzeigt, dass es sich um eine negative Temp handelt, dann ist doch eigentlich sie Auflösung unterhalb von 0 Grad eine genauere als über Null ? oder habe ich da einen Denkfehler ?
 
Zu 2tens: Nein, die Auflösung ist ein halbes Kelvin (pro Bit). Dabei wird der mögliche Raum der 9bit nicht ausgeschöpft (sondern eben nur von 0_0000_0000 (= dezimal 0) bis 0_1010_1010 (= dezimal 170 -> halbe °C also 85 ganze °C) im positiven, und von 1_1111_1111(= dezimal -1, also -0,5°C) bis 1_1001_0010 (also dezimal -110, also -55 ganze °C) im negativen Bereich).
 
Zuletzt bearbeitet:
Ups... im Thread-Titel steht der DS18S20, für den galt die Antwort da oben...

Im Thread scheints inzwischen aber auch um den DS18B20 zu gehen, und bei dem kann die Auflösung eingestellt werden.
Beide besitzen ein flüchtiges Scratchpad. Der Begriff SRAM ist hier unpassend, da man nicht wahlfrei auf einzelne Adressen zugreifen kann, sondern immer in einer vorgegebenen Reihenfolge Lesen/schreiben muß. Einige Bytes sind nur lesbar, andere können geschrieben werden.
Beim 18S20 sind das nur die Alarmgrenzen, beim 18B20 zusätzlich das Konfigurationsbyte (wo lediglich die Auflösung konfiguriert wird).

Außerdem besitzen beide nichtflüchtigen EEPROM, der die Alarmgrenzen und beim 18B20 das Konfigurationsbyte nichtflüchtig sichern können.
Nach einem Copy Scratchpad Kommando (0x48) läßt kopiert der 18x20 den derzeitigen Inhalt der Alarmregister und ggf des Konfigurationsregisters in die entsprechenden EEPROM-Register. Mit dem Recall E² Kommando (0xB8) werden die Daten aus dem EEPROM ins Scratchpad kopiert.

Soweit war das wahrscheinlich klar, nun zu Frage 1 - dazu findet man im Datenblatt zwei wiedersprüchliche Stellen:
Datenblatt S.9 - Configuration Register schrieb:
The power-up default of these bits is R0 = 1 and R1 = 1 (12-bit resolution).
Datenblatt S.8 - Memory schrieb:
Data in the EEPROM registers is retained when the device is powered down; at power-up the EEPROM data is reloaded into the corresponding scratchpad locations.
Ist das jetzt so zu interpretieren, daß zu Beginn des PowerUp erstmal 12Bit eingestellt sind, aber während des PowerUps automatisch die Vorgabe aus dem EEPROM übernommen wird?
(also die 12Bit solange im Konfigurationsbyte Stehen, bis das PowerUp den Wert aus dem EEPROM laden läßt).
Dann müßtest Du einmal die Auflösung über das Scratchpad ins EEPROM schreiben lassen, von dort wirds dann bei jedem PowerUp automatisch geladen.

Und jetzt nochmal zu Frage 2:
Welchen Sensor meinst Du da? Ich finde in beiden Datenblättern immer -55..125°C.
Die Auflösung ist immer so, wie Du sie eingestellt hast: 9 (°C/2), 10 (°C/4), 11 (°C/8) oder 12 (°C/16) Bit.
Hmm... oder meinst Du die Genauigkeit des Sensors, die im Bereich von -10..85°C mit einem halben °C und ausserhalb dieses Bereiches mit 2°C angegeben ist (müßten eigentlich Kelvin sein)?
Das hat ja nichts mit der binären Auflösung zu tun, sondern daß das ganze da draussen weniger linear ist
 
Zuletzt bearbeitet:

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)