Sari la conținut
ELFORUM - Forumul electronistilor

pic 16f628a si eeprom 24c16 folosind soft i2c


Vizitator Popescu Marius

Postări Recomandate

Vizitator Popescu Marius

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. :sparge: (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
  • Răspunsuri 14
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • puiu

    3

  • kit

    2

  • bodo_b

    2

  • Elef

    1

Top autori în acest subiect

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

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

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

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

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

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. :limb:

Link spre comentariu
Vizitator Popescu Marius

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

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

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