ohamoha Postat Septembrie 7, 2012 Partajează Postat Septembrie 7, 2012 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
one Postat Septembrie 7, 2012 Partajează Postat Septembrie 7, 2012 Cauta DS1302 sample code pe situl Microchip... sau aici... http://www.microchipc.com/ Link spre comentariu
alex_hobeanu Postat Septembrie 7, 2012 Partajează Postat Septembrie 7, 2012 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
Liviu M Postat Septembrie 7, 2012 Partajează Postat Septembrie 7, 2012 Exista PIC-uri cu port I2C implementat hardware. Nu potu folosi unul? Link spre comentariu
MatyC Postat Septembrie 7, 2012 Partajează Postat Septembrie 7, 2012 Din moment ce ai o interfata hardware/software definita tu va trebui sa respecti conditiile impuse de protocolul hardware/software. Ce se afla in spate este alta poveste. Link spre comentariu
ohamoha Postat Septembrie 7, 2012 Autor Partajează Postat Septembrie 7, 2012 Am port I2C dar n-am reusit sa-l folosesc. Imi da ceva erori de timing (in Proteus).Multumesc mult de indicatii. Link spre comentariu
Liviu M Postat Septembrie 8, 2012 Partajează Postat Septembrie 8, 2012 Pai pune si tu codul aici (daca nu-i secret), ca poate vede cineva ceva in neregula. Link spre comentariu
alex_hobeanu Postat Septembrie 8, 2012 Partajează Postat Septembrie 8, 2012 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
Liviu M Postat Septembrie 8, 2012 Partajează Postat Septembrie 8, 2012 Se pare ca eu am fost ceva mai norocos, am reusit sa conving un 16F877 sa vorbeasca cu cateva alte cipuri prin i2c. Link spre comentariu
alex_hobeanu Postat Septembrie 8, 2012 Partajează Postat Septembrie 8, 2012 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
ohamoha Postat Septembrie 8, 2012 Autor Partajează Postat Septembrie 8, 2012 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
Liviu M Postat Septembrie 8, 2012 Partajează Postat Septembrie 8, 2012 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
ohamoha Postat Septembrie 9, 2012 Autor Partajează Postat Septembrie 9, 2012 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
MatyC Postat Septembrie 17, 2012 Partajează Postat Septembrie 17, 2012 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum