Bu yazımda pic ile adc kullanımını anlatacağım.Entes Elektronik’de staj yaparken bu konuyla alakalı yaptığım uygulamayı paylaşacağım.Yaptığım uygulama 0-12 v gerilimi okuyup lcd display’de gösterme üzerinedir.Doğadaki fiziksel büyüklükler analog işarettir.Bu fiziksel büyüklükleri ölçen sensörler ise analogdur.Bu sensörlerden alınan bilginin işlenmesi için analog işaretin digital sinyale dönmesi gerekmektedir.Mikrodenetleyicilerde bu işlemi yapan birime Analog to Digital Converter(ADC) denir.Bu yazımda kullandığım pic 16f877a’dır.Önceki yazılarımda 16f628a kullanmıştım.Ama onla birlikteliğimiz buraya kadardı.Pic 16f877a’da 8 kanallı ADC modülü bulunmaktadır.10 bit çözünürlüğe sahiptir.
2^10=1024
Vref+=5v,Vref-=0v
5/1024=0.00482812
Her 0.00482812 volt değişiminde 10 bit’in dijitinde değişim olur.
Bizim için ADCON0 VE ADCON1 kaydedicileri önemlidir.
ADCON0 Kaydedicisi
GO/DONE,U-0,R/W-0 “000” olarak seçtim.
ADCS1 VE ADCS0 biti
ADCS1 VE ADCS0 saat dönüşüm(clock conversion) bitleridir.Kullanıcı doğru biti seçmelidir.Kişi doğru dönüşümü elde etmek için periyot en az 1.6 us büyük olmalıdır.Örneğin ben 16f877a ‘da 4Mhz kristal osilatör kullandığım zaman.Biz Fosc/2 seçtiğimizde 4Mhz/2=2Mhz olur.Periyodumuz 1/2Mhz=500ns olur.Periyodumuz,1.6us’den küçük olur o zaman bu doğru seçim değildir.Eğer Fosc/8 olursa,4Mhz/8=0.5Mhz’den periyodumuz 2us olur.Periyodumuz,1.6us’den büyük olduğundan bu doğru seçimdir.
CHS2,CHS1,CHS0 Bitleri
Analog kanal seçimi,kişi hangi kanalı kullanmak istiyorsa onu seçebilir.Misal AN0 kullanmak istiyorsanız chs2,chs1,chs0 “000” olmalıdır.
ADCON1 Kaydedicisi
ADFM
ADFM 1 olduğunda Sonuç Sağa yaslanır.ADFM 0 olduğunda Sonuç Sola yaslanır.Biz ADFM=1 olarak ayarlıyoruz.
Bit-5 ve Bit-4’ü sıfır olarak seçeriz.
PCFG3,PCFG2,PCFG1,PCFG0 bitleri
Analog/Dijital port konfigürasyon kontrol bitleridir.Misal “0001” olarak ayarlarsak 7 tane analog ucumuz olur.Vref+ ise AN3 ucuna verilen gerilimdir.Eğer “0100” seçersek 3 analog,5 dijital ucumuz olur. Vref+;VDD ve Vref-;VSS olarak ayarlanır.İstediğiniz gibi ayarlamabilirsiniz.
Pic ile Voltmetre
Bu yazımızda ADC ile alakalı uygulama olarak.12-0 v arası voltaj gerilimi okuyup bunu ekrana yazdıran bir uygulama yaptım.Uygulamanın isis’de çizilmiş devresi;
Eğer pic’in ucuna 12 volt gerilimi direk bağlarsak pic’imizin portu yanar.Bunu önlemek için gerilim bölücü kullandık.1K ve 10K dirençlerini kullanarak. 1/11 oranında dönüşümü olur.Gerilim bölücüye 12 volt uyguladığımız zaman picin bacağına 1.09 volt uygulanmış olur.Bu 1.09 gerilim seviyesini okuduktan sonra kodumuzda 11 ile çarpım işlemi yaparız.
MikroC’de yazılmış olan kodumuz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
sbit LCD_RS at RB0_bit; sbit LCD_EN at RB1_bit; sbit LCD_D4 at RB2_bit; sbit LCD_D5 at RB3_bit; sbit LCD_D6 at RB4_bit; sbit LCD_D7 at RB5_bit; sbit LCD_RS_Direction at TRISB0_bit; sbit LCD_EN_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB4_bit; sbit LCD_D7_Direction at TRISB5_bit; long int veri=0; float voltaj=0,gerilim=0; char yaz[15]; void main() { TRISB=0x00; TRISA=0xFF; adcon0=0b10010000; // kanal2(AN2)seçildi. adcon1=0b10000010; // 5 analog,3 dijital uç olacak şekilde ayarlandı Lcd_Init(); Lcd_Cmd(_LCD_CURSOR_OFF); LCD_Cmd(_LCD_CLEAR); Lcd_Out(1,1,"ENTES-VOLTMETRE"); Lcd_Out(2,2,"Sidar ATABEY"); delay_ms(4000); LCD_Cmd(_LCD_CLEAR); while(1) { veri=ADC_Read(2); //Kanal 2 seçildiğinde ADC_Read(2) olur.kanal 1'de ADC_Read(1) olurdu voltaj=(0.004887586*veri); gerilim=11*voltaj; // Gerilim bölücüyle 11 kat gerilimi küçültük.Yazılımla 11 kat büyütüyoruz. floattoStr(gerilim,yaz); Lcd_Out(1,1,yaz); Lcd_Out(2,2," Pilin Voltaji"); delay_ms(500); } } |
Çalışmalarınızda başarılar dilerim. PICKIT 3 cihazım var. devrede monte edilmiş PIC18F4550 entegresindeki yazılımı alıp ileride tekrar aynı entegreye yüklemek istiyorum. Bunun için hangi programları kullanmalıyım. Bilgisayarımda MPLAB IDE V8.91 ve WINPIC 800 V3.64H programları yüklü. Bilgi verirseniz memnun olurum.
Saygılar.
Latif Bey Pickit3’ü PIC18F4550’e bağlayın.Pickit3 Programmer programını açtıkdan sonra Pic’iniz ile haberleşmeyi kurduktandan sonra Read Device +Export Hex File’a tıklayın program size pic’in içindeki Hex dosyasını nereye kaydedeceğini soracaktır.Hex file kaydedin.Tüm işlemler bu kadardır.İyi çalışmalar.
Entegre PIC18F4550 44 pinli TQFP kılıf, SMD tipi. Bağlantıları buna göre yazabilirmisiniz.
Latif Bey,PIC 18F4450 44 pinli TQFP Kılıf SMD’nin.Datasheetine bakarak.
14->RA2(ANALOG)
30-31->Kristal osilatör
18->MCLR
8,9,10,11->RB0,RB1,RB2,RB3 (LCD)
14,15->RB4,RB5 (LCD) bağlamanız yeterli olacaktır.İyi çalışmalar.
Sidar Bey Merhaba,
Desteğiniz için çok teşekkür ederim. Entegre 44 pinli PIC18F4550 QFN kılıf. devre üzerinde bir soket var. yazılımla ilgili entegrenin ayaklarına direk bağlı. yazılım yüklemek ve almak için MPLAB IPE V2,20 yi yükledim. Family: all families Device: PIC18F4550 yi seçtim. tool: bu alana PICKIT3 S.no: BUR124173593 kendiliğinden yazıldı. connect aktif geldi ve tıkladım. alt alana şu satırlar yazıldı
connecting the MPLAB PICkit3…
Firmware süite version……01.33.20
Firmware type……..PIC18F
Target device was not found. You must connect to target device to usb PICkit 3.
alındı File kısmında Export kısmı pasif geldi. kart üzerindeki yazılım yükleme alma soketinin pinlerini entegreyle ölçtüm. PICkit3’ün 1 nolu pini entegrenin 18 nolu pinine diğerleri ise 2 nolu pin 7,8,28 ve 29 a, 3 nolu pin 6 ve 30,31 e, 4 nolu pin 17 nolu pine, 5 nolu pin ise 16 nolu pine direk bağlı. soldaki rakamlar PICkit3 sağdakiler ise kart üzerindeki PIC18F4550 entegresine bağlı pinlerdir.
Entegreyle haberleşme olmuyor. Ne yapabilirim. Yazılım yüklemek için hangi programı kullanabilirim.
İyi çalışmalar.
Pickit3 Programmer Application indirmel için link; http://pickit.software.informer.com/
Bu programla istediğin gibi hex dosyanı pic’ine atabilirsin.İyi çalışmalar.
Sidar Bey Merhaba,
Bilgisayarıma PICKIT3 Programer’ün beta release sürümünü yükledim. Programı çalıştırınca PIC18F4550 yi seçince read device’ı tıklayınca entegreyi okuyor checksum boş geldi. program memory alanı ve eeprom data kısmı tamamı FF yazdı. Sağ alttaki auto import hex ve onun altındaki read device +export hex pasif geldi. read’i tıklayınca Program memory alanının tamamı 00 yazdı. eeprom data kısmı ise normal değerlerden oluştu. Sağ alt kısım yine pasif geldi. File altındaki emport hex her iki durumda da pasif geldi. Yardımlarınızı bekliyorum.
İyi çalışmalar.