Sari la conținut
ELFORUM - Forumul electronistilor

Nixie termometru si higrometru cu PIC16F876 si SHT21


Postări Recomandate

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 spre comentariu
  • Răspunsuri 25
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

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

Editat de danpin
Link spre comentariu
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 spre comentariu

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 spre comentariu

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 spre comentariu

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.

Editat de djvas
Link spre comentariu

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.

Editat de tes2000
Link spre comentariu

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.

Editat de albasete
Link spre comentariu

"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?

Editat de danpin
Link spre comentariu

 

 

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 spre comentariu

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)?

Editat de danpin
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