E

Neden MikroC..?

Başlatan Erata, 04 Kasım 2012, 08:29:40

Burak

PIC micro'lar kullanım alanı en yaygın mikrodenetleyiciler olduğundan , hitab ettikleri derleyicilerde dolayısıyla yıllardır geniş sayılara ulaştı .. Ama maalesef Microchip firmasıda her datasheet'te artık gözümüze sokarcasına "C diline optimize edilmiş mimariye sahiptir" diyerek Basic kullanıcılarını ötekileştiriyor .. Bunun RISC mimarisiyle bir alakası yok bu arada .. Sadece assembler ile derleyici arasındaki koordinasyon açısından bir optimizasyon mevcut , yani olay tamamen işlemci yığın biriminin vektörel dallanma sistematiği ile alakalı ... C, Program hafızasını çok daha etkin ve idareli kullanıyor , tabii ki bunu çok uzun programlarda farkediyorsunuz .. Bende birçok kişi gibi syntax kolaylığını önemseyen birisiyim ... Dolayısıyla basic ile olan dostluğum hiç bitmeyecek gibi görünüyor , çünkü bugüne kadar PIC'e basic ile yaptıramadığım birşey olmadı ..

Burak
Ω Gens Una Sumus Ω

sinbeipta

Alıntı yapılan: Erata - 04 Kasım 2012, 08:29:40
1. Zengin Kütüphanesi
2. Diger dillere göre daha az kaynak kullanması  (Assembler haric tabi :))
3. Tum işlemlerin debug dahil  yazılımı derlenmesi hatta pic e program aktarılmasi tek bir yazılım (kullanıcı arayuzu ile yapılabilmesi (easypic serisi boardlar yardımı ile hardware debug ve programlama )
4. örnek programlarının hepsinin bir proje gibi olması
5. LCD,GLCD,USB,RS232,MMC,SD, TouchScreen(dokunmatik ekran)  gibi  hardware kullanımında yazılımın çok kolay olması

Easypic serisi  deneme boardları sayesinde pic sök programla tak gibi işlerle ugraşmadan program denemeleri yapılarak çok cabuk proje oluşturabilme
gibi özellikler sayılabilir

merhaba hocam mikroC kullanarak tristörlü dc dimmer devresi yapmaya çalışıyorum ama bir noktada tıkandım. Yardımcı olabilir misiniz ?

ete

MicroC den anlamam. Ben yanlızca Pic Basic Pro ile program yazıyorum.

Dimmer mantığı konuusnda yardımcı olabilirim ancak.
Yapman gerekenler şunlar;
- İyi bir sıfır geçiş yakalama devresi ayarlaman gerekiyor. şebek voltajının her sıfır noktasından geçişinde bir kesme oluşturacaksın. Bunun için sıfır geçiş sinyalini PORTB.0 (yada INT) pininden girerek bu kesmeleri oluşturacaksın.
- Devrende dim oranını belirlemek amacı ile ya bir pot yada iki buton kullanman gerekiyor. Bu elemanlardan birini kullanarak 0-9000 us arasında bir değer belirleyeceksin. Normalde bu süre 10.000us dir ancak komut gecikmeleri süreyi yaklaşık 9000 us olarak kullandırır.

Kesme oluştuğu zaman, dim süresi kadar bekleyip ardından Tristörü ateşleyeceksin. yaklaşık 100us bekleyip ateşlemeyi keseceksin. Sen kesmiş olsan da tristör bir kere tetiklendimi iletimde kalacak ancak sıfır noktasında otomatikman reset olacaktır.
Hepsi bu kadar. MOC3021 gibi bir optotriac ile tristörü tetiklemen gerekiyor. Bu opto da sıfır geçiş yakalama yoktur. Sen yakaladığın için gerek de yoktur.

Ete

sinbeipta

#18
Alıntı yapılan: ete - 05 Mart 2016, 19:47:13
MicroC den anlamam. Ben yanlızca Pic Basic Pro ile program yazıyorum.

Dimmer mantığı konuusnda yardımcı olabilirim ancak.
Yapman gerekenler şunlar;
- İyi bir sıfır geçiş yakalama devresi ayarlaman gerekiyor. şebek voltajının her sıfır noktasından geçişinde bir kesme oluşturacaksın. Bunun için sıfır geçiş sinyalini PORTB.0 (yada INT) pininden girerek bu kesmeleri oluşturacaksın.
- Devrende dim oranını belirlemek amacı ile ya bir pot yada iki buton kullanman gerekiyor. Bu elemanlardan birini kullanarak 0-9000 us arasında bir değer belirleyeceksin. Normalde bu süre 10.000us dir ancak komut gecikmeleri süreyi yaklaşık 9000 us olarak kullandırır.

Kesme oluştuğu zaman, dim süresi kadar bekleyip ardından Tristörü ateşleyeceksin. yaklaşık 100us bekleyip ateşlemeyi keseceksin. Sen kesmiş olsan da tristör bir kere tetiklendimi iletimde kalacak ancak sıfır noktasında otomatikman reset olacaktır.
Hepsi bu kadar. MOC3021 gibi bir optotriac ile tristörü tetiklemen gerekiyor. Bu opto da sıfır geçiş yakalama yoktur. Sen yakaladığın için gerek de yoktur.

Ete

Hocam yardımınız için teşekkür ederim, mantığını anladım olayın ama yazılımında bir problem var ve bir türlü çözemedim.
bu yazılımım

unsigned int x;
unsigned char FlagReg;
sbit ZC at FlagReg.B0;
void interrupt()
{
if (INTCON.INTF){ //kesme oluşması için INTCON.INTF bayrağı kaldırdı
ZC = 1;
INTCON.INTF = 0;
}
}
unsigned int sayi1, sayi2;


void main() {

ADCON0 =0b00000001;
    ADCON1 =0x0C;

TRISA= 0b00000001;
TRISD = 0b11111110; // RD0 is output
TRISB = 0x01; //RB0 giriş yapıldı


OPTION_REG.INTEDG = 1; //yükselen  kenarda tetikleme
INTCON.INTF = 0; // INT bayrağını sil
INTCON.INTE = 1; //Rb0 KESMESİNE MÜSADE ET
INTCON.GIE = 1; //BÜTÜN KESMELERE MÜSADE ET
do
{
     x = ADC_Read(0);   // Get 10-bit results of AD conversion
    //PORTD  = temp_res;
    //PORTE = temp_res >> 8;    // Send 2 most significant bits to RC1, RC0

      sayi1 =x;          // okunan değer
      sayi2 = sayi1/10;
      if(sayi2>42){
      sayi2=sayi2-1;
      }
      if(sayi2>84){
      sayi2=sayi2-1;
     }
     sayi2=sayi2/10;
if (ZC){ //zero crossing oluştu


delay_ms(x); // tetikleme pulsenin gecikme süresi    (ÇALIŞMAYAN KISIM)


PORTD.b0 = 1;
delay_us(1000); //1000us pulse göndersin
PORTD.f0 = 0;
ZC = 0;
}
  }
while(1);
}

resimdekilerde sıfır geçiş devrem sizce iş görür mü ?

LUTFEN KODLARI KOD EKLE (#) BUTONU ILE PAYLASINIZ !!!!!!!!!!!!!

Powered by EzPortal