11 Nisan 2012 Çarşamba

16F628A ile B Portunu Kullanarak Led Animasyonu

ISIS Simülasyon görüntüsü
Bu örnekte 16F628A mikrodenetleyicimizin B portunu kullanarak led animasyonu yapıyoruz. Aşağıdaki kod öbeğinde görüldüğü gibi ledleri farklı sıralarda veya grup olarak yakıp söndürerek kendimizce görsel olarak güzel bir şekilde çalıştırıyoruz. Mantık sokaktaki reklam tabelalarındaki gibi, önce her bir led veya harf sırayla yanıyor. Sonra tüm led veya harfler belirli aralıklarla yanıp sönüyor. Aslında program az birşey döngü veya algoritma kullanılarak daha kısa olurdu fakat anlaşılır olması açısından ve B portuna elle tek tek hükmedilmesini gösterebilmekten dolayı bu şekilde olmasını tercih ettim.

Program kodları:
#include <16F628A.h>                             //derleyiciye denetleyicimizi tanıtıyoruz

#FUSES NOWDT                                     //watch dog timer yok
#FUSES INTRC_IO                                  //dahili rc osilatör seçili
#FUSES PUT                                       //power up timer aktif
#FUSES NOPROTECT                                 //picin okumaya karşı kod koruması yok
#FUSES NOBROWNOUT                                //brownout reset yok
#FUSES NOMCLR                                    //mclr ucu i/o olarak kullanılacak
#FUSES NOLVP                                     //düşük voltajlı programlama pasif
#FUSES NOCPD                                     //eeprom koruması yok

#use delay(clock=4000000)                        //denetleyici osilatör frekansı f=4mhz

void main()                                      //ana döngü
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);      //bu kısımda sonsuz döngüye girmeden önce
   setup_timer_1(T1_DISABLED);                   //bir takım ön ayarlar yapılıyor
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

    while(1)                      //sonsuz döngü
    {
        output_high(pin_b0);      //b portunun 0. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_high(pin_b1);      //b portunun 1. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_high(pin_b2);      //b portunun 2. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_high(pin_b3);      //b portunun 3. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_high(pin_b4);      //b portunun 4. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_high(pin_b5);      //b portunun 5. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_high(pin_b6);      //b portunun 6. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_high(pin_b7);      //b portunun 7. pinini lojik 1 yap
        delay_ms(500);            //500ms bekle
        output_b(0X00);           //b portunu komple hex 00 yani binary 00000000 yap
        delay_ms(500);            //500ms bekle
        output_b(0XFF);           //b portunu komple hex FF yani binary 11111111 yap
        delay_ms(500);            //500ms bekle, burdan sonra devamı aynı...
        output_b(0X00);
        delay_ms(500);
        output_b(0XFF);
        delay_ms(500);
        output_b(0X00);
        delay_ms(500);
        output_b(0XFF);
        delay_ms(500);
        output_b(0X00);
    }
}

Upload yapabileceğim uygun bir yer bulduğumda kod ve simülasyon dosyalarının linkini de ekleyeceğim.

1 yorum:

  1. #include <16F628A.h>

    #FUSES NOWDT //No Watch Dog Timer
    #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
    #FUSES PUT //Power Up Timer
    #FUSES NOPROTECT //Code not protected from reading
    #FUSES NOBROWNOUT //No brownout reset
    #FUSES NOMCLR //Master Clear pin used for I/O
    #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
    #FUSES NOCPD //No EE protection

    #use delay(clock=4000000)

    void main()
    {

    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    //Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

    // TODO: USER CODE!!

    while(1) //sonsuz döngü
    {
    output_high(pin_b0); //b portunun 0. pinini lojik 1 yap
    delay_ms(500); //500ms bekle
    output_high(pin_b1); //b portunun 1. pinini lojik 1 yap
    delay_ms(500); //500ms bekle
    output_high(pin_b2); //b portunun 2. pinini lojik 1 yap
    delay_ms(500); //500ms bekle
    output_high(pin_b3); //b portunun 3. pinini lojik 1 yap
    delay_ms(500); //500ms bekle
    output_high(pin_b4); //b portunun 4. pinini lojik 1 yap
    delay_ms(500); //500ms bekle
    output_high(pin_b5); //b portunun 5. pinini lojik 1 yap
    delay_ms(500); //500ms bekle
    output_high(pin_b6); //b portunun 6. pinini lojik 1 yap
    delay_ms(500); //500ms bekle
    output_high(pin_b7); //b portunun 7. pinini lojik 1 yap
    delay_ms(2000); //500ms bekle
    output_low(pin_b7); //b portunun 7. pinini lojik 1 yap
    delay_ms(40); //500ms bekle
    output_low(pin_b6); //b portunun 6. pinini lojik 1 yap
    delay_ms(35); //500ms bekle
    output_low(pin_b5); //b portunun 5. pinini lojik 1 yap
    delay_ms(30); //500ms bekle
    output_low(pin_b4); //b portunun 4. pinini lojik 1 yap
    delay_ms(25); //500ms bekle
    output_low(pin_b3); //b portunun 3. pinini lojik 1 yap
    delay_ms(20); //500ms bekle
    output_low(pin_b2); //b portunun 2. pinini lojik 1 yap
    delay_ms(20); //500ms bekle
    output_low(pin_b1); //b portunun 1. pinini lojik 1 yap
    delay_ms(20); //500ms bekle
    output_low(pin_b0); //b portunun 0. pinini lojik 1 yap
    delay_ms(20); //500ms bekle
    output_b(0X00); //b portunu komple hex 00 yani binary 00000000 yap
    delay_ms(200); //500ms bekle
    output_b(0XFF); //b portunu komple hex FF yani binary 11111111 yap
    delay_ms(200); //500ms bekle, burdan sonra devamı aynı...
    output_b(0X00);
    delay_ms(200);
    output_b(0XFF);
    delay_ms(200);
    output_b(0X00);
    delay_ms(200);
    output_b(0XFF);
    delay_ms(200);
    output_b(0X00);
    }
    }

    YanıtlaSil