Stránka 1 z 1
modul s DS1307
Napsal: 04 úno 2026, 08:20
od RX-20
Mám obvod DS1307. Zastrčím ho do nepájivého pole, připojím napájení a dráty SDA, SDL na mikropočítač Microchip. Můj program s obvodem funguje. Použil jsem obvod již mnohokrát s minimálně 8 různými Microchip MCU.
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.
Napsal: 04 úno 2026, 09:37
od Dumitru
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
Napsal: 04 úno 2026, 12:28
od Cowley
A co Adresa I2C daného RTC?
Protáhnout to I2C skenerem, aby tam byla 0x68?
Napsal: 04 úno 2026, 13:09
od RX-20
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
Mělo by to fungovat, ale nefunguje.
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.
Cowley:
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.
Napsal: 04 úno 2026, 14:33
od lesana87
Datasheet: If a backup supply is not required, VBAT must be grounded.
Napsal: 04 úno 2026, 17:06
od RX-20
Pin Vbat je vyveden na konektor, viz schema nahoře. Na něm, je 0 Volt. I když ten pin uzemním na GND, nezmění se nic. Uzemnění má smysl zřejmě z důvodu zamezení rušení na pinu VBat, protože podle schematu je z Vbat k GND odpor 1M5. Zkratování Vbat ke GND problém s nedostupností obvodu přes I2C neřeší.
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.
Napsal: 05 úno 2026, 12:18
od RX-20
Vrátil jsem se dneska k tomu modulu z GME. Napadlo mne zjistit, zda na něm funguje ta EEPROMka, to je druhý obvod. Zjistil jsem, že funguje. Dá se do ní zapisovat i číst, dokonce při 400kHz.
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.
Napsal: 05 úno 2026, 12:39
od Dumitru
V tom MCU používate hardvérové I2C, alebo máte nejakú softvérovú implementáciu? Z toho, čo píšete o testovaní/netestovaní ACK, mi skôr vychádza, že ide o softvérovú implementáciu.
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
Napsal: 05 úno 2026, 14:27
od Zaky
Zcela ideální by se mi jevilo se přímo na signály podívat digitálním osciloskopem. Všelijaké analyzátory nemám dvakrát v oblibě, na osciloskopu je vidět všechno a zde je komunikace jednoduchá.
Napsal: 05 úno 2026, 17:04
od vaclavpe
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.
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.
Kmitočet SCL je do 100kHz ?
Dá se udělat fotka z osciloskopu nebo analyzátoru ?
Napsal: 05 úno 2026, 21:41
od RX-20
MCU používá softwarovou implementaci I2C. Nemám rád ty softwarový řešení. Ale na MCU tonení. Zkoušel jsem několik různých MCU, od Microchip, také Texas a adaptér USB-I2C. Výsledky jsu stejný.
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.
Napsal: 05 úno 2026, 22:38
od vaclavpe
Podle popisu to vypadá OK, ale stejně bych nejraději viděl vlnky z osciloskopu. Nemůžou být nějaké časy na sběrnici na limitu ?
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.
Napsal: 10 úno 2026, 18:44
od RX-20
DC1307 podle datasheetu a informací na zahraničních diskuzních forech umí jen 100kHz.
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.