ardiuno kodlarını basıc koduna çevirme

Başlatan Evren Kılıç, 20 Şubat 2018, 12:48:03

Evren Kılıç

merhaba arkadaşlar,
aşağıda led ile alev efekti yapma devresinin kodları var, bu kodları pıc basıc koduna nasıl çevrilir ve hangi işlemciyi kullanmak gerekir, bu konuda yardımcı olabilirmisiniz?
https://www.youtube.com/watch?v=3UzIEwb9-aw

/* LED'ler Arduino' nun PWM çıkışı veren uçlarına bağlanır. Arduino kullanmayı biliyorsanız, bu yerlerin neler olduğunu biliyorsunuzdur. Eğer yeni başladıysanız, Arduino'yu açıkladığımız yazılarımızı okuyabilirsiniz.*/

int ledPin1 = 9;

int ledPin2 = 10;

int ledPin3 = 11;

void setup()

{

pinMode(ledPin1, OUTPUT);

pinMode(ledPin2, OUTPUT);

pinMode(ledPin3, OUTPUT);

}

void loop()

{

/* Ana program döngüsü içerisinde LED'lere 0 ile 120 arasında rastgele bir değer gönderilir; LED parlaklığını tam olarak almak için 135 değeri eklenir */

analogWrite(ledPin1, random(120)+135);

analogWrite(ledPin2, random(120)+135);

analogWrite(ledPin3, random(120)+135);

delay(random(100));

}


ete

#1
3 adet donanımsal PWM çıkışı olan bir Atmel işlemci kullanılmış sanırım.
Bu işlemcilerin PWM frekansını öyle yarlamış ki Duty değeri 0-255 arasında değer alabilmiş.
Sonra derleyicinin RANDOM yani rastgele rakam üretme fonksiyonunu kullanarak her bir led için 0-120 aralığında bir sayı ürettirmiş. Bu üretilen sayılara 135 ekleyerek bunu PWM çıkışına duty değeri olarak vermiş. Bütün olay bundn ibaret.
Ayrıca gecikme fonksiyonunuda rastgele olarak 0-100 ms aralığında hesaplayarak vermiş. Böylece mumu taklit etmeye çalışmış.

Yeni nesil pic işlemcilerde 3 adet PWM çıkışı mevcut. Onlardan birisi kullanılabilir. Ama ideali 8 bacaklı ve 3 adet PWM çıkışı olan bir işlemci bulmak gerekir varsa tabiiki.


Tek pwm çıkışı kullanılır ise 12F683 ile yapılabilir.
4 Khz lik bir frekans için 1/4 bölme oranı ile PR2=62 alınarak 0-250 arasında duty değeri ile sistemi çalıştırmak mümkün.
İşte kodlar;
@ __CONFIG _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
DEFINE OSC 4
OSCCON=%01100001
CMCON0 = 7
ANSEL=0
WPU=%00001000
OPTION_REG.7=1
GPIO=0
TRISIO=%00001000
T2CON=%00000101
CCP1CON=%00001110
PR2=62
DUTY VAR BYTE
BEKLE VAR BYTE
X VAR WORD

PAUSE 200

BASLA:
RANDOM DUTY
IF DUTY>130 THEN BASLA
X=DUTY+120
CCP1CON.4=X.0
CCP1CON.5=X.1
CCPR1L=x>>2 
GECIKME:   
RANDOM BEKLE   
IF BEKLE>100 THEN GECIKME
PAUSE GECIKME
GOTO BASLA

5 nolu pinden çıkış alıp ledleri süreceksin hepsi bu.

Ete



Evren Kılıç

kodları derlediğim de ekli dosyadaki  hatayı veriyor, ilgili satırda komut kullanımında hata görünmüyor gibi ama anlayamadım

ete

Hata yapmışız. Orada IF GECIKME ... değil IF BEKLE.... olacak.
Düzeltip yeniden derle.
Ete

Evren Kılıç

#5
denedim olmadı bu seferde PAUSE GECİKME  satırında hata verdi

sonmoikan

ABDULLAH

Evren Kılıç

"PAUSE  GECİKME" satırını silip derlediğimde ise isis similasyonunda 12f683 çıkışında bir sinyal göremedim. PWM çıkışı 5 nolu pin galiba


Powered by EzPortal