modul s DS1307
Moderátor: Moderátoři
- RX-20
- Doporučuje se dohled moderátorů
- Příspěvky: 270
- Registrován: 30 čer 2024, 00:00
- Bydliště: střední Čechy u Koněpruských jeskyní
modul s DS1307
Protože mne otravovalo obvod stále zastrkávat do nepájivého pole, koupil jsem tento modul GME: https://www.gme.cz/v/1507876/modul-rtc- ... -32k-flash.
Myslel jsem si, že se mi zjednoduší připojování DS1307 na různé mikropočítače.
Jenže jsem tento modul nezprovoznil s žádným Microchip mikropočítačem. Program, který funguje s mým DS1307 na nepájivém poli, nefunguje s modulem od GME.
Na internetu se mi povedlo najít schema tohoto modulu (GME ho nemá).
Na modulu není osazeno teplotní čidlo DS18B20 (1-wire) ani baterie. Baterie má být nabíjecí (tu nemám). Pro ne-nabíjecí baterii se musí odstranit dioda a dva odpory a jeden odpor se nahradí spojkou.
Otázka: není náhodou tento modul určen pouze pro Ardujíno?
Ardujíno nemám, takže modul s ním nemůžu vyzkoušet.
Diskuze s hlupákem je ztráta času, protože hlupák vás stahne na jeho úroveň a umlátí vás jeho hloupými argumenty.
- RX-20
- Doporučuje se dohled moderátorů
- Příspěvky: 270
- Registrován: 30 čer 2024, 00:00
- Bydliště: střední Čechy u Koněpruských jeskyní
Mělo by to fungovat, ale nefunguje.Dumitru píše:Ahoj musí to fungovať z akýmkoľvek MCU ktorý ma I2C rozhranie
Ak je všetko správne pripojene samozrejme
Skús sa pozrieť aké napätia máš VCC a Vbat
V datasheete som našiel toto viď foto
Předně, to schema vytvořil někdo ve světě rozkreslenim z desky modulu. Není to schema "výrobce".Kdo to vyrábí ví Bůh.Asi Číňani nebo Mexičani anebo Číňani v Mexiku. Mají tam výrobny.
Vcc je +5V. To už jsem měřil až na desce. Vyzkoušel jsem napájení z externího zdroje i napájení z desky mikropočítače. Je to stejné. V napájení to není. Na desce není žádná LEDka, která by indikovala, že do modulu jde napětí.
Baterie tam není, protože se tam musí dát dobíjecí baterka a ne normální baterka. Pro normální baterku, jak jsem psal, se musí dělat změny na desce a to se mi nechce. Perspektivně seženu dobíjecí baterku. To znamená nyní je Vbat = 0. Baterkou by to být nemělo, je tam jen kvůli backupu.
Blbý je, že obvod je natvrdo v SMD a nelze obvod vyndat a vyzkoušet jinde nebo nahradit jiným. Teoreticky by to mohl být zmetek.
adresa je předpokládám standardní, tj. 7-bitová 0x68 , 8-bitová 0xD0. V adrese to není, protože stejný program, ten samý, funguje s jiným DS1307 zapíchnutým v nepájivém poli a se stejným mikropočítačem.
I2C scannery jsou dost pofiderní, mám celkem tři a každý funguje jinak a dává jiné výsledky. Problém je v tom, že I2C je softwarová záležitost a ACK není ze strany Slave vždy generován (třeba na Start, Stop, Restart). Některý součástky ACK generují, většinou ale ne a generují ACK pouze na WRITE.
Mám také I2C monitorovací desku,která monitoruje provoz na I2C a vypisuje hlášky co se na sběrnici děje. Pomocí té jsem zjistil, že modul nereaguje.
Diskuze s hlupákem je ztráta času, protože hlupák vás stahne na jeho úroveň a umlátí vás jeho hloupými argumenty.
- RX-20
- Doporučuje se dohled moderátorů
- Příspěvky: 270
- Registrován: 30 čer 2024, 00:00
- Bydliště: střední Čechy u Koněpruských jeskyní
Modul jsem dal zpět do sáčku a zavřel do almary. Ztratil jsem tím modulem spoustu hodin. Vytahnul jsem zase nepájivé pole, zastrčil do něj DS1307 a můj software normálně funguje.
Diskuze s hlupákem je ztráta času, protože hlupák vás stahne na jeho úroveň a umlátí vás jeho hloupými argumenty.
- RX-20
- Doporučuje se dohled moderátorů
- Příspěvky: 270
- Registrován: 30 čer 2024, 00:00
- Bydliště: střední Čechy u Koněpruských jeskyní
Pak mne napadlo zjistit, proč teda nefunguje DS1307. Dobral jsem se pomocí analyzátoru k tomu, že po zápisu dat do RTC, obvod neposílá ACK, resp. pošle ale s velkým zpožděním. Je potřeba extra testovat staus ACK.
Otázka je, zda obvod opravdu zapíše data do registrů anebo je sice přijme, ale nezapíše a jen s velkým zpožděním pošle ACK.
Zkusil jsem takto postupně zapsat data do jednotlivých registrů a pak je přečíst. Při čtení dostávám samé 0xFF. To znamení že buďto se data předtím nezapsala, ale RTC poslal s velikým zpožděním ACK.
Anebo se sice data zapsala, ale jsou problémy se čtením v obvodu. Obvod odešle 0xFF, master (MCU) potvrdí ACK atd. Postupně tak do MCU postanu 0xFF ze všech 7 registrů. Otázka je jak zjistit, kde je v obvodu závada.
Tentýž program, ale s jiným DS1307 zapíchnutým do nepájivého pole zapíše data a přečte data bez problémů a to i bez testování statusu ACK.
Diskuze s hlupákem je ztráta času, protože hlupák vás stahne na jeho úroveň a umlátí vás jeho hloupými argumenty.
- Dumitru
- Příspěvky: 254
- Registrován: 11 pro 2015, 00:00
- Bydliště: Slovensko,Bratislava
- Kontaktovat uživatele:
Tiež celkom nerozumiem, ako si vysvetľujete veľké či malé oneskorenie ACK — a čo vlastne považujete za veľké oneskorenie, keďže ste master a určujete clock.
Sú tieto parametre dodržané? Viď foto
Co to přesně znamená? S jakým zpožděním? Potvrdí device slave adresu 0xD0 během devátého CLK ? Tam neexistuje něco jako zpoždění. CLK dává controller - 7 bitů, pak R/W flag a pak MUSÍ být potvrzeno. Zapsat bajt adresy registru, udělat Repeated Start a poslat 0xD1 - a device to opět MUSÍ potvrdit. A pak už jen controller čte data. Pokud jsou 0xFF, tak bych čekal, že device je odpojené od sběrnice. A controller dává ACK - komukoli, nebo jen naprázdno.RX-20 píše:Dobral jsem se pomocí analyzátoru k tomu, že po zápisu dat do RTC, obvod neposílá ACK, resp. pošle ale s velkým zpožděním. Je potřeba extra testovat staus ACK.
Kmitočet SCL je do 100kHz ?
Dá se udělat fotka z osciloskopu nebo analyzátoru ?
- RX-20
- Doporučuje se dohled moderátorů
- Příspěvky: 270
- Registrován: 30 čer 2024, 00:00
- Bydliště: střední Čechy u Koněpruských jeskyní
To "velký zpoždění", udělal jsem to tak, že jsem dal do programu cyklus který odešle zápis adresy a čeká na ACK. Když nedorazí obratem, je tam test stavu sběrnice. Když je test chybný, vše se opakuje v cyklu. Zjistil jsem že RTC obvod potřebuje min. 8, max 14 smyček, než z něj vyleze ACK.
Rychlost I2C je samozřejmě 100 kHz. Můžu nastavit i nižší, nezkoušel jsem to, ale myslím že by to asi nepomohlo.
Mám v úmyslu ten obvod vypájet a dát tam nový. Musím koupit nový, ale mne v GME, asi u Mousera. Až budou ve firmě něco objednávat, tak přidám obvod do objednávky a až přijde vyměním obvod na modulu.
Prohlížel jsem pull-up odpory na modulu. Jsou tam 4K7, ne 3K3 jak je ve schematu. Ty odpory jsou společný pro oba obvody na modulu, RTC i pro EEPROM.
Diskuze s hlupákem je ztráta času, protože hlupák vás stahne na jeho úroveň a umlátí vás jeho hloupými argumenty.
Pokud tenhle obvod neumí vyšší rychlosti a nereaguje a jiný umí a reaguje v pořádku (ta EEPROMka většinou chodí až do 1MHz), může to svědčit o nějakém prooblému se setup nebo hold časy na sběrnici.
- RX-20
- Doporučuje se dohled moderátorů
- Příspěvky: 270
- Registrován: 30 čer 2024, 00:00
- Bydliště: střední Čechy u Koněpruských jeskyní
Leckde se "radí" zkoušet měnit odpory na SCL a SDA. Doporučuje se od 10k do 1k a na začátku zlatý střed 4K7. Přesně tato hodnota 4K7 je na modulu. Když funguje EEPROM na modulu, měl by fungovat také RTC, který je o 1cm vedle.
Dneska dorazily Fedexem nové DC1307. Hned jsem vyměnil podezřelý RTC na modulu za nový. Modul s tímto novým RTC už funguje bez problémů i bez baterie a bez zkratu BAT k GND.
Objevil jsem ale novou věc:
U starého RTC 1307, který mám v DIP koupený v Německu v obchodě v Mnichově někdy okolo roku 2000 (možná i dřív), tak když do registru year nahraju 26, přečtu 26. Když tam nahraju 0, přečtu zase 0.
U nového SMD, který dnes přišel, když do registru year nahraju 0, přečtu 255. Když nahraju 26 a přečtu, dostanu 25.
Stejný program a různé výsledky. Týká se to výhradně registru year. Vše ostatní je stejné. Mám tři datasheety ktomuto obgvodu, z různých dob (Dallas, pak Maxim, pak ještě novější také Maxim), ale nikde o tomto není zmínka. Naštěstí tento problém se nechá snadno pořešit v programu.
Diskuze s hlupákem je ztráta času, protože hlupák vás stahne na jeho úroveň a umlátí vás jeho hloupými argumenty.