sâmbătă, 12 noiembrie 2011

Frecvențmetru digital 0-50Mhz cu Pic16f870 si LCD 16x2 hd44780

           Acest proiect de frecvențmetru cu PIC16f870, l-am realizat pentru a întelege mai bine modul de funcționare al timerelor prezente intr-un PIC dar și pentru a avea un aparat de masura precis si util la îndemana.
         Deși pe internet există foarte multe proiecte de frecvențmetre, de foarte multe ori, constructorul amator întampina dificultați in găsirea componentelor cu valorile specificate sau codul sursa nu este public, deci nu se pot face modificari ale proiectului, cum de multe ori se întamplă sa avem nevoie(tipul de afișaj, posibilitatea de adăugare sau scadere a frecvenței intermediare etc... ).
         În acest proiect, am utilizat un LCD 16x2 compatibil HD44780 pentru afișarea frecvenței.
Este folosit  Timerul 1, pentru a măsura numarul de impulsuri iar TMR0 se folosește pentru a asigura baza de timp de o secundă.  Timerul TMR1 al Pic-ului este un registru de 16 biţi, la fiecare impuls prezent la intrarea RC0, valoarea acestui registru crește si ajunge la valoarea de 65536.
        In acest moment, programul reseteaza valoarea TMR1 si incrementează valoarea unei alte variabile(să o numim INC). La sfârșitul perioadei de contorizare, de o secunda, se masoara valoarea acestei variabile INC si se adauga valoarea prezenta in acel moment in TMR1.
       Pentru o ințelegere mai buna sa presupunem ca avem la intrare un semnal de 1Mhz. Aceasta inseamnă că intr-o secundă la intrarea RC0 vor fi 1 milion de impulsuri.  In acest caz 1.000.000/65536=15,25878906 adică INC va avea valoarea de 15 iar TMR1 va avea valoarea de 0,25878906* 65536=16959,99(~16960).
        Să calculăm acum și in alt mod: să presupunem ca variabila inc are valoarea 15 si TMR1 are valoarea de 16594. In acest caz frecvența masurata va fi (15*65536)+16960= 1,000.000 Mhz
Deoarece timpul de masurare este de 1 secundă rezultatul final este de fapt frecvenţa semnalului de intrare.
Utilizarea timpului de masurare 1 secundă oferă, de asemenea, o rezoluție de 1 Hz.
        Am testat acest montaj cu un oscilator CY27EE16, comandat de catre computer, rezultatele fiind foarte bune:
- gama de masura 1Hz - 50 Mhz( maxim 65Mhz in funcție de PIC-ul folosit)
- precizie de măsurare in toata gama de +/- 10Hz.


Tranzistorul de la intrare are rolul de amplificare si formare a semnalului pentru etajul de intrare din PIC.

Lista componentelor folosite:


Componente active:

-Pic 16f870 --------------------------1 buc.
-LCD 16x2 HD44780 ---------------1 buc.
-Tranzistorul Q1 Bc546(NPN) ------ 1 buc.
Quartz:
- 10,000 Mhz ------------------------1 buc.
Diode:


Dioda Bat85--------------------------1buc. (se poate folosi orice dioda de comutatie).

Rezistente:

100k 0,25w  -------------------------1 buc.
10k 0,25w  -------------------------- 1 buc.
1k 0,25w  --------------------------- 1 buc.

Potentiometru semireglabil:

10k -------------------------------- -1 buc.

 Condenstoare:


100nF------------------------------ -4 buc.
33pF  ceramic---------------------- -1 buc.

Condensator  semivariabil :

10-30pF ----------------------------1 buc. (de preferat multitura)

Condensatoare electrolitice:

4,7uF/16 Volti-----------------------1 buc.
10uF/16 Volti -----------------------1 buc.


Punere in funcțiune si reglaje:

Montajul se alimenteaza de la o sursa stabilizata de tensiune de 5 Volți.
La intrare se cupleaza o sursa de semnal cu frecvența cunoscuta și se regleaza C3(10-30pf)
pana la afișarea frecvenței de la intrare pe ecran.





























Schema realizata cu Diptrace 2.1.9.2 varianta free:
https://docs.google.com/leaf?id=0B_dNmUbXFqawZTFmMjA4ZTgtNjUxMy00NDU4LWFmZTctYmFiOTU4OTU1ZjM1&hl=en_US

Fișierul hex pentru PIC:
https://docs.google.com/leaf?id=0B_dNmUbXFqawMDRjYTFhMmUtMmFiMi00ODlmLWE1MGQtY2I1NzQxNzQ0ZjZj&hl=en_US

28 de comentarii:

  1. Puteti transpune codul pentru 16f877?
    Am acest integrat.
    Eventual puteti publica codul sursa?

    RăspundețiȘtergere
  2. Salut Costi,
    Cred ca merge fara nici o modificare cu un 16F877...fac parte din aceeasi familie de microcontrolere.
    Incearca si daca nu functioneaza il compilez si pentru 16f877.

    RăspundețiȘtergere
    Răspunsuri
    1. Acest comentariu a fost eliminat de autor.

      Ștergere
    2. Imi este suficient hex-ul, dar cum il obtin ?

      Ștergere
  3. Pentru descarcare hex click pe link si din meniul File se face download.

    RăspundețiȘtergere
  4. Va salut .
    Am o nedumerire si anume montajul nu imi functioneaza daca nu aplic 5V pe pinul 2 de la ICSP ,este normal asa ceva ?

    RăspundețiȘtergere
  5. PIC-ul pe pinul MCLR are nevoie de 5 volti pentru a rula programul de la inceput pana la sfarsit, pentru ca daca e pus la masa, PIC-ul se reseteaza. In datasheetul Picului la pagina 91 in figura 11-4 se vede structura schemei de resetare.

    RăspundețiȘtergere
  6. Nicolae
    Pentru inceput doresc sa va multumesc pentru aceste realizari pe care sunteti amabil sa le faceti publice si va doresc multe, multe si mult mai multe realizari. Dar ca si incepator ce sunt am multe probleme neantelese si nerezolvate, pe care poate ca o sa le rezolv cu ajutorul d-voastra. Deci am facut si eu schema postata si ..... nu functioneaza.
    Am verificat si rasverificat schema, pare in regula, cred ca programul incarcat in PIC sa fie de vina cred ca nu s-a incarcat softul bine. Deci la pornirea prima data a montajului ecranul LCD se alimenteaza, dar toare partatelele de afisaj sunt negre pline, am aplicat si o frecventa cunoscuta dar nu indica nimic altceva. Daca imi sugerati si ceva idei ar fi foarte indicat cam ce sa mai fac.
    Daca cineva este amabil sa incerce sa ma ajute o sa dau mai multe detalii cu ce am incercat si in ce stadiu sunt.
    Pana atunci va multunesc anticipat.

    RăspundețiȘtergere
  7. Salut,
    Pare ca nu se initializeaza LCD-ul.
    De verificat toate lipiturile sa fie perfecte si tensiune de 5 volti pe pinul 1 al picului(Mclr).
    Incercati eventual si cu un alt Lcd.

    RăspundețiȘtergere
    Răspunsuri
    1. imi poti trimite si mie codul de c sau asamblare pt frecventmetru?

      Ștergere
  8. L-am incercat si eu, functioneaza.
    http://img706.imageshack.us/img706/9099/frecvvert.jpg

    merC++ Marian!

    RăspundețiȘtergere
  9. Imi puteti trimite codul C (sau asamblare),va rog frumos
    vreau sa inteleg functionarea si nu am cum altfel!

    bogdan.rosioru@yahoo.com

    RăspundețiȘtergere
  10. Acest comentariu a fost eliminat de autor.

    RăspundețiȘtergere
  11. Acest comentariu a fost eliminat de autor.

    RăspundețiȘtergere
  12. Nu stiu daca ai vazut commentul meu,ma poti totusi ajuta cu,codul sursa C,deoarece am tot cautat pe internet si cu greu inteleg cum functoneaza si mai ales initializarile acelea cu baza de timp pt TMR0 si numarare pt TMR1.

    bogdan.rosioru@yahoo.com

    Multumesc anticipat !

    RăspundețiȘtergere
  13. Buna. Ma intereseaza daca nu cumva ai si cablajul in ceva format accesoibil, .pdf eventual... vreau sa construiesc si eu montajul tau fara sa mai stau sa proiectez un cablaj!

    RăspundețiȘtergere
    Răspunsuri
    1. Salut,
      Scuze ca raspund asa tarziu dar din pacate nu il mai am(probleme cu hard diskul si nu apucasem sa ii fac backup).

      Ștergere
  14. daca nu afiseaza nimic sau e negru ecranul LCD trebuie verificat contrastul!

    RăspundețiȘtergere
  15. Salut. Montajul propus de tine este foarte apropiat de ceea ce rumeg eu in momentul de fata. Eu mi-am propus sa folosesc un al doilea oscilator (TCXO 32k), interfata pe 8 biti, alte porturi, PIC16F877, LCD Ampire...
    Cu promisiunea ca nu il copiez... poti sa imi trimiti limbajul sursa???

    RăspundețiȘtergere
    Răspunsuri
    1. Salut!
      Trimite-mi un mesaj cu adresa ta de email(nu public mesajul), pentru ca sa iti pot trimite codul sursa!

      Ștergere
  16. Acest comentariu a fost eliminat de autor.

    RăspundețiȘtergere
  17. Se poate face o modificare la soft sa mearga si cu 16F876A ? Va rog frumos.

    RăspundețiȘtergere
    Răspunsuri
    1. Salut!Cred ca merge fara nici o modificare. Daca vrei iti dau codul sursa, e scris in MikroC ver 8.0(versiune veche), si trebuie facute ceva modificari pentru a fi compilat cu versiunile noi.
      Testeaza HEX-ul cu Proteus daca il ai si vezi daca functioneaza cu 17f876!
      Sper sa am timp in urmatoarele zile sa il modific.
      Trimite-mi un mesaj nou cu adresa de email si iti trimit codul sursa!

      Ștergere
    2. Sincer sa fiu, nu stiu sa modific soft-ul in nici un fel. Nu ma pricep la programare, decat sa incarc HEX-ul cu WinPic. Pe acesta l-am folosit pana acum. Adresa mea de e-mail este mysu_electronics@yahoo.com (sper sa mearga, ca in ultimul timp nu primesc chiar toate mesajele de la prieteni. unul a zis ca ai da ceva cu failure deamon...nu stiu ce sa mai zic. oricum daca primesc mesajul iti voi confirma)

      Ștergere
    3. Multumesc anticipat!

      Ștergere
  18. salut Marian,
    am rugamintea sa-mi trimiti si mie codul sursa pentru a-l modifica sa-l folosesc cu pic 16f882sau 16f877.
    costitheodoru@yahoo.com.multumesc.

    RăspundețiȘtergere
  19. Salut Marian !
    Sunt foarte curios de anumite implementari din codul sursa !Sunt student la Automatica si am un proiect de facut .Am observat ca ai mai dat codul sursa unor useri !Te deranjeaza daca iti las mail-ul meu aici sa imi trimiti si mie mainul ?Sau poate putem tine si legatura !Mi-ar placea sa iti adresez cateva intrebari :)
    O zi buna !

    RăspundețiȘtergere
    Răspunsuri
    1. Salut.
      Scrie-mi te rog un mesaj cu emailul tau(nu public mesajul) si asa putem tine legatura.

      Ștergere