Sari la conținut
ELFORUM - Forumul electronistilor

Frecventa RTC DS1302


ohamoha

Postări Recomandate

Salut,Am gasit acest RTC pe care vreau sa-l folosesc intr-un proiect. In documentatie scrie ca foloseste "Simple 3-Wire Interface" adica ceva serial. Am facut o simulare in Proteus si merge cum trebuie dar inca nu am cumparat piesele asa ca am o dilema. Ca sa scriu un bit fac ceva de stilul:RTC_IO=1;RTC_CLK=0;RTC_CLK=1;Fara niciun delay intre comenzi. Avand experienta unui EEPROM I2C stiu ca acestea au nevoie de un delay, scrie si in documentatie 100Khz sau 400Khz in functie de model. E posibil ca RTC-ul sa raspunda fara probleme la frecventa PIC-ului (8Mhz.)?Multam!

Link spre comentariu
  • Răspunsuri 13
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    4

  • ohamoha

    4

  • alex_hobeanu

    3

  • MatyC

    2

Top autori în acest subiect

Exista un tabel in datasheet-ul lui DS1302 cu timpii (ac electrical characteristics) unde iti spune ca frecventa maxima pentru semnalul CLK este 2 MHz si ca trebuie sa ai un palier minim de 250 nS atat pe low cat si pe high. Un PIC are nevoie de 4 cicluri de ceas pentru o instructiune deci daca faci rtc-clk = 0 ; rtc-clk = 1 inseamna ca vei obtine un semnal de 1 MHz daca folosesti un cristal de 8 Mhz.Cred ca este mai simplu/sigur sa folosesti niste intarzieri suplimentare sau un cristal cu frecventa mai mica.

Link spre comentariu

DS1302 nu este i2c, este un protocol asemanator dar nu are bitul de acknowledge si nici sistemul de adrese al i2c. Varianta i2c a acestui chip este DS1307 pe care eu l-am folosit de mai multe ori. Problema lui este ca are o abatere destul de mare a oscilatorului si necesita o corectie periodica din software iar daca functioneaza din bateria de back-up eroarea este diferita si lucrurile se complica.Din punctul meu de vedere folosirea modului hardware (MSSP) este mai dificila pentru un incepator si mai greu de diagnosticat daca nu merge din prima. Am avut probleme cu un F877 la un moment dat si dupa ce am pierdut o gramada de timp incercand sa descopar ce nu mergea bine am renuntat sa mai folosesc MSSP pentru i2c daca am loc si timp pentru protocol software.Posteaza codul si te va ajuta cineva sa o scoti la capat.

Link spre comentariu

Si eu am reusit dar se intampla ceva ciudat, cred ca de la bitul de acknowledge se desincroniza la un moment comunicatia si tot ce citeam era deplasat cu un bit... am renuntat si am folosit software. Erau 2 MAX6953 si un DS1307 pe bus-ul i2c dar la momentul acela nu am avut prea multa radbare sa studiez unde aparea problema.

Link spre comentariu

In legatura cu sursa I2C care nu merge.Eu ca un adevarat incepator folosesc MikroC, astfel ca am incercat cu librarile acestuia. Am simulat in Proteus un PIC18F4620 cu un EEPROM 24C02C. Cod nu prea am ce sa pun, eroarea apare de la prima linie:I2C1_Init(100000);Proteus zice ca:[i2CMEM TIMING] Start hold time violated. Start was at 49.38341u, hold time is 600.n, min hold time is 125.n.Initial am luat datasheet-ul PIC-ului si am zis ca voi accesa direct MSSP-ul fara librarii intermediare, dar asa cum zicea cineva mai sus, mi s-a parut complicat si m-am pierdut in detalii.

Link spre comentariu

Eu mi-am scris singur functiile necesare. Probabil ca se puteau scrie mai bine, da' important e ca mi-au functionat.

Cam asa am facut pentru un 18F452.

Partea de initializare arata cam asa:

// i2c: dezactiveaza portul MSS si activeaza modul i2c master //    SSPCON = 0b00100000; //enable MSS    SSPCON1 = 0b00001000; // configure the i2c mode    SSPCON2 = 0b00000000;    SSPADD = 0x31;   // i2c clock frequency = 100 kHz.

Cat despre functiile propriuzise sunt in fisierul atasat.

Link spre comentariu

Salut,

Multam de exemplu. Am tot invartit libraria atasata, dar n-am reusit s-o fac sa mearga corect. Intorcea niste valori, nici 0x00 nici 0xFF, ceva random. Probabil a fost ceva ce n-am luat in calcul.

Anyway, plecand de la exemplul tau si folosind alte exemple pe care le-am gasit pe net, am reusit sa pun cap la cap o librarie pentru MikroC care merge bine in Proteus. Chestia asta ma bucura destul de tare pentru ca librariile soft le foloseam la 20Khz, pe cand asta hardware merge la 400Khz ceea ce ma ajuta f mult in aplicatie.

Atasez mai jos ce-am facut si eu poate o mai avea cineva nevoie.

Merci inca o data de ajutor&sfaturi.

 

In main():

    //PIC18F4620 si EEPROM 24LC256    I2CInit();    I2CStart();     I2CSend(0xA0);             // send byte via I2C  (device address + W)     I2CSend(0);                // send byte (address of EEPROM location)     I2CSend(1);                // send byte (address of EEPROM location)     I2CSend('A');             // send data (data to be written)     I2CSend('D');             // send data (data to be written)     I2CSend('I');             // send data (data to be written)     I2CStop();              // issue I2C stop signal     Delay_ms(100);     I2CStart();              // issue I2C start signal     I2CSend(0xA0);             // send byte via I2C  (device address + W)     I2CSend(0);                // send byte (data address)     I2CSend(1);                // send byte (data address)     I2CRestart();     // issue I2C signal repeated start     I2CSend(0xA1);             // send byte (device address + R)     d1 = i2cRead();    // Read the data     I2CAck();     d2 = i2cRead();       // Read the data     I2CAck();     d3 = i2cRead();       // Read the data (NO acknowledge)     I2CNak();     I2CStop();
Link spre comentariu

Ca idee, DS1302 nu foloseste interfatare I2C bus sau SPI. Are cam aceiasi interfatare intalnita la memoriile din seria 93 (93C46 spre ex.) si era des intalnita vreo acum 20 ani. Ulterior sa impus I2C bus si derivatul sau SPI si altele. Interfata pe 3 fire se mai gaseste sub numele Microwire (daca stiu bine). Prin google se gasesc librarii sau aplicatii concrete, un exemplu fiind discutia de pe http://www.edaboard.com/thread20102.html.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări