Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

18f46k22 ile led yakamama

Başlatan Eski Klasör, 21 Ağustos 2013, 14:29:44

Eski Klasör

Arkadaşlar abilerim hocalarım bundan 3 5 gün önce uzun zamandır ayrı kaldığım Pic dünyasına geri döndüm ve pickit3  smd 44 pin ve normal 40 pin  18k46k22 aldım.

Ccs-c ile programlama yapıyorum (yani yapamıyorum). Proteus 8 kullanıyorum

Ama şu anda bir led dahi yakamıyorum :D

bana sigorta ayarı icin "cyclone" hocam kod verdi.

#include <18F46k22.h>
#device *=16
#fuses NOMCLR,INTRC,PLLEN,WDT256
#use delay(clock=64m,internal=16m,restart_wdt)


64Mhz dahili osilatör ile kullanmak icin gerekli sigorta ayarıymış

bende yavaş yavaş pratik olsun diye bu şekilde 877 icin yazılmış kodda değişiklik yaptım türk aklı ile calışmadı :D

#include <18F46k22.h>
#device *=16
#fuses NOMCLR,INTRC,PLLEN,WDT256
#use delay(clock=64m,internal=16m,restart_wdt)

#use fast_io(a) // Port yönlendirme komutları a portu için geçerli


void main ()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

set_tris_a(0x00);    // a portu komple çıkış olarak yönlendiriliyor
output_a(0x00);        // a portu çıkışı komple sıfır yapılıyor.

basla:               // Etiket ismi
      delay_ms(2000);
   output_high(pin_a0);
      delay_us(1000);
   output_low(pin_a0);

goto basla;           // basla etiketine dallanılıyor
}


Daha sonra kodun ortasında duran void main den mi kaynaklanıyor dedim orayı sildim şu şekilde .

#include <18F46k22.h>
#device *=16
#fuses NOMCLR,INTRC,PLLEN,WDT256
#use delay(clock=64m,internal=16m,restart_wdt)

#use fast_io(a) // Port yönlendirme komutları b portu için geçerli


void main ()
{
  
set_tris_a(0x00);    // a portu komple çıkış olarak yönlendiriliyor
output_a(0x00);        // a portu çıkışı komple sıfır yapılıyor.

basla:               // Etiket ismi
      delay_ms(2000);
   output_high(pin_a0);
      delay_us(1000);
   output_low(pin_a0);

goto basla;           // basla etiketine dallanılıyor
}


İşin güzel tarafı gene calışmadı :D (demekki deneme yanılma ile olmuyor bu işler)


Daha önce 46k22 40 pin dip soket diye geciyor heralde calışan abimiz hocamız varsa detaylı olarak yardım ederseniz cok mutlu olur 4 5 saattir uğraştığım ayarlardan beni kurtarmış olursunuz.

skara1214

neden wdt kullanıyorsun? onu kapat bir kere ,pll yide kapat bu şekilde çalışırsa sonra eklersin diğerlerini
edit: şimdi dikkat ettim delay_us(1000) yazmıssın onu ms e çevir bu şekilde zaten yandığını göremezsin
Herkes ölür ama herkes gerçekten yaşamaz

yasin_arsln

Proteusta 18F46k22 'nin çalışma frekansını 64 mhz yap.
#include <18F46k22.h>
#device *=16
#fuses NOMCLR,INTRC,PLLEN,WDT256
#use delay(clock=64m,internal=16m,restart_wdt)

#use fast_io(a) // Port yönlendirme komutları a portu için geçerli


void main ()
{
//!   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

set_tris_a(0x00);    // a portu komple çıkış olarak yönlendiriliyor
output_a(0x00);        // a portu çıkışı komple sıfır yapılıyor.

basla:               // Etiket ismi
      delay_ms(2000);
   output_high(pin_a0);
      delay_us(1000);
   output_low(pin_a0);

goto basla;           // basla etiketine dallanılıyor
}


Bu şekilde çalışıyor fakat döngü süresi baya uzun sürüyor. Pic'e hex kod yerine .cof kodu yükle ve debug yap. Output_high(pin_a0)'da işaretle çalıştığını farkedeceksin.

Okan AKÇA

Alıntı yapılan: skara1214 - 21 Ağustos 2013, 16:20:27
neden wdt kullanıyorsun? onu kapat bir kere ,pll yide kapat bu şekilde çalışırsa sonra eklersin diğerlerini
edit: şimdi dikkat ettim delay_us(1000) yazmıssın onu ms e çevir bu şekilde zaten yandığını göremezsin
wdt sigortası acılmış ancak aktif edilmedigi icin  main icinde  on yapılmadıgı icin pasiftir.

Eski Klasör

#include <18F46k22.h>
#device *=16
#fuses NOMCLR,INTRC,PLLEN,WDT256
#use delay(clock=64m,internal=16m,restart_wdt)
#use fast_io(a) // Port yönlendirme komutları a portu için geçerli

void main ()
{
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

set_tris_a(0x00);    // a portu komple çıkış olarak yönlendiriliyor
output_a(0x00);        // a portu çıkışı komple sıfır yapılıyor.

basla:               // Etiket ismi
      delay_ms(500);
   output_high(pin_a0);
      delay_ms(500);
   output_low(pin_a0);
goto basla;           // basla etiketine dallanılıyor
}

Bu şekilde calıştı.

setup_psp(PSP_DISABLED);        // PSP birimi devre dışı

ancak bu kodu ekleyince calışmıyor ki Ccs-c de hata veriyor peki nedir bu PSP birimi ?

Ve son olarak...
#include <18F46k22.h>
#device *=16
#fuses NOMCLR,INTRC,PLLEN,WDT256
#use delay(clock=64m,internal=16m,restart_wdt)

void main ()
{
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

Burada yazmış olduğum ayarlarda extra bir özellik kullanmadığım zaman sabit kalacak anladığım kadarıyla

skara1214

paralel  port  kullandığın picte olmayabilir
Herkes ölür ama herkes gerçekten yaşamaz

sadogan

#include <18f46k22.h> 
#device *=16
#device adc=10
#fuses NOWDT,PUT,INTRC_IO,noMCLR
#use delay(clock=16000000) 
#include <math.h>
#use standard_io(C)
#use standard_io(B)
#define LED pin_b3
void McuInit(void)
{
   setup_oscillator(OSC_16MHZ);
   setup_spi(SPI_SS_DISABLED);     
   setup_spi(FALSE); 
   setup_timer_1(T1_DISABLED);     
   setup_timer_2(T2_DISABLED,0,1); 
   setup_comparator(NC_NC_NC_NC);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);   
   set_tris_a(0b00000000);
   set_tris_b(0b00000000);
   set_tris_c(0b00000000);

}
void main()
{ 
   McuInit();
   while(TRUE)
   { 
         output_low(LED);
         delay_ms(500);
         output_high(LED);
         delay_ms(500);

   }
 
}

LED Yak söndür.