DS1302
Moderátori: psichac, Moderátori
Re: DS1302
A co takto si to naprogramovat sam?
Kam sa podela hrdost programamtorov, ze na vsetko potrebuju nejaku kniznicu?
Komunikacny protokol je pomerne jednoduchy, predpokladam ze pojde asi o 50 riadkov kodu. Mozeme sa na to pozriet spolocne, ak chces.
Kam sa podela hrdost programamtorov, ze na vsetko potrebuju nejaku kniznicu?
Komunikacny protokol je pomerne jednoduchy, predpokladam ze pojde asi o 50 riadkov kodu. Mozeme sa na to pozriet spolocne, ak chces.
0
Re: DS1302
ok, budem rad.
Len dopredu upozornim, ze s programovanim iba zacinam a zatial sa mi podarilo naprogramovat si teplomer IN/OUT s DS1621, ale ten je na i2c zbernici.
Problem je ze DS1302 nieje I2C, ale neaka ina zbernica. Asi microwire?
Len dopredu upozornim, ze s programovanim iba zacinam a zatial sa mi podarilo naprogramovat si teplomer IN/OUT s DS1621, ale ten je na i2c zbernici.
Problem je ze DS1302 nieje I2C, ale neaka ina zbernica. Asi microwire?
0
Re: DS1302
Ked uz mas zmaknute I2C, nemozes pouzit DS1307 alebo PCF8563, resp. podobne RTC s I2C zbernicou?
0
Re: DS1302
Jo ako ked vari Babica... ked nemas limetku, daj tam citron a ked nemas citron, drbni tam Fixinelu
OK, tak sa na to podme pozriet. Datasheet je tu http://pdfserv.maximintegrated.com/en/ds/DS1302.pdf a na strane 8 mas napisane ako urobit jednobytovy zapis alebo citanie. Treba manipulovat s tromi vodicmi.
CE ide do jednotky na zaciatku komunikacie. Potom treba urobit nejaky loop a bity vypluvat von po jednom, od najnizsieho bitu a vzdy potvrdit clockom.
teda nieco taketo
teda nastavis pin podla stavu najniziseho bitu v slove, odclockujes, a data si posunies doprava, aby si mal v dalsom kole pripraveny dalsi bit.
Toto je rutinka na vyslanie jedneho bajtu. Pouzijes ju takto
A mas poslane data do DS1302. Treba si este pozriet, ze prvy bit (resp. najnizsi bit) v prvom slove urcuje, ci ides prijimat alebo vysielat. Ak vysielas, robis to ako hore, ak prijimas, tak to urobis asi takto:
teda nastavis clock do jednotky, chvilku pockas, pozries si aky je stav data pinu. Ak je vysoky, tak data OR-ujes s hodnotou 0x80, cim vlastne nastavis najvyssi bit. Ak je nula, tak nic nerobis. Vzdy sa data zrotuju doprava, cim sa bity poposuvaju na spravne miesto.
Cele citanie jedneho bajtu bude potom vyzerat asi takto:
Tie ukazky zdrojakov su pisane v pseudo-c-nezmyslenom jazyku, ale snad budu pochopitelne. Prepisat to do basicu bude jednoduche ked to pochopis. Treba sa dobre pozriet do datasheetu.
Pisal som to z hlavy, takze chyby su vyhradene
pozri sa este sem:
http://www.dontronics.com/rtc.html
http://playground.arduino.cc/Main/DS1302
http://www.phanderson.com/stamp/ds1302_des.html
http://www.nomad.ee/micros/ds1302.html
OK, tak sa na to podme pozriet. Datasheet je tu http://pdfserv.maximintegrated.com/en/ds/DS1302.pdf a na strane 8 mas napisane ako urobit jednobytovy zapis alebo citanie. Treba manipulovat s tromi vodicmi.
CE ide do jednotky na zaciatku komunikacie. Potom treba urobit nejaky loop a bity vypluvat von po jednom, od najnizsieho bitu a vzdy potvrdit clockom.
teda nieco taketo
Kód: Vybrať všetko
for (i=0; i<8; i++)
{
if (data&0x01==0) DATA_PIN =0;
else DATA_PIN = 1;
CLOCK_PIN = 1;
delay_1us;
CLOCK_PIN = 0;
data = data >> 1;
}
Toto je rutinka na vyslanie jedneho bajtu. Pouzijes ju takto
Kód: Vybrať všetko
CE = 1;
posli_byte(adresa);
posli_byte(data);
CE = 0;
Kód: Vybrať všetko
data = 0;
nastav_data_pin_ako_vstupny;
for (i=0; i<8; i++)
{
CLOCK_PIN = 1;
delay_1us;
if (DATA_PIN==1) data = data|0x80;
CLOCK_PIN = 0;
data = data >> 1;
}
nastav_data_pin_ako_vystupny;
Cele citanie jedneho bajtu bude potom vyzerat asi takto:
Kód: Vybrať všetko
CE = 1;
posli_byte(adresa);
data = citaj_byte();
CE = 0;
Pisal som to z hlavy, takze chyby su vyhradene
pozri sa este sem:
http://www.dontronics.com/rtc.html
http://playground.arduino.cc/Main/DS1302
http://www.phanderson.com/stamp/ds1302_des.html
http://www.nomad.ee/micros/ds1302.html
0
- boraicho
- Ultimate člen
- Príspevky: 12417
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: DS1302
nema niekto funkčny program na henten obovod? diky
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
Re: DS1302
Na internete sú mraky toho. Otázka je, kde ten program má bežať, resp. k čomu to chceš pripojiť.
Napr. Arduino/AVR:
https://github.com/msparks/arduino-ds13 ... r/examples
Napr. Arduino/AVR:
https://github.com/msparks/arduino-ds13 ... r/examples
0
- boraicho
- Ultimate člen
- Príspevky: 12417
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: DS1302
Ako nakoniec mi CHATGPT vygeneroval kod, samozrejme nefunčkný ale s minimalnými chybami. čiže už to funguje , porovnal som si to s tymto https://github.com/oagml/watering-timer ... ster/rtc.c
funguje to všetko, ale robi to chybu a neviem prisť na to kde je problem.
sekundy to počita takto a minuty tiež, toto mam na výstupe čo mi hádže dysplaj.
1 2 3 4 5 6 7 8 9 16 17 18 19 20 21 22 23 24 25 32 33 34 35 36 37 38 39 40 41 48 49 50 51 52 53 54 55 56 57 64 65 66 67 68 69 70 71 72 73 80 81 82 83 84 85 86 87 88 89
je to 60 sekund ale prečo to preskakuje čisla?
funguje to všetko, ale robi to chybu a neviem prisť na to kde je problem.
sekundy to počita takto a minuty tiež, toto mam na výstupe čo mi hádže dysplaj.
1 2 3 4 5 6 7 8 9 16 17 18 19 20 21 22 23 24 25 32 33 34 35 36 37 38 39 40 41 48 49 50 51 52 53 54 55 56 57 64 65 66 67 68 69 70 71 72 73 80 81 82 83 84 85 86 87 88 89
je to 60 sekund ale prečo to preskakuje čisla?
Kód: Vybrať všetko
unsigned char rtc_read(unsigned char address) {
TRISB1=0;
unsigned char i;
uint8_t data = 0;
RTC_CE_PIN = 1; // Aktivuje RTC
RTC_CLK_PIN = 0;
__delay_us(5); // ?asové oneskorenie
for(i=0; i<=7; i++) {
RTC_IO_PIN = (uint8_t)(0x01 & (address >> i)); // Nastaví adresu
__delay_us(10); // ?asové oneskorenie
RTC_CLK_PIN = 1; // Hodinový signál
__delay_us(10); // ?asové oneskorenie
RTC_CLK_PIN = 0;
}
RTC_IO_PIN = 0;
TRISB1=1;
__delay_us(5); // ?asové oneskorenie
for(i=0; i<=7; i++) {
data |= (uint8_t)(RTC_IO_PIN << i); // ?íta dáta
__delay_us(5); // ?asové oneskorenie
RTC_CLK_PIN = 1; // Hodinový signál
__delay_us(10); // ?asové oneskorenie
RTC_CLK_PIN = 0;
__delay_us(5); // ?asové oneskorenie
}
RTC_CE_PIN = 0; // Deaktivuje RTC
return data;
}
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: DS1302
Pretože to má uložený čas ako dve BCD číslice. To znamená že po 09 dostaneš 10
čo je binárne 0001_0000
No a ty to vypisuješ desiatkovo a to je 16.
Vypisuj to ako hexa a bude to OK
čo je binárne 0001_0000
No a ty to vypisuješ desiatkovo a to je 16.
Vypisuj to ako hexa a bude to OK
1
1
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
- boraicho
- Ultimate člen
- Príspevky: 12417
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: DS1302
Vieš mi zhruba napísať ako to má vyzerať?
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
Re: DS1302
Z 8bit cisla odstranis horne 4 bity. A zostanu ti 1sekund.
Potom odstranis z 8bit cisla spodne 4 bity, vykonas posun vvpravo o 4 miesta a dostanes 10sekund
Potom odstranis z 8bit cisla spodne 4 bity, vykonas posun vvpravo o 4 miesta a dostanes 10sekund
1
1
- boraicho
- Ultimate člen
- Príspevky: 12417
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: DS1302
dakujem atlan, ked som tvoju vetu hodil do chatgpt tak to vygenerovalo tento kod ktorý funguje a hodiny mi idu ako maju
Kód: Vybrať všetko
unsigned char units = uloz_hodnotu & 0x0F; // získa jednotky sekúnd
unsigned char tens = (uloz_hodnotu >> 4) & 0x0F; // získa desiatky sekúnd
unsigned char seconds = tens * 10 + units; // spočíta celkový počet sekúnd
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: DS1302
Hmm, otázka je prečo si sa to tej UI nepýtal rovno. Všetko čo si sa pýtal tu si sa mohol pýtať jej.
1
1
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: DS1302
Kedysi dávno, keď som chcel použiť DS3231, v podstate podobný čip, preštudoval so si najprv datasheet. Všetko je tam napísané, HW, princíp funkcie, registre, práca so zbernicou, atď. To už som ale vedel veci okolo AVR. Trvalo to ale pár dní. Vtedy to bola novinka a neboli k tomu knižnice, voľne dostupné na nete.
Dnes ti dá AI na všetko odpoveď hneď, už ani gogliť nemusíš, alebo ísť na GitHub. Začínam vážne pochybovať, či to ide dobrým smerom.
Dnes ti dá AI na všetko odpoveď hneď, už ani gogliť nemusíš, alebo ísť na GitHub. Začínam vážne pochybovať, či to ide dobrým smerom.
0
- boraicho
- Ultimate člen
- Príspevky: 12417
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: DS1302
niesom programator, a neprogramujem, som v zahraniči, a napadlo ma vziať RTC modul z poličky a vyvojovu dosku s PIC16F1939 reku nech sa nenudim po večeroch. to je cele.
Momentálne bojujem s teplotnym čidlom DS18b20 hažde mi to na vystupe divne čísla, neviem prečo. funguje lebo meni čísla na vystupe ked sa čidla dotknem lenže niekde je zrada hažde to -17000 a take bludy.
na githube neviem nič funkčne najsť dokonca aj tie kody ktore na githube som našiel s tym DS1302 , neobsahuju ten prevod čo som tu naposledy daval tak nechapem ako im to može fungovať.
atlan ano maš pravdu, je to na dve veci, ale trošku pomože, a nie nikdy nezačnem vážne programovať. Práca za pc nieje moja. Raz som pracoval za PC ked som kreslil 2D vykresy pre laser, ale vydržal som 2 tyzdne, fyzicky som to nezvladal tu prácu. Strašne som zaspaval.
Momentálne bojujem s teplotnym čidlom DS18b20 hažde mi to na vystupe divne čísla, neviem prečo. funguje lebo meni čísla na vystupe ked sa čidla dotknem lenže niekde je zrada hažde to -17000 a take bludy.
jasne že pytal, lenže je hlupa a generuje nefunkčne kody. možno ak by som mal tu platenu verziu ....Hmm, otázka je prečo si sa to tej UI nepýtal rovno. Všetko čo si sa pýtal tu si sa mohol pýtať jej.
na githube neviem nič funkčne najsť dokonca aj tie kody ktore na githube som našiel s tym DS1302 , neobsahuju ten prevod čo som tu naposledy daval tak nechapem ako im to može fungovať.
atlan ano maš pravdu, je to na dve veci, ale trošku pomože, a nie nikdy nezačnem vážne programovať. Práca za pc nieje moja. Raz som pracoval za PC ked som kreslil 2D vykresy pre laser, ale vydržal som 2 tyzdne, fyzicky som to nezvladal tu prácu. Strašne som zaspaval.
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
Re: DS1302
DS18B20, k tomu môžem napísať to isté ako som písal k DS3231. V datatsheete je dokonca funkčný diagram. Podľa neho som si napísal knižnicu. V čase, keď som to robil, našiel som jediný dostupný kód od PJRC.com a ten bol chybný.
Ja s PIC nerobím ale tu som našiel niečo:
https://github.com/simonbarker/pic-libr ... /DS18B20.c
V princípe je to to ale podobné na všetkých platformách.
Mimochodom, až 9. príspevok od môjho si napísal informáciu o aký MCU sa jedná.
To máš nejakú originál vývojovú dosku?
Ja s PIC nerobím ale tu som našiel niečo:
https://github.com/simonbarker/pic-libr ... /DS18B20.c
V princípe je to to ale podobné na všetkých platformách.
Mimochodom, až 9. príspevok od môjho si napísal informáciu o aký MCU sa jedná.
To máš nejakú originál vývojovú dosku?
0
- boraicho
- Ultimate člen
- Príspevky: 12417
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: DS1302
Aky mcu je použiťý nieje doležité, či už tak či onak, program je vždy ten istý.
Ano je to doska ktorú som robil dáávno.
https://svetelektro.com/phpbb/?w3=dmlld ... 90PTMzNzgy
idem pozrieť.
teplotu čidlo meria, ale neviem dostať rozumny vystup.
toto mam momentálne ale je to zle. ja to neviem prepisať do programatorskeho jazyka.
hladam aj po tých knižniciach napriklad čo si poslal, ako čítaju teplotu....
Ano je to doska ktorú som robil dáávno.
https://svetelektro.com/phpbb/?w3=dmlld ... 90PTMzNzgy
idem pozrieť.
teplotu čidlo meria, ale neviem dostať rozumny vystup.
toto mam momentálne ale je to zle. ja to neviem prepisať do programatorskeho jazyka.
hladam aj po tých knižniciach napriklad čo si poslal, ako čítaju teplotu....
Kód: Vybrať všetko
temp = ds18b20_read_byte(); // Prečítaj menej významný bajt teploty
temp |= ((unsigned int) ds18b20_read_byte() << 8); // Prečítaj viac významný bajt teploty
if (temp & 0x8000) { // Ak je nastavený bit znamienka
temp = (~temp) + 1; // Doplňková hodnota pre záporné číslo
sign = -1;
}
temperature = (float) temp / 16.0 * sign; // Výpočet teploty
return temperature;
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS