Strana 1 z 2
DS1302
Napísané: 28 Dec 2012, 19:12
od používateľa fkvrtak
chcem si spravit hodiny v Bascome s atmegou8 a DS1302.
problem je ze v bascome nemam ds1302clock.lib
neviete kde by som ho stiahol, alebo poradit ako dalej bez tohto lib.
Dakujem
Re: DS1302
Napísané: 28 Dec 2012, 19:23
od používateľa jaromir
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.
Re: DS1302
Napísané: 28 Dec 2012, 19:36
od používateľa fkvrtak
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?
Re: DS1302
Napísané: 28 Dec 2012, 19:39
od používateľa jaromir
Ked uz mas zmaknute I2C, nemozes pouzit DS1307 alebo PCF8563, resp. podobne RTC s I2C zbernicou?
Re: DS1302
Napísané: 28 Dec 2012, 19:41
od používateľa fkvrtak
no ked sa mi nepodarilo zohnat DS1307 tak som vzal DS1302
Re: DS1302
Napísané: 28 Dec 2012, 19:58
od používateľa jaromir
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
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;
}
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
Kód: Vybrať všetko
CE = 1;
posli_byte(adresa);
posli_byte(data);
CE = 0;
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:
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;
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:
Kód: Vybrať všetko
CE = 1;
posli_byte(adresa);
data = citaj_byte();
CE = 0;
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
Re: DS1302
Napísané: 28 Dec 2012, 20:56
od používateľa Pega
Re: DS1302
Napísané: 08 Feb 2024, 21:51
od používateľa boraicho
nema niekto funkčny program na henten obovod? diky
Re: DS1302
Napísané: 09 Feb 2024, 07:13
od používateľa budvar10
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
Re: DS1302
Napísané: 09 Feb 2024, 22:42
od používateľa boraicho
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?
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;
}
Re: DS1302
Napísané: 10 Feb 2024, 00:13
od používateľa peterple
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
Re: DS1302
Napísané: 10 Feb 2024, 07:39
od používateľa boraicho
Vieš mi zhruba napísať ako to má vyzerať?
Re: DS1302
Napísané: 10 Feb 2024, 08:24
od používateľa Atlan
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
Re: DS1302
Napísané: 10 Feb 2024, 16:08
od používateľa boraicho
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
Re: DS1302
Napísané: 10 Feb 2024, 19:16
od používateľa peterple
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.
Re: DS1302
Napísané: 10 Feb 2024, 19:45
od používateľa budvar10
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.
Re: DS1302
Napísané: 10 Feb 2024, 20:44
od používateľa Atlan
Az zacnes nieco vazne programovat ta ti gpt bude na dve veci
Re: DS1302
Napísané: 11 Feb 2024, 09:36
od používateľa boraicho
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.
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.
jasne že pytal, lenže je hlupa
a generuje nefunkčne kody. možno ak by som mal tu platenu verziu ....
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.
Re: DS1302
Napísané: 11 Feb 2024, 10:15
od používateľa budvar10
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?
Re: DS1302
Napísané: 11 Feb 2024, 10:41
od používateľa boraicho
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....
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;