Sari la conținut
ELFORUM - Forumul electronistilor

MPLABX, MCC si driver I2C


Postări Recomandate

Continui aici discutia inceputa in topicul "MikroE Necto IDE" referitoare la utilizarea bus-ului I2C folosind "driver-ul" generat de utilitarul MCC.

Cred ca acest driver este suficient de greu de inteles ca sa merite un topic al lui... :) 

Exista multe discutii pe forumuri referitoare la acest cod generat, in general nu "magulitoare" la adresa Microchip, insa personal n-am gasit o explicatie satisfacatoare a functionarii lui.

Cum am zis si dincolo, userul Mysil are pe forumul Microchip niste postari referitoare la subiect care merita toata atentia dar nu trateaza subiectul in detaliu.

 

Personal am portat pana acum 3 librarii (personale) scrise in MikroC pe XC8 folosind acest driver + API-ul generat ca exemplu pt. utilizarea lui. 

Functioneaza(!) dar asta nu ajunge... pt. mine e important sa inteleg cum functioneaza, nu doar sa mearga si gata... :) 

 

Pentru inceput as vrea sa intreb colegii daca a folosit cineva acest driver?!?

Prin "folosit" nu ma refer la a copia un eventual cod din github sau de altundeva de pe net si a-l incarca in uC ci daca cineva a studiat si inteles ce-i cu callback-urile alea, de ce se afirma ca acest driver ar merge SI fara activarea intreruperilor cand mie strict acelasi cod nu-mi merge cu GIE=0 s.a.m.d.

Pentru puritani mentionez de la inceput ca inca mai sunt in stare sa scriu un cod pornind de la datasheet insa nu vreau sa fac asta pt. toate procesoarele pe care le-am folosit sau o sa le folosesc... :) 

 

Deci, daca cineva este doritor de discutii sau sa facem "schimb de experienta" pe tema asta... poftiti va rog... :) 

 

L.E. Atasez codul generat de MCC pt. I2C ca sa fie mai usor pt. cine vrea sa arunce o privire.

 

i2c1_master.h i2c1_master.c i2c1_master_example.c i2c1_master_example.h

Editat de informer
Link spre comentariu
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Daca tot ce-ti lipseste este device-ul I2C si-n rest esti tanar si nelinistit sa te ocupi de elucidarea misterelor io am "jde"... iti trimit dupa preferinte, memorie, IC senzor, ce vrea "muschiu` tau" :) . 

 

Intre timp am constatat ca driver-ul asta intr-adevar nu se blocheaza pt. o adresa gresita de slave cu conditia sa existe totusi un slave... da` daca de ex. intrerup una dintre liniile bus-ului dupa ce-a comunicat o vreme cu succes... "adio si la gara". Asa ca nu-i neaparat complexitatea raspunsu` la toate intrebarile... sau poate exista un callback pt. "instante superioare" care nu-i bagat in seama... mai vedem, munca-i in progres.

 

Paste Fericit! 

Editat de informer
Link spre comentariu
  • 4 săptămâni mai târziu...

Inteleg ca n-a prea lucrat nimeni cu driver-ul I2C generat de MCC... :) 

Un modul MSSP poate fi convins sa lucreze si fara intreruperi dar acu` am dat peste alta tampenie... imediat ce activez al 2-lea modul nu mai functioneaza nici primul.

Gasesc implementarea dezamagitoare, de acord cu nenumarati altii de pe net... si rusinoasa, as spune. Driver-ul celor de la Mikroe o fi mai simplist si fara atatea protectii (unele doar cu numele...) dar macar nu genereaza atatea probleme. 

Link spre comentariu

Mie toata treaba mi se pare excesiv de complicata, mai ales pt. nevoile mele.

N-am avut NICIODATA nevoie de comunicatii I2C multi-master si nici macar de implementarea vreunui slave I2C... si dupa umila mea parere in situatia asta sunt mare parte dintre utilizatori.

Tot ce vroiam era o implementare "rock solid" pt. un single master I2C care sa nu fie blocanta in nici unul dintre cazurile de manifestare aberanta a vreunui periferic (intrerupere comunicatie, "monopolizare" bus etc.). In loc de asta avem aici o implementare partiala de nava spatiala a carei functionare este neclara, neterminata si relativ imprevizibila.

Pana la urma am sa renunt in masura posibilului la I2C in favoarea SPI iar cand chiar n-am incotro o sa scriu o librarie SW pt. master, minimala si neblocanta... ca oricum viteze supersonice nu prea se practica pe I2C...

 

Link spre comentariu

Stiu ca la MikroE  de la versiunea 7.ceva  libraria I2C nu mai este blocanta.  Din pacate eu sunt blocat la versiunea 6 din diverse motive ... financiare :) asha ca nu am avut posibilitatea sa o testez. Dar sunt convins ca tu ai testat-o . Cum se manifesta ?

Link spre comentariu
1 oră în urmă, djvas a spus:

Stiu ca la MikroE  de la versiunea 7.ceva  libraria I2C nu mai este blocanta.  Din pacate eu sunt blocat la versiunea 6 din diverse motive ... financiare :) asha ca nu am avut posibilitatea sa o testez. Dar sunt convins ca tu ai testat-o . Cum se manifesta ?

 

Eu rulez MikroC in VM cu XP si ultima versiune care merge in XP este 7.1... iar la asta daca-i dai o adresa gresita a unui slave, adio si la gara. :) 

Am si o VM cu Win7 si cu 7.2 sau .3 parca dar se misca destul de incet si n-am folosit.

OS-ul este dealtfel motivul pt. care am vrut Necto si am ajuns pana la urma la MPLAB si XC8.

Dar revenind la I2C, daca elimini toate brizbriz-urile legate de coliziuni / multi-master, ultra fast mode, 10bits address etc., ce ramane pt. comunicatia cu un banal senzor, LCD sau EEPROM, neblocant, se poate implementa ca librarie SW in 3 - 4 ore de lucru cu tot cu teste... ceea ce am de gand sa fac... :)

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