Op 1 oktober 2019 20:19:57 schreef rew:
Wat bij I2C wel eens een instinker is, dat is dat je adressen op 2 manieren kan interpreteren/noemen. En die worden alletwee gebruikt.
Eerst de technische situatie. Als je een device wil adresseren roep je in bit 7-1 z'n adres, en in bit 0 of je wilt lezen (1) of schrijven (0).
Als bit 7-1 dan 1010011 moet zijn voor een bepaalde chip en je wilt lezen, dan moet je dus 1010 0111 sturen. 0xA7 . En schrijven wordt 0xA6. Het is dan handig om 0xA6 het adres te noemen en +1 te doen voor "lezen".
Andere mensen zeggen dat het adres 1010011 -> 101 0011 dus 0x53 is. Dat moet je dan *2 doen om te schrijven en *2+1 om te lezen....
BEIDE conventies worden gebruikt. Als je picbasic de ene wil en je hebt de andere uit het datasheet gevist dan ben je de sjaak, adresseer je "lucht" en antwoord de DSxxxx niet.
Detecteert je i2c library of er een ACK komt als iets geadresseerd wordt? Controleer of je goed zit, of doe een scan....
Het is wel een heel gegoochel moet ik zeggen. Ik heb het wel 10 keer overgelezen en nog vat ik het even niet. Hoe ingewikkeld kan men het maken.
Volgens de datasheet van DS3231 is het adres %1101000x, waarbij x=1 voor lezen.
De Arduino gebruikt adres $68. Als ik naar de post van rew kijk kan ik dat met een beetje fantasie herleiden uit de %1101000.
Ik heb een I2C scanner geïnstalleerd en die geeft twee 'hits' voor de DS3231:
Adres 0x57 én 0x68.
Beide heb ik uiteraard geprobeerd bij het PIC programma; nog steeds geen resultaat bij het uitlezen.
Vervolgens heb ik een tellertje gemaakt die vanaf $57 het adres met 1 ophoogt en probeert te communiceren, maar het resultaat hiervan is dat het display alle kanten opschiet, tot het volledig 'hangen' van de uC.
Ik heb geen idee meer en raak zo'n beetje door de mogelijkheden heen om het aan de praat te krijgen.
Heeft iemand nog een ingeving?