Makale, PIC16F676 üzerinde yapılan 50 voltluk bir ölçüm limiti olan bir voltmetreyi veya bu mikrodenetleyicinin ADC'sinin nasıl kullanılacağını açıklar.
PIC16F676 üzerindeki voltmetre devresi
R1 ve R3 dirençleri benim tarafımdan çok iyi seçilmedi, çünkü Göstergenin ikinci segmenti biraz loş yanıyor, değerlerinizi seçmenizi tavsiye ederim. Transistör VT1 KT3102'yi kullandı, başka bir npn transistörü ile değiştirilebilir.
Voltmetre kaynağı, HI-TECH PICC 9.50 derleyici:
PIC16F676 üzerindeki voltmetre devresi
R1 ve R3 dirençleri benim tarafımdan çok iyi seçilmedi, çünkü Göstergenin ikinci segmenti biraz loş yanıyor, değerlerinizi seçmenizi tavsiye ederim. Transistör VT1 KT3102'yi kullandı, başka bir npn transistörü ile değiştirilebilir.
Voltmetre kaynağı, HI-TECH PICC 9.50 derleyici:
#include< pic.h> __CONFIG(0x031D4); void low_init() { CMCON=0x07; ADCON1=0b00110000; /* | - || - ADCS2 ||| - ADCS1 |||| - ADCS0 ||||| - |||||| - ||||||| - |||||||| - */ ADCON0=0b10001101; /* | - ADFM - || - VCFG - ||| |||| - CHS2 ||||| - CHS1 |||||| - CHS0: выбор вывода для АЦП ||||||| - GO/DONE |||||||| - ADON */ ANS4 = 1; // 3 - анаологовый TRISA=0b00010000; TRISC=0x00; } void delay(unsigned int p) { unsigned int i; for(i=0;i } void seg7(int c,int s) { unsigned char t=0; PORTA=0b00000000; switch(s) { case 1 :{ t=1;}break; case 2 :{ t=2;}break; case 3 :{ t=32;}break; } switch(c%10) { case 0 : {PORTC=0b00000000;PORTA=t+4;}break; case 1 : {PORTC=0b00011110;PORTA=t+4;}break; case 2 : {PORTC=0b00010001;PORTA=t;}break; case 3 : {PORTC=0b00010100;PORTA=t;}break; case 4 : {PORTC=0b00001110;PORTA=t;}break; case 5 : {PORTC=0b00100100;PORTA=t;}break; case 6 : {PORTC=0b00100000;PORTA=t;}break; case 7 : {PORTC=0b00010110;PORTA=t+4;}break; case 8 : {PORTC=0b00000000;PORTA=t;}break; case 9 : {PORTC=0b00000100;PORTA=t;}break; } } void main() { int i,v,v1; long int v2; float vf; low_init(); delay(10000); while(1) { GODONE=1; // Устанавливаем бит GO для того что бы сделать опрос АЦП for(i=0;i < 200;i++) { seg7(v1/10,1); delay(5); seg7(v1%10,2); delay(5); seg7(v2/10,3); delay(5); } delay(100); while(GODONE){} v=ADRESL; // читаем младший байт с АЦП i=ADRESH; // читаем старший байт с АЦП (а именно 2 байта с него) v=v+i*256; // складываем младщий и старший байт с АЦП v1=(v*10/241)%100; // преобразуем vf=1000/241; v2=(int)((float)v/241*1000)%100; } }
Devre, ortak bir anodu olan kırmızı bir gösterge kullanır - BA56-12GWA.
Gösterge ve pimler hariç, karttaki tüm elemanlar rayların yan tarafında bulunur. Dirençler R6-R12 çip 0805, direnç R1, geleneksel bir pakette 0.125W, diğer tüm parçalar 1206. Direnç R4, sol üst köşedeki iki büyük alana lehimlenmiş yerleşiktir. Soket aşağıdaki gibi lehimlenir: fazla çıktıyı çıkarın, bacakları yanlara doğru bükün ve hafifçe kısaltın, daha sonra her şey kalaylanır ve lehimlenir, soket için tahtada delik açmak gerekmez; kontrolör için, delikleri ve lehimi her zamanki gibi sadece rayların yanından delebilirsiniz.
Gösterge ve pimler hariç, karttaki tüm elemanlar rayların yan tarafında bulunur. Dirençler R6-R12 çip 0805, direnç R1, geleneksel bir pakette 0.125W, diğer tüm parçalar 1206. Direnç R4, sol üst köşedeki iki büyük alana lehimlenmiş yerleşiktir. Soket aşağıdaki gibi lehimlenir: fazla çıktıyı çıkarın, bacakları yanlara doğru bükün ve hafifçe kısaltın, daha sonra her şey kalaylanır ve lehimlenir, soket için tahtada delik açmak gerekmez; kontrolör için, delikleri ve lehimi her zamanki gibi sadece rayların yanından delebilirsiniz.
Voltmetre, R4 direnci ayarlanarak ve bir bölücü (makalede bölücü 241) seçilerek ayarlanır.
Bu arşiv şunları içerir:
- Kaynak kodu
- firmware
- * .Lay formatında baskılı devre kartı
Bu voltmetre, güç kaynaklarından birine (daha kesin olarak harici bir dengeleyici) bir gösterge olarak monte edildi, bu makalede sadece voltmetrenin kendisi sunuldu, güç kaynağının bileşenleri çıkarıldı.
Makale 16 Aralık 2010'da güncellendi.
Vladimir'den makaleye ek
No comments:
Post a Comment