PIC16F876 ile Renk algılama sistemi 16f876 mikro denetleyici üzerine kurulu yazılım picbasic pro ile hazırlandı. Renk bilgilerini 2X16 LCD ve ledler ile gösterebiliyor.
Devrenin proteus isis simülasyon şeması
RENK-OLC.bas yazılım içeriği
'**************************************************************** '* Name : UNTITLED.BAS * '* Author : [E.T.E] * '* Notice : Copyright (c) 2005 Ete] * '* : All Rights Reserved * '* Date : 28.10.2005 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** PORTA=0:PORTB=0:PORTC=0 TRISA=%00000001 'Bit0 ve bit 2 giriş diğerleri çıkış yapıldı TRISB=0 'PortB tuş takımı için ayarlandı 1-2-3 giriş diğerleri çıkış TRISC=%10000000 '7. bit'e tuş bağlandı giriş oldu ' '----------------------------------------------------------------- @ DEVICE PIC16F876 'işlemci 16F876 @ DEVICE PIC16F876, WDT_on 'Watch Dog timer açık @ DEVICE PIC16F876, PWRT_ON 'Power on timer açık @ DEVICE PIC16F876, PROTECT_OFF 'Kod Protek kapalı @ DEVICE PIC16F876, XT_OSC 'XT osilatör kullanılacak '----------------------------------------------------------------- DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı? DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor? DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı? DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ? define LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı? define LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ? DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ? DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ? DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı? DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor DEFINE OSC 4 DEFINE ADC_BITS 8 'A/D çevirim sonucu kaç bit olacak DEFINE ADC_CLOCK 3 'Clock kaynağı (3=rc) DEFINE ADC_SAMPLEUS 100 '------------------------------------------------------------------------- OPTION_REG.7=1 'Pull up dirençleri İPTAL ADCON1=%00000100 'PORTA.0 VE PORTA.1 ANALOG DİĞERLERİ DİGİTAL '------------------------------------------------------------------------- HAM VAR BYTE KIRMIZI VAR BYTE YESIL VAR BYTE MAVI VAR BYTE SARI var byte TURUNCU var byte SYMBOL TUS=PORTC.7 symbol LED_KIR=PORTC.0 SYMBOL LED_YES=PORTC.1 SYMBOL LED_MAV=PORTC.2 symbol LED_SAR=PORTC.3 SYMBOL LED_TUR=PORTC.4 '------------------------------------------------------------------------ LOW PORTB.2 'LCD R/W BACAĞI LOW A ÇEKİLDİ LCDOUT $FE,1 PAUSE 300 'LCD AKTİF LCDOUT $FE,1, " RENK ALGILAMA " LCDOUT $FE,$C0," SISTEMI " PAUSE 500 '------------------------------------------------------------------------ BASLA: LCDOUT $FE,1, "CISMI YERLESTIR" LCDOUT $FE,$C0,"VE START'A BASIN" PAUSE 200 IF TUS=0 THEN ALGILA GOTO BASLA ALGILA: GOSUB EKRAN PORTC=0 HIGH LED_KIR PAUSE 500 GOSUB ADCAL KIRMIZI=HAM PAUSE 200 LOW LED_KIR HIGH LED_YES PAUSE 500 GOSUB ADCAL YESIL=HAM PAUSE 200 LOW LED_YES HIGH LED_MAV PAUSE 500 GOSUB ADCAL MAVI=HAM PAUSE 200 LOW LED_MAV HIGH LED_SAR PAUSE 500 GOSUB ADCAL SARI=HAM PAUSE 200 LOW LED_SAR HIGH LED_TUR PAUSE 500 GOSUB ADCAL TURUNCU=HAM PAUSE 200 LOW LED_TUR '-----------------OKUMA OLCME BİTTİ---------------------------------- ' IF KIRMIZI>YESIL THEN ' IF MAVI>KIRMIZI THEN ENMAVI ' GOTO ENKIRMIZI ' ENDIF ' IF YESIL>KIRMIZI THEN ' IF MAVI>YESIL THEN ENMAVI ' GOTO ENYESIL ' ENDIF ' IF KIRMIZI=YESIL THEN ' IF YESIL=MAVI THEN BEYAZ ' ENDIF RENK_BUL: IF KIRMIZI=YESIL THEN IF YESIL=MAVI THEN IF MAVI=SARI THEN IF SARI=TURUNCU THEN BEYAZ ENDIF ENDIF ENDIF IF YESIL>KIRMIZI THEN IKI IF MAVI >KIRMIZI THEN UC IF SARI >KIRMIZI THEN DORT IF TURUNCU>KIRMIZI THEN BES GOTO ENKIRMIZI IKI: IF MAVI>YESIL THEN UC IF SARI>YESIL THEN DORT IF TURUNCU>YESIL THEN BES GOTO ENYESIL UC: IF SARI>MAVI THEN DORT IF TURUNCU>MAVI THEN BES GOTO ENMAVI DORT: IF TURUNCU>SARI THEN BES GOTO ENSARI BES: IF TURUNCU>0 THEN ENTURUNCU LCDOUT $FE,1, "OKUMA VEYA HESAP" LCDOUT $FE,$C0," HATASI VAR !!!" pause 2000 goto ALGILA ENKIRMIZI: LCDOUT $FE,1, " CISMIN RENGI " LCDOUT $FE,$C0,"** KIRMIZIDIR **" PAUSE 2000 GOTO BASLA ENYESIL: LCDOUT $FE,1, " CISMIN RENGI " LCDOUT $FE,$C0,"*** YESILDIR ***" PAUSE 2000 GOTO BASLA ENMAVI: LCDOUT $FE,1, " CISMIN RENGI " LCDOUT $FE,$C0," *** MAVIDIR ***" PAUSE 2000 GOTO BASLA ENSARI: LCDOUT $FE,1, " CISMIN RENGI " LCDOUT $FE,$C0," *** SARIDIR ***" PAUSE 2000 GOTO BASLA ENTURUNCU: LCDOUT $FE,1, " CISMIN RENGI " LCDOUT $FE,$C0,"** TURUNCUDUR **" PAUSE 2000 GOTO BASLA BEYAZ: LCDOUT $FE,1, " CISMIN RENGI " LCDOUT $FE,$C0,"*** BEYAZDIR ***" PAUSE 2000 GOTO BASLA ADCAL: ADCIN 0,HAM BIR: IF ADCON0.2=1 THEN BIR RETURN EKRAN: LCDOUT $FE,1, " CISMIN RENGINI " LCDOUT $FE,$C0," ALGILIYOR " PAUSE 200 RETURN END
pic16f876-ile-lcd-gostergeli-renk-algilama-sistemi
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/09/01 Etiketler: color sens, microchip pic projeleri, PIC16F876 örnekleri, renk algılayıcı
merhaba ete,
tasarlamış olduğun renk algılama devresini için teşekkürler. Güzel bir çalışma. devreyi kurdum fakat çalışmasında sorun çıktı ve düzeltemiyorum. renkleri algılamasında sorun var ve bir türlü doğru rengi algılamıyor. ledleri ve ldryi siyah ve kapalı küçük birkutuya monte ettim. ldr yi cisimden yansıyan ışığı alacak şekilde izole ettim(ledlerden direkt etkilenmesin diye). artık ne yapacağımı bilmiyorum. yardımcı olursan memnun olurum.
iyi çalışmalar, teşekkürler.
Bu devre tamamen ödev amaçlı tasarlanmış bir devredir. Elbette profesyonel renk algılama devreden beklenemez çok basit bir şey çünkü.
Ama bunun yanıda da hiç çalışmamasıda beklenemez elbette.
Sorununuz bir iki şeyden kaynaklanabilir.
Birincisi kullandığınız LDR ya çok hassas yada çok sağırdır. Bunu değiştirmeyi deneyin lütfen.
Diğer bir konuda işik şiddeti olabilir. Ledlerin hepsinin aynı akımı şektiğinden emin olmanız herekir. Bir diğerine göre baskın olursa sistem yine doğru çalışmayacaktır.
Her bir ledi dışarıda 10-15 ma akım çekecek şekilde çalıştırın (5V gerilim vererek ve arada uygun seridirenç kullanarak) Yapmanız gereken şey direnç değerinin 15 ma akım çekecek şekilde ayarlanması olmalıdır. Bütün ledler için bunu uyguladıktan sonra yeniden deneme yapın. Kullandığınız LDR yüzey alanı küçük ise bir büyüğünü kullanmaya çalışın.
Başkada yapacak bir şeyim yok maalesef.
Ete