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