Jump to content
ELFORUM - Forumul electronistilor

Nixie termometru si higrometru cu PIC16F876 si SHT21


Recommended Posts

Salut,

Vreau sa fac term. si higr. cu PIC16F876 si SHT21 dupa schema gasita in revista Elektor din iunie 2012.

Am gasit aici HEX-ul, am incercat o simulare in Proteus dar se pare ca nu merge...ori poate nu merge la mine... nu stiu.

https://www.elektormagazine.com/magazine/elektor-201206/19884

M-am uitat putin in codul sursa si nu inteleg tot din el, de exemplu ce cauta liniile astea de cod acolo, la ce bun?

int8 Year=0,Month=0,Days=0,Hours=0,Minutes=0; astea care se refera la RTC

Schema se gaseste aici:

https://translate.google.ro/translate?hl=en&sl=ru&u=http://robocua.blogspot.com/&prev=search

rog, daca are cineva timp sa faca o simulare sa-mi confirme daca este bun hexul de pe site-ul Elektor.

Apropo, are cineva librarii (sau cum s-o fi chemand) pt. Proteus pt. tuburi Nixie?

Vreau sa modific codul pentru compilare in MikroC dar cum nu ma pricep prea bine, merge greu.... am sa mai apelez la ajutor!

Toate cele bune!

Link to comment
  • Replies 25
  • Created
  • Last Reply

Top Posters In This Topic

Salut,

Incerc sa convertesc codul pt. termometru/higrometru

https://www.elektormagazine.com/magazine/elektor-201206/19884

care cred ca e scris pt. compilerul CCS in cod pt. mikroc.

Am linia de cod

printf("%lu,%lurn",sT.u16,sRH.u16);

Pt. functia "printf" care ar fi echivalentul in mikroc?

Mai sunt si linii de cod ca aceasta:

sprintf(hum_str,"%04.1f",humidityRH);

dar imi dau eroare la compilare "131 324 Undeclared identifier 'sprintf' in expression"

In helpul mikroc gasesc functia "sprintf" dar totusi nu o gasesc in lista din "library manager", la generarea proiectului am selectionat toate librariile.

Rog, un pic de ajutor pt. rezolvarea problemelor....

Edited by danpin
Link to comment
void SHT21_measure(){    // --- measure temperature with "Hold Master Mode (HM)"  ---    error |= SHT2x_MeasureHM(TEMP, &sT);    // --- measure humidity with "Hold Master Mode (HM)"  ---    error |= SHT2x_MeasureHM(HUMIDITY, &sRH);    printf("%lu,%lurn",sT.u16,sRH.u16);    //-- calculate humidity and temperature --    temperatureC = SHT2x_CalcTemperatureC(sT.u16);    humidityRH   = SHT2x_CalcRH(sRH.u16);    //-- write humidity and temperature values into string buffer --    sprintf(temp_str,"%04.1f",temperatureC);    sprintf(hum_str,"%04.1f",humidityRH);}

Asta este bucata de cod pe care trebuie sa o transform.

Am gasit pe forum la mikroe niste postari din 2009-2011, pare ca aveti dreptate, sprintf nu merge pt. PIC16Fxxx.

Trebuie sa mai studiez codul, oricum nu ma pricep prea bine, chestii simple le pot face, dar la "fineturi" mai greu..

Pot sa inlocuiesc sprintf cu sprintl dar nu accepta float numbers, nu stiu exact daca codul opereaza cu float.

Link to comment

Prima data incearca sa compilezi fara sprintf si vezi daca incape, deoarece libraria float ocupa o gramada de loc,daca mai ramane loc faci o inmultire cu 10, apoi o conversie la int si inaite de afisare muti ultimul digit mai in spate si pui un locul lui un punct. (ex. 23.5 * 10 = 235 asfisat 23.5)

Link to comment

Hexul original are 17KB.

Asta pe care vreau sa-l modific, fara sprintf, are 9KB.

 

Am linia de cod:

char bcdtab[10] = {8,0,9,1,14,6,10,2,12,4};

nu-mi dau seama de unde vin numerele din arie.

Afisajul este tip Nixie comandat de decodoare BCD tip 74141. Ceva idei?

Link to comment

Dupa vreo ora de scarpinat in cap.... am deschis schema si s-a facut lumina....  Autorul a cablat RB7->A ( 74141) RB6->B si tot asha. Ca sa functioneze trebuie generata valoarea de 4 biti in oglinda. Asta face acest array. Ce nu inteleg este ordinea din array.

Edited by djvas
Link to comment

Probabil trebuie luat in considerare cum a legat tuburile, decodorul activeaza doar o iesire pentru o combinatie iar pe tub afiseaza un numar. Daca nu a legat in ordine trebuie modificat ordinea din soft. Nu vad ce tip de tub foloseste ca sa verific.

Edited by tes2000
Link to comment

Tuburile IN 14 pentru cifre si IN 19 A pentru simboluri :grade C si % pentru umiditate. Fiecare tub este comandat individual de cate un driver 74141, care are un singur mod de conexiune, nu se pot inversa conexiunile. Modificarea banuiesc, trebuie facuta din soft.

 

"M-am uitat putin in codul sursa si nu inteleg tot din el, de exemplu ce cauta liniile astea de cod acolo, la ce bun?

int8 Year=0,Month=0,Days=0,Hours=0,Minutes=0; astea care se refera la RTC" . Da, la RTC se refera. Inseamna ca este gresit codul sursa sau ai copiat gresit respectivul cod.

Edited by albasete
Link to comment

"M-am uitat putin in codul sursa si nu inteleg tot din el, de exemplu ce cauta liniile astea de cod acolo, la ce bun?

int8 Year=0,Month=0,Days=0,Hours=0,Minutes=0; astea care se refera la RTC" . Da, la RTC se refera. Inseamna ca este gresit codul sursa sau ai copiat gresit respectivul cod.

Zip-ul cu codul sursa l-am descarcat de pe site-ul Elektor, probabil l-au folosit la vreun ceas cu Nixie si l-au adaptat si pt. termo/higrometer apoi lasand unele bucati din cod din neatentie sau chiar intentionat, sa cumperi circuitul deja programat de la ei. Asta e mai putin important, eu incerc sa-l transform in cod mikroc si am sa elimin tot ce nu este necesar, daca voi reusi ramane de vazut....

 

Anozii tuburilor sunt alimentati de la sursa cu +170Vcc, catozii sunt legati la iesirile 74141 deci pt. a aprinde un digit aceste iesiri trebuie sa fie "zero", corect? In acest caz codul BCD pe intrari trebuie sa fie ceva "complementat" sau modificat ...ceva de genul... corect?

Edited by danpin
Link to comment

 

 

Anozii tuburilor sunt alimentate de la sursa cu +170Vcc, catozii sunt legati la iesirile 74141 deci pt. a aprinde un digit aceste iesiri trebuie sa fie "zero", corect? In acest caz codul BCD pe intrari trebuie sa fie ceva "complementat" sau modificat ...ceva de genul... corect?

 

De aprinsul tubului se ocupa 74141. Conform tabelei de adevar din datasheet informatia este directa nu complementata. Adica daca la intarea ai a=b=c=d=0 atunci se aprinde cifra 0 la tub si tot asha. 

Acel array ( am scris si mai sus) este folosit datorita schemei proiectate deficitar. O legare mai logica ar fi RB4 la A(74141) RB5 la B si tot asha. In felul asta scrii direct valoarea de 4 biti dorita.

Link to comment

Multumesc tuturor pt. ajutor.

Momentan am renuntat la "portarea" codului original scris, cred, in CCS in cod mikroc, e cam complicat pt. cat ma pricep eu, ca sa inteleg ce trebuie sa fac ar trebui sa studiez si CCS-ul...

Am inceput sa incropesc un alt software....

Intrebare: ca sa "sting" un digit, adica sa nu afiseze zero, portul la care este conectat 74141 trebuie declarat ca intrare (TRIS 1)?

Edited by danpin
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines