Sari la conținut
ELFORUM - Forumul electronistilor

problema F877 I2C si 24C02


bodo_b

Postări Recomandate

Va salut !Am si eu o problema. Am realizat schema (atasata) in ISIS, pentru simulare si am scris si un programel dar nu am avut succes. Initial scrisesem programelul ca atunci cand apas pe un buton PIC-ul sa scrie in memoria 24C02 ceva ( byte-ul 10101010 ca test) si apoi cand apas pe alt buton sa imi citeasca de la adresa la care am scris byte-ul respectiv si sa imi afiseze la portul B sa vad ca functioneaza. Ei bine ... nu s-a intamplat nimic asa ca am folosit direct exemplul din manualul de la mikroC. Acelasi rezultat: nimic :cry: . Unde am gresit ?programelul:void main(){ PORTB = 0; TRISB = 0; I2C1_Init(100000); I2C1_Start(); I2C1_Wr(0xA0); I2C1_Wr(1); I2C1_Wr(255); I2C1_Stop; Delay_ms(100); I2C1_Start(); I2C1_Wr(0xA0); I2C1_Wr(1); I2C1_Repeated_Start(); I2C1_Wr(0xA1); PORTB = I2C1_Rd(0); I2C1_Stop; Delay_ms(5000); }Delay-ul de la sfarsit l-am folosit pentru a putea vizualiza rezultatul d'255' pe portul B. (am modificat fata de cum facusem initial b'10101010').Adresa memoriei este: 1010 XXX Y unde bitii XXX nu conteaza ce sunt -> i-am pus 0, iar Y este 0 sau 1 in functie de ce vreau sa fac sa scriu sau sa citesc.

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

Top autori în acest subiect

  • bodo_b

    10

  • francezu

    5

  • Rabulea Sergiu

    3

  • Stefan

    1

Top autori în acest subiect

Pic-ul este configurat corect in simulator ? Ma refer la frecventa oscilatorului si la cuvantul de configurare. Nu programez in C, dar codul postat este destul de simplu, nu prea are ce sa fie gresit, mai ales ca se folosesc rutine predefinite. Isis are un debugger I2C interesant, incearca sa monitorizezi cu acesta bus-ul in cauza.

Link spre comentariu

Nu am folosit niciodata debugger-ul din Isis. In rest, PIC-ul este configurat ok atat la frecventa de lucru cat si la cuvantul de configurare.Codul este simplu si asta ma scoate din minti. Nu stiu de ce nu merge. :cry:

Link spre comentariu

Ai setat corect frecventa microcontrolerului in simulare? Acesta nu depinde de quartz-ul ce l-ai pus (poate simula si fara), trebuie sa ii spui in proprietati ce frecventa de clock are.Poti vedea codul ce l-ai scris in mod debug?Il poti rula linie cu linie?Daca raspunsul la cele 2 intrebari de mai sus este DA, atunci daca pui pe pauza simularea dupa ce a executat rutina de scriere in memorie si dai click dreapta pe memorie ai o optiune ca sa vezi ce contine memoria.

I2C1_Init(100000);I2C1_Start(); = semnal de start pe busI2C1_Wr(0xA0); = adresa memorieiI2C1_Wr(1); = adresa unde sa scrieI2C1_Wr(255); = variabila pe care sa o scrieI2C1_Stop; = semnal de stop pe bus

Spune-mi te rog daca ce am scris eu dupa semnul "=" este adevarat.
Link spre comentariu

Ai setat corect frecventa microcontrolerului in simulare? Acesta nu depinde de quartz-ul ce l-ai pus (poate simula si fara), trebuie sa ii spui in proprietati ce frecventa de clock are.Poti vedea codul ce l-ai scris in mod debug?Il poti rula linie cu linie?Daca raspunsul la cele 2 intrebari de mai sus este DA, atunci daca pui pe pauza simularea dupa ce a executat rutina de scriere in memorie si dai click dreapta pe memorie ai o optiune ca sa vezi ce contine memoria.

I2C1_Init(100000);I2C1_Start(); = semnal de start pe busI2C1_Wr(0xA0); = adresa memorieiI2C1_Wr(1); = adresa unde sa scrieI2C1_Wr(255); = variabila pe care sa o scrieI2C1_Stop; = semnal de stop pe bus

Spune-mi te rog daca ce am scris eu dupa semnul "=" este adevarat.
Da, este corect.L.E: Nu stiu sa folosesc debugger-ul; Raspunsul la primele 2 intrebari este DA.
Link spre comentariu

Eu folosesc mikroBasic, dar banuiesc ca si microC are aceleasi facilitati. In meniul Tools-> Options(F12) la sectiunea Output Settings bifezi "Generate COFF file". In Isis in modelul uC-ului incarci in loc de .hex fisierul .cof generat de compliator. In felul acesta poti simula la nivel de cod sursa folosind comenzile din meniul Debug.

Link spre comentariu

Uite optiunile din MikroC. Dupa parerea mea codul este ok in ceea ce priveste secventa operatiunilor. Schema mi se pare ok. O sa mai fac o incercare dar de data asta o sa folosesc F887. Ma gandesc ca o fi ceva in neregula cu F877 din Isis la fel cum mai avea probleme cu un display grafic. Nu a mai incercat nimeni sa faca o simulare de genul ?L.E: Am incercat si cu F887 la fel, am incercat si cu PIC18F452 ca in exemplul din manualul de la MikroC la fel, nici un rezultat. Nu imi pica fisa.

Link spre comentariu

Versiunea MikroC PRO for PIC are facilitatea de a genera fisiere COFF, scrie pe site la mikroe; probabil versiunea folosita de tine, daca este una mai veche nu are aceasta optiune.

Link spre comentariu

... nu stiu ce sa ii fac. Nu are nimeni un exemplu de cod care sa functioneze sau sa mai fi lucrat cu asa ceva ? L-am sucit in fel si chip si tot nu merge. Am oprit si pinii de intrari analogice, comparatoare ... nimic. Am setat si PORTC ca iesire ... nimic. Am folosit exact picul din exemplul manualului MikroC si codul de acolo si tot nu merge :bataie . De doua zile tot caut pe net si ce gasesc este aproape identic cu ce am scris eu acolo (culmea, lor le merge). Ma gandesc sa realizez practic, pe o placa de test, schema ... o fi un bug ceva la simularea soft ... nici nu mai stiu ce sa cred.

Link spre comentariu

Poti pune te rog schema in ISIS si softul (hexul) ca sa incerc a simula si eu?Poate ii vreo setare de program pe care o omiti si deaia nu simuleaza bine.

Link spre comentariu

Schema si .hex-ul le am la munca. Dar ma pun acum si le fac din nou. La cat m-am invartit pe langa el stiu fiecare setare pe dinafara :sparge: . Si inca ceva. Am incercat si software I2C, dupa cum am spus ca o sa ma apuc si la fel nu se intampla nimic .... foarte dubios. Si ce am gasit si mai dubios a fost faptul ca in MikroC PRO nu exista rutina Soft_I2C_Config() .... nu aveam cum sa il configurez sa ii spun portul si pinii unde am conectat memoria. Am incercat cu MikroC v5.0 si acolo exista aceasta rutina. Dar tot nu a functionat ... acum ca o fi fost si din cauza mea ca am gresit ceva asta nu mai stiu. Revin cu fisierele :daL.E Gata, le-am urcat. Ar fi tare ca la tine sa functioneze ok. :nebunrau:

Link spre comentariu
:aplauze Am gasit problema. Rasfoind si citind pagini pe net am gasit pe un forum un tip care avea aceeasi problema ca si mie insa raspunsul pe care l-a primit m-a lasat masca si m-a facut sa ma gandesc ca nu as fi gasit solutia nici daca ma puneam in cap. Ce era de facut: in loc de rezistorii clasici, analogici din ISIS trebuiau folositi unii analogici PULLUP .... asta a fost tot. I-am inlocuit in simulare si merge perfect. Oricum aveam de gand ca maine sa realizez practic schema si ar fi functionat ... Va salut !
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