Een ds1621 kan je uitlezen over i2c met een of twee data bytes.De eerste byte geeft mij na de nodige omrekening de juiste temp, geen probleem. De tweede echter zou de 0.5 C moeten geven, dus 00 of 80 hex.Ik krijg echter steeds FF terug. Wat zie ik over het hoofd?
De DS1621 geeft zijn waarde weer in two's complement. Dit houdt in dat je de bits moet inverteren om direct de juiste decimale waarden te krijgen. Om de 2de byte goed uit te lezen moet je na het uitlezen van het 1ste byte wel op de I2C bus een Master Ack geven voor dat je de 2de byte kan uitlezen. Je geeft aan dat je 255 terug krijgt, dit is in two's complement 0. Je moet de 2de byte dus nog inverteren voordat je 00 krijgt of 7F (Decimaal 127). Touwens, hoe stuur jij de DS1621 aan?
[Bericht gewijzigd door Xlent op ]
Alvasthartelijk dank voor antwoord. Ik krijg mijn temperatuur, positief of negatief zonder probleem, alleen die laatste 1/2 graad nog (bit 9).Ik gebruik een mega8 van atmel voor de ds1621 uit te lezen, volgens formaat; start,adres+w,ds-ackn,comandbyte,ds-ackn,rep-start,adres+R,
ds-ackn,rx ms-byte,master-ackn,rx ls-byte,master no ackn,stop
Altijd is de ls-byte = FF, ook nooit 7F, 80 of 00.
Een subroutine zet de MS byte om in graden op lcd display, een andere zet de LS byte om in bit formaat op RS232. Ter controle heb ik de LS byte met MS verwisseld. Dan krijg ik -1 graad op lcd (=FF) en vb00011001 (=25 C)op scherm. Hieruit besluit ik dat mijn sofware goed is, en geen registers per ongeluk overschreven worden.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Bij de baard van Wodan! Zit ik even de datasheet van de DS1620 (waarvan ik er een paar in gebruik heb) te vergelijken met die van de DS1621, in de hoop iets zinnigs aan dit onderwerp toe te voegen, kom ik er achter dat de DS1620 een hogere resolutie dan 0.5°C kan leveren (zij het op een merkwaardige manier).
Afin, dat wordt weer proggen morgen - of prossen...