15 Mayıs 2011 Pazar

MİKRODENETLEYİCİLER

        Mikrodenetleyiciler pratik kullanımları az donanına gereksinim duymaları az enerji tuketmeleri kücük boyutları gibi birçok neden den dolayı  bircok alanda kullanılmaktadır
     Evlerimizde kullanıgımız çamaşır makinelerinden buzdolaoplarından tutun birçok robotik ve elekronik projede başarılı bir şekilde kullanılmaktadır

                               MİCROCHİP FİRMASININ BAZI MİKRO DENETLEYİCİLERİ








Bu mikrodenetleyiciler  cok fazla kullnılırlar uygulana alanları nerede ise yok denecek kadar azdır. örnek programları internet ortamında cok fazla bulunabilecek bir mikrodenetleyicidir..Bu mikro denetleyicilere kısaca Pic denir ve bir cok modeli vardır bunlar içinde en çok kullanılan denetleyiciler arasında pic16f84, pic16f877, pic16f628 vardır. Bu denetleyiciler bazı özelliklerine farklılasarak üretilmiştir

Pic 16f877 ile kullanarak telefon ile uzaktan kontrol


Baskı Devre Şeması:

Alttan Görünüş:





Üstten Görünüş:


DTFM Tonu ile uzaktan cihaz kontrolü
DTFM ton kontrolü 8 adet her hangi bir devrenin ya da cihazın uzaktan kontrolünde kullanılabilir. Buradaki amaç telsizle ve ya telefonla uzaktan bir sistemin çalışmasını sağlayabilmektir.
Devrenin çalışması:
Telefondan ve ya telsizden çıkan DTMF ton sinyali bir amplifikatör yardımıyla genliği büyütüldükten sonra 100 n'luk kondansatörden geçerek 100 kW'luk dirençle CM8870 decoder entegresi tarafından 5 bitlik veriye dönüştürülür. Normal telefon DTMF'i için CM8870'e 3.574Mhz'li kristal takılmaktadır. Decoder'den çıkan 5 bitlik veri pic 16F877'nin portlarına aktarılır. Pic 16F877 tarafından klavyeden girilen değerle karşılaştırılır ve ilgili röleleri kontaklar. 
pic16f877 için pic basic kodları:


PM_USED   EQU 1
 INCLUDE "16F877.INC"

; Define statements.
#define  CODE_SIZE   8
#define  LCD_BITS      4
#define  LCD_DREG      PORTD
#define  LCD_DBIT      0
#define  LCD_RSREG   PORTE
#define  LCD_RSBIT   2
#define  LCD_EREG   PORTE
#define  LCD_EBIT   1
RAM_START         EQU 00020h
RAM_END           EQU 001EFh
RAM_BANKS         EQU 00004h
BANK0_START       EQU 00020h
BANK0_END         EQU 0007Fh
BANK1_START       EQU 000A0h
BANK1_END         EQU 000EFh
BANK2_START       EQU 00110h
BANK2_END         EQU 0016Fh
BANK3_START       EQU 00190h
BANK3_END         EQU 001EFh
EEPROM_START      EQU 02100h
EEPROM_END        EQU 021FFh
R0                EQU RAM_START + 000h
R1                EQU RAM_START + 002h
R2                EQU RAM_START + 004h
R3                EQU RAM_START + 006h
R4                EQU RAM_START + 008h
R5                EQU RAM_START + 00Ah
R6                EQU RAM_START + 00Ch
R7                EQU RAM_START + 00Eh
R8                EQU RAM_START + 010h
FLAGS             EQU RAM_START + 012h
GOP               EQU RAM_START + 013h
RM1               EQU RAM_START + 014h
RM2               EQU RAM_START + 015h
RR1               EQU RAM_START + 016h
RR2               EQU RAM_START + 017h
_CIKIS             EQU RAM_START + 018h
_DENET             EQU RAM_START + 019h
_UMUMI             EQU RAM_START + 01Ah
_PORTL             EQU PORTB
_PORTH             EQU PORTC
_TRISL             EQU TRISB
_TRISH             EQU TRISC
 INCLUDE "REHA_~1.MAC"
 INCLUDE "PBPPIC14.LIB"
 MOVE?CB 007h, ADCON1
 MOVE?CB 00Fh, TRISA
 MOVE?CB 000h, TRISB
 MOVE?CB 000h, PORTB
 PAUSE?C 001F4h
 LCDOUT?C 0FEh
 LCDOUT?C 001h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 049h
 LCDOUT?C 059h
 LCDOUT?C 049h
 LCDOUT?C 020h
 LCDOUT?C 047h
 LCDOUT?C 055h
 LCDOUT?C 04Eh
 LCDOUT?C 04Ch
 LCDOUT?C 045h
 LCDOUT?C 052h
 LCDOUT?C 0FEh
 LCDOUT?C 0C0h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 044h
 LCDOUT?C 054h
 LCDOUT?C 04Dh
 LCDOUT?C 046h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 04Bh
 LCDOUT?C 04Fh
 LCDOUT?C 04Eh
 LCDOUT?C 054h
 LCDOUT?C 052h
 LCDOUT?C 04Fh
 LCDOUT?C 04Ch
 LABEL?L _YENILE
 AND?BCB PORTA, 00Fh, _UMUMI
 CMPEQ?BCL _UMUMI, 000h, _YENILE
 CMPGE?BCL _UMUMI, 009h, L00002
 GOSUB?L _TABLO
 OR?BBB PORTB, _CIKIS, PORTB
 LCDOUT?C 0FEh
 LCDOUT?C 001h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUTD?B _UMUMI
 LCDOUT?C 02Eh
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 041h
 LCDOUT?C 04Ch
 LCDOUT?C 020h
 LCDOUT?C 041h
 LCDOUT?C 04Bh
 LCDOUT?C 054h
 LCDOUT?C 049h
 LCDOUT?C 046h
 LCDOUT?C 0FEh
 LCDOUT?C 0C0h
 LCDOUT?C 020h
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 020h
 LCDOUT?C 026h
 LCDOUT?C 020h
 LCDOUT?C 042h
 LCDOUT?C 045h
 LCDOUT?C 052h
 LCDOUT?C 048h
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LABEL?L _DNTL
 AND?BCB PORTA, 00Fh, _DENET
 LXOR?BBL _UMUMI, _DENET, _YENILE
 GOTO?L _DNTL
 CMPNE?BCL _UMUMI, 00Ah, L00004
 MOVE?CB 000h, PORTB
 LCDOUT?C 0FEh
 LCDOUT?C 001h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 054h
 LCDOUT?C 055h
 LCDOUT?C 04Dh
 LCDOUT?C 020h
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 041h
 LCDOUT?C 04Ch
 LCDOUT?C 04Ch
 LCDOUT?C 041h
 LCDOUT?C 052h
 LCDOUT?C 0FEh
 LCDOUT?C 0C0h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 050h
 LCDOUT?C 041h
 LCDOUT?C 053h
 LCDOUT?C 049h
 LCDOUT?C 046h
 LABEL?L L00004
 CMPNE?BCL _UMUMI, 00Bh, L00006
 LABEL?L _SRGL
 PAUSE?C 001h
 AND?BCB PORTA, 00Fh, _DENET
 GOTO?L _SRGL
 LABEL?L _PASIF_Y
 LCDOUT?C 0FEh
 LCDOUT?C 001h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 048h
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 047h
 LCDOUT?C 049h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 041h
 LCDOUT?C 04Ch
 LCDOUT?C 0FEh
 LCDOUT?C 0C0h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 050h
 LCDOUT?C 041h
 LCDOUT?C 054h
 LCDOUT?C 049h
 LCDOUT?C 04Ch
 LCDOUT?C 053h
 LCDOUT?C 049h
 LCDOUT?C 04Eh
 LABEL?L _PASIF_BEK
 AND?BCB PORTA, 00Fh, _DENET
 ASM?
   NOP   
 ENDASM?
 CMPEQ?BCL _DENET, 000h, _PASIF_BEK
 AND?BCB PORTA, 00Fh, _UMUMI
 GOSUB?L _TABLO
 AND?BBB PORTB, _CIKIS, _DENET
 CMPEQ?BCL _DENET, 000h, _GEC
 XOR?BBB PORTB, _CIKIS, PORTB
 LCDOUT?C 0FEh
 LCDOUT?C 001h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUTD?B _UMUMI
 LCDOUT?C 02Eh
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 041h
 LCDOUT?C 04Ch
 LCDOUT?C 020h
 LCDOUT?C 050h
 LCDOUT?C 041h
 LCDOUT?C 053h
 LCDOUT?C 049h
 LCDOUT?C 046h
 LCDOUT?C 0FEh
 LCDOUT?C 0C0h
 LCDOUT?C 020h
 LCDOUT?C 045h
 LCDOUT?C 052h
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 020h
 LCDOUT?C 026h
 LCDOUT?C 020h
 LCDOUT?C 042h
 LCDOUT?C 045h
 LCDOUT?C 052h
 LCDOUT?C 048h
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 GOTO?L _SRGL2
 LABEL?L _GEC
 LCDOUT?C 0FEh
 LCDOUT?C 001h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 042h
 LCDOUT?C 055h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 04Bh
 LCDOUT?C 041h
 LCDOUT?C 04Eh
 LCDOUT?C 041h
 LCDOUT?C 04Ch
 LCDOUT?C 0FEh
 LCDOUT?C 0C0h
 LCDOUT?C 002h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 020h
 LCDOUT?C 050h
 LCDOUT?C 041h
 LCDOUT?C 053h
 LCDOUT?C 049h
 LCDOUT?C 046h
 LABEL?L _SRGL2
 AND?BCB PORTA, 00Fh, _DENET
 LXOR?BBL _UMUMI, _DENET, _YENILE
 GOTO?L _SRGL2
 LABEL?L L00006
 PAUSE?C 004h
 GOTO?L _YENILE
 LABEL?L _TABLO
 LOOKUP?BCLB _UMUMI, 009h, L00001, _CIKIS
 LURET?C 000h
 LURET?C 001h
 LURET?C 002h
 LURET?C 004h
 LURET?C 008h
 LURET?C 010h
 LURET?C 020h
 LURET?C 040h
 LURET?C 080h
 LABEL?L L00001
 RETURN?
 END

pic16f877 ile çizgi izleyen robot

Sensörler yardımı ile çizgi takip eden araba

Deney Amacı: PIC 16F877 programlanması ve elektronik devre dizaynı

Deney Mazemeleri:
*3 adet sensör
*1adet opamp entegresi
* 1adet sensör hassasiyet ayar düğmesi
*1adet kristal osilatör
*1 adet reset düğmesi
*3 adet led
*1adet 16f877 pic
*2 adet güç transistörü
*2 adet 22 ohm 1waat drenç
*2 adet bc 256 transistör
*4 adet mercimek kondansatör
*8 adet drenç
*2 adet kondansatör
*1 adet çift motorlu oyuncak araba

Deneyin yapılışı: Baskı devresi çizili olan kağıdı bakır plakaya yapıştırarak yada bakı kalemi ile bakır plaka çizilerek devre şeması çıkarılır.Hazırlamış olduğumuz karışımın        (tuz ruhu ,phidrol)  içine atarak bakır levhada  sadece devre şemasının kalana kadar bekletiriz.Dikkat etmemiz gereken husus karışımın ayarını iyi yapmak, baskıdaki çizgilerin(devre yolları) birleşmemesi ve silinmemesidir.Devreyi bakır plakaya  çıkardık dan  sonra gerekli yerlerden delinerek lehimleme kalır.Burada da doğru yönde dikkat etmek gerekir.
            PİC’e  aşağıdaki programı yükleyip yerine  takarız.
 LIST P=16F877
            INCLUDE   "P16F877.INC"
            __CONFIG(_WDT_OFF&_XT_OSC&_PWRTE_ON&_CP_OFF)


START
            BSF     STATUS,5
            CLRF  TRISC
            MOVLW        H'07'
            MOVWF        TRISE
           
            MOVLW        H'07'
            MOVWF        ADCON1

            BCF    STATUS,5
            CLRF  PORTC
            MOVLW        H'FF'
            MOVWF        PORTE

DONGU
            BTFSS            PORTE,0
            CALL DUZ
            BTFSS            PORTE,1
            CALL SAG
            BTFSS            PORTE,2
            CALL SOL
            GOTO DONGU


SAG   
            MOVLW        H'02'
            MOVWF        PORTC
            RETURN

SOL   
            MOVLW        H'01'
            MOVWF        PORTC
            RETURN
           
DUZ  
            MOVLW        H'03'
            MOVWF        PORTC
            RETURN

            END
           
            Sensörler beyaz renge duyarlı olduğu için siyah zemin üzerine beyaz çizgi(sensörlerin plakasının genişliğinde) çizilir.Dönüşler ani olmazsa verim daha iyi olur.Sağa dönmek için sol motor ,Sola dönmek için sağ motor dönmeli, iler içinde her iki motorda aktif olmalıdır..

Sonuç:Böyle bir robot yamak için pic 16f877’nin programlamasını,elektronik malzemelerin hakkında her türlü bilgiyi,baskı devre yapımını öğrenmiş olduk…

PİC BASİC

mikrodenetleyicileri programlamak için geliştirlen bu dil ile kolaylıkla yazılımları hazırlayabilirsiniz. Bu derleyicinin demo (kod sınırlaması) sürümünü  BURAYA TIKLAYARAK  indirebilirsiz.

picbasic ile yazılmıs pic16f628 için bir yazılım örneği:
-------------------------------------------------------------------------------------------------------------
PORTA = 0
PORTB = 0
TRISA=000001   'A portu A.0 giriş diğerleri çıkış yapıldı.
TRISB=000000   'B portu tamamı çıkış yapıldı.
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628
@ DEVICE pic16F628, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'---------------------------değişkenler------------------------------
 AL     VAR  BYTE
 GIRIS  VAR  PORTA.0
 ROLEA  VAR  PORTB.0
 ROLEB  VAR  PORTB.1
 LEDA   VAR  PORTB.6
 LEDB   VAR  PORTB.7
'-----------------------------B A Ş L A N G I Ç ---------------------------
CMCON = 7
Clear _
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
pause 500
PORTB = 0 'tüm çıkışlar low seviyesinde
'-------------------------------------------------------------------------------
BASLA:
       SerIn2 GIRIS, 396, [WAIT ("ETE"),AL]
     
       If AL = 88 Then
          TOGGLE LEDA
          TOGGLE ROLEA
       End If
          
       If AL = 66 Then
          TOGGLE LEDB
          TOGGLE ROLEB
       End If
       pause 200
       GoTo BASLA
End

PİC C

pic c de mikrodenetleyiciler için tasarlanmıs bir yazılım geliştirme ortamıdır bu pic basic e oranla biraz daha zor dur kullanıcının amacına göre farklılık gösterebilir pic basic ile yazılan bi kod pic c ile de yapılabilir fakat tabiki de aynı kodlar ile değil.her derleyicinin kendine özgü bir yazım kuralı ve komut isimleri vardır.
pic c yi geliştiren bazı yazılım sirketlerinden en çok kullanılanlar CCS PİC C ve HI-TECH programlarıdır bunlar lisanslı programlardır demo sürümlerini ücretsiz kullanabilirsiz.

pic c ye örnek bir program

#include <pic.h>
#include "Delay.c"
void interrupt isr(void)
{
if(RB1==0)
RB2=1;
else
RB3=1;
DelayMs(5);
INTF=0;
}
void main(void)
{

TRISA=0X00;
TRISB=0b00000011;
INTEDG=1;
INTE=1;
GIE=1;
while(1)
PORTB=0;
}

PİC ASEMBLY

Çift döngülü zaman geciktirme alt programına örnek program. PortB’ye bağlı olan tüm LED’leri belirli zaman aralıklarıyla yakıp-söndürür

LIST P=16F628A
 INCLUDE "P16F628A.INC"
 __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;----------------------------------------------------------
SAYAC1     EQU H'20' ;SAYAC1 saklayıcısının adresi
SAYAC2     EQU H'21' ;SAYAC2 saklayıcısının adresi
                    CLRF PORTB ;PortB'yi sıfırla
                    BANKSEL TRISB ;BANK1'e geç
                    CLRF TRISB ;PortB'nin tüm uçları çıkış
                    BANKSEL PORTB ;BANK0'a geç
TEKRAR
                   MOVLW h'00'
                   MOVWF PORTB
                   CALL GECIKME
                   MOVLW h'FF'
                   MOVWF PORTB
                   CALL GECIKME
                   GOTO TEKRAR
GECIKME  ;Alt program başlangıcı
                  MOVLW h'FF'  ;Dış döngü (M sayısı)
                  MOVWF SAYAC1
DONGU1
                  MOVLW h'FF'  ;İç döngü (Nsayısı)
                  MOVWF SAYAC2
DONGU2
                  DECFSZ SAYAC2, F
                  GOTO DONGU2
                  DECFSZ SAYAC1, F
                  GOTO DONGU1
                  RETURN
                  END



BTFSC ve BTFSS komutlarının çalışmasını gösteren program. PortA’nın 0. bitine bağlı butona basınca PortB’nin 0. bit’indeki LED’i söndürür, PortA’nın 4. bit’indeki butona basınca da aynı LED’i yakar.

 LIST P=16F628A
 INCLUDE "P16F628A.INC"
 __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;----------------------------------------------------------
                         ORG  h'0000'
                         CLRF  PORTB  ;PORTB'ye bağlı LED'leri söndür
                         BANKSEL TRISB  ;BANK1'e geç
                         MOVLW b'11111110' ;W saklayıcıya h'08' yükle
                         MOVWF TRISB  ;RB0 çıkış diğerleri giriş
                         MOVLW b'11111111' ;W saklayıcıya h'FF' yükle
                         MOVWF TRISA  ;PORTA uçlarının tümü giriş
                         BANKSEL PORTB  ;BANK0'a geç
                         MOVLW h'07'  ;W saklayıcıya b’00000111’ yükle
                         MOVWF CMCON  ;PORTA girişleri dijital I/O
 TEST_PORTA
                         BTFSS PORTA,0  ;A port’unun 0. bit’ini test et
                         BCF  PORTB,0  ;"0"sa PORTB.0'daki LED'i söndür
                         BTFSS PORTA,4  ;A port’unun 4. bit’ini test et
                         BSF  PORTB,0  ;"0"sa PORTB.0'daki LED'i yak
                        GOTO  TEST_PORTA ;PORTA'yı tekrar test et
                        END

Genel olarak pic komut setlerti



SUBWF  f,d
Subract W from f
f den w yi çıkart



SWAPF  f,d
Swap nibles in
f
F nin 4 lü bitlerinin
yerini değiştir



XORWF  f,d
Exclusive OR w with F
w ile f ye EXOR işlemi yap





ADDLW  k
Add literal and w
k yı w ye ekle



ANDLW  k
And literal with k
k yı w ile And le



CALL  k
Call subroutine k
k altyordamını çağır



CLRWDT
Clear Watchdog Timer
watchdog Timer temizle



GOTO  k
Goto address k
k etiketine git



IORLW  k
Inclusive or literal k with w
w ile k yı IOR la



MOVLW  k
Move literal k to w
k yı w ye taşı



RETFIE
Return from interrupt
kesmeden dön


RETLW  k
Return with literal in
w
k yı w ye yükle ve dön


RETURN

Return from subroutine
Altyordamdan dön



SLEEP
Go into standby mode
Yat uyu, heç bişeycik yapma



SUBLW  k
Subtract w from literal k
w yi k dan çıkart



EXORLW  k
Exclisive OR literal k with W
k yı w ile Exor la