Vizitator Popescu Marius Postat August 30, 2010 Partajează Postat August 30, 2010 Salutare! De cateva zile tot incerc ceva fara rezultat:sa trimit date din PIC catre eeprom folosind i2c software si nu-i dau de cap. (folosesc mikroc pro)Aceasta e o varianta dintre multe altele care nu vrea sa mearga si pace :sbit soft_i2c_scl at ra1_bit;sbit soft_i2c_sda at ra0_bit;sbit soft_i2c_scl_direction at trisa1_bit;sbit soft_i2c_sda_direction at trisa0_bit;int i;void main() {trisb=0; cmcon=7; OPTION_REG.f7=0; portb=0; Soft_I2C_Init; soft_i2c_start(); soft_i2c_write(0xa0); soft_i2c_write(1); soft_i2c_write(63); soft_i2c_start; soft_i2c_write(161); i=Soft_I2C_Read(0);portb=i; soft_i2c_stop(); }Eu vreau sa scriu la adresa 1 a memoriei valoarea 63,apoi s-o citesc din memorie si s-o trimit pe portb.Am folosit debugger-ul si observ ca nu vrea sa treaca de prima scriere(soft_i2c_write(0xa0) );Astept cu interes sugestiile dvs,chiar sunt curios de ce naiba nu merge.Cu respect,Marius! Link spre comentariu
Vizitator Popescu Marius Postat August 30, 2010 Partajează Postat August 30, 2010 Ignorati OPTION_REG.f7=0; Link spre comentariu
kit Postat August 31, 2010 Partajează Postat August 31, 2010 habar-n-am mikroc, dar..din cate mi se pare mie, adresa pentru aceasta memorie este un word si nu un char. in cazul asta, daca vrei sa transmiti adresa si apoi data, ar veni cam asa:Soft_I2C_Init;soft_i2c_start();soft_i2c_write(0xa0);soft_i2c_write((unsigned char)(adresa>>8));soft_i2c_write((unsigned char)(adresa&0x00ff));soft_i2c_write(63);cam asa cred eu ca scrii la "adresa" valoarea 63.mai mult poti sa vezi la postul meu (tot despre eeprom), unde ai si ceva date despre partea hard.bafta!LE:totusi, 16f628a nu are nativ I2C. asa ca ce ai tu este o tratare soft a protocolului I2C. o frecventa a clock-ului nu se seteaza de nicaieri? Ma gandeam ca in acel Soft_I2C_Init s-ar rezolva toata treaba cu initializarea. din cate stiu eu memoria asta se initializeaza cu niste parametri, o data, iar mai apoi ea functioneaza pana-n 400kHz. poate de aia nu trece de soft_i2c_write(0xa0);(parca asa era, nu?)sau poate ai ceva hard gresit, la mine nu aveam pullup pe SCL.LEE:verifica si daca soft_i2c_write() face ceva de genul AckPolling(0xA0), sau daca ai o functie asemanatoare pe care s-o pui dupa ea.... ceva de genul asta este in C18. daca nu, macar baga un delay dupa fiecare scriere. de asemenea, functia returneaza ceva, cu siguranta. probabil 0x00 este daca totul a decurs ok, restul valorilor ar trebui sa fie erori, verifica documentatia. Link spre comentariu
Vizitator Popescu Marius Postat August 31, 2010 Partajează Postat August 31, 2010 Cu "soft_i2c_write(0xao)" trimit adresa eepromului (0,adica am a0..a2 =0) si comanda "scriere".Aici cand folosesc debugger-ul ramane in bucla si nu mai iese.Nu apuc sa setez adresa din eeprom.Sunt la serviciu,,diseara o sa citesc si mai atent ce mi-ati scris dle Kit si sa incerc.Frecventa este setata din compilator de 20khz.Pull-up am pus,2 rezistori,cate unul pe sda si scl de 10k. Link spre comentariu
kit Postat August 31, 2010 Partajează Postat August 31, 2010 chestia cu dle kit mi-a placut cel mai tare... trebuie sa recunosc faptul ca am citit acest topic cam neatent, deoarece se refera la mikroc (cu care eu nu lucrez). dar... observ cuvantul debuger aici, si ma intreb daca este unul icd sau simulator. orice ar fi, fiind un debuger se opreste in locul de unde nu trece, trebuie sa-i dai stop si sa vezi unde este gatuirea (la nivel de instructiune si nu la nivel de functie). daca folosesti simulatorul se blocheaza, pentru ca, probabil, asteapta intoarcerea unei valori, iar pic-ul nefiind conectat fizic n-are cine sa raspunda. ai fost tare zgarcit cu informatiile, asa ca... mai multe sunt la: http://www.mikroe.com/esupport/index.ph ... 6&nav=0,63 aici gasesti si limitarile impuse de aceasta biblioteca de functii bafta! Link spre comentariu
bodo_b Postat August 31, 2010 Partajează Postat August 31, 2010 void main() {trisb=0; cmcon=7; OPTION_REG.f7=0;portb=0;Soft_I2C_Init;soft_i2c_start();Prima gresala pe care o vad este la initializare ai uitat sa pui la sfarsit "()" pentru functie. A doua chestie, dupa initializare trebuie sa chemi functia Soft_I2C_Config(&port, pin SCL, pin SDA) si nu cum ai declarat tu la inceputul programului.&port = portul ce contine pinii pentru clock si dateSCL = pinul care va da clock-ulSDA = pinul folosit pentru comunicatie (date)Incearca si asa. Bafta ! Link spre comentariu
Vizitator Popescu Marius Postat August 31, 2010 Partajează Postat August 31, 2010 bobo_b- Chestia cu soft_i2c_config(&port,scl,sda) este valabila pt variantele precedente ale mikroc,la varianta PRO este folosita chestia cu "sbit...at ra1_bit" etc.Paranteza este pusa in program,aici am uitat de ea (greseala de copy-paste )Kit-Sper ca nu a fost cu suparare adresare cu "dl kit". Nici practic nu merge jucaria,nu doar ruland pas cu pas in mikroc.Ca sa fiu mai exact , am conectat un pic si un eeprom astfel:scl la ra1,sda la ra0,am pus 2 x pull-up,iar pe portb sunt 8 leduri,eu doresc sa trimit datele in memorie,apoi sa le citesc ,si valoarea citita sa o "afisez" cu ledurile.Azi am fost ocupat toata ziua cu serviciul si alte activitati,nu am apucat sa mai "bibilesc" ceva,maine mai incerc....oricum nu ma las pana nu imi iese,cu ce mai stiu eu,cu sfaturile dvs(pt care tin sa va multumesc) nu se poate sa nu-i dau de cap... Link spre comentariu
bodo_b Postat August 31, 2010 Partajează Postat August 31, 2010 Chestia cu Config am incercat-o in mikroC PRO si anu a mers deci s-ar putea sa ai dreptate, Marius. Fi atent ca sub titlul de la postul tau este unul Problema F877 24c02 si I2C sau ceva de genul postat de mine. Si eu m-am chinuit la fel. Nu merge in ce sens: simulezi intr-un program sau ai realizat montajul practic ? Citeste si unde am postat eu poate este aceeasi problema. Link spre comentariu
Vizitator Popescu Marius Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 Nu merge nici practic nici simulat.Dupa amiaza incerc sa mai fac cate ceva...poate,poate. Link spre comentariu
puiu Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 1. Nu lucrez in microC, dar am o intrebare: Cum utilizezi transmisia I2C la PIC 16F628A care nu are aceasta transmisie? sau n-am vazut-o in datasheetul picului? Link spre comentariu
Elef Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 Daca nu exista implentare hardware se poate face software si realtiv usor un master sau sclav de i2c. Link spre comentariu
Vizitator Popescu Marius Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 Puiu- Folosesc i2c soft ,care ar trebui sa mearga cu orice uC,chiar daca are sau nu i2c. Link spre comentariu
puiu Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 1. Daca folosesti softul pentru I2C nu trebuie sa ai niste timpi cit sta in unu sau in zero linia si trebuie sa ai o anumita ordine in care vin SDA si SLC. Le respecti? Link spre comentariu
Vizitator Popescu Marius Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 Trebuie sa le respecte mikroc-ul ,nu eu,eu dau comenzile,de exemplu la "soft_i2c_init()" mikroc-ul trebuie sa genereze codul pt a initializa comunicarea prin protocolul i2c si asa mai departe. Link spre comentariu
puiu Postat Septembrie 2, 2010 Partajează Postat Septembrie 2, 2010 1.Esti sigur ca microC da acele comenzi cand nu ai implementata interfata I2C? Ar trebui sa mearga simularea, daca microC da acele comenzi! Inteleg ca tie nu-ti merge nici simularea?2. Eu lucrez in limbajul de asamblare sub MPLAB si nu ma stiu in microC, dar merg pe similitudine. 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