4 kademeli dimmer

bbs2006

Üye
Katılım
13 Kas 2006
Mesajlar
244
Puanları
1
Yaş
47
Merhaba
4 butonlu12 voltulk dc lambanın parlaıklıgını azaltıp artırmak istiyorum..1 butona bastıgım zaman %25 artacak. tekrar 1. butona bastıgım zaman parlaklık azalacak. 1. butona satıktan sonra 2. butona bastıgım zaman parlaklık %50 artacak. 2. butona tekrar bastıgım zaman parlaklık azalacak. %25 düşecek. diğer butonlarad aynı bu şekilde çalışacak. buna ait bir program yazdım. programda bir sıkıntı var. bir bakabilirseniz sevinirim.

#include<16f628a.h>
#fuses intrc,nowdt,noprotect,nowdt,noprotect
#use delay(clock=4000000)

void main(){
setup_ccp1(ccp_pwm);
setup_timer_2(T2_DIV_BY_16,624,1);

set_pwm1_duty(0);
a:
if (input(pin_a0)==1){
set_pwm1_duty(625);
delay_ms(10);
goto kd1;
}
else
goto a;
kd1:
if (input(pin_a0)==1){
set_pwm1_duty(0);
delay_ms(10);}
else

m:
if (input(pin_a1)==1){
set_pwm1_duty(1250);
delay_ms(10);
goto kd2;
}
else
goto a;
kd2:
if (input(pin_a1)==1){
set_pwm1_duty(625);
delay_ms(10);}
else
r:
if (input(pin_a2)==1){
set_pwm1_duty(1875);
delay_ms(10);
goto kd3;
}
else
goto r;
kd3:
if (input(pin_a2)==1){
set_pwm1_duty(1250);
delay_ms(10);}
else
t:
if (input(pin_a3)==1){
set_pwm1_duty(2500);
delay_ms(10);
goto kd4;
}
else
goto t;
kd4:
if (input(pin_a3)==1){
set_pwm1_duty(1875);
delay_ms(10);}

}


100 hz için pwm değeri

%25 için 625
%50 1250
%75 1875
%100 2500 değerleririn alıyor.
 
pwm-buton kontrol kodlarını: while(TRUE) { KODLAR BURAYA} sonsuz bi döngü oluştur. ayriyeten etiket kullanmadan kontrol sağlayabilirsen daha iyi olur. a:
if (input(pin_a0)==1){
set_pwm1_duty(625);
delay_ms(10);
goto kd1;
}
else
goto a;
kd1:
if (input(pin_a0)==1){
set_pwm1_duty(0);
delay_ms(10);}
else



burada kodda yazan yanlış anlamadıysam. ( a "
if (input(pin_a0)==1) " eğer pin a girişindeki butona basıldıysa alttaki komutu işle "else goto a" basılmadıysa git tekrar butonu kontrol et. illa proğramda 1. butona basılıncaya kadar bekleteceksen eger "while(! input(pin_xx)); " diye yaz x pini 1 oluncaya kadar bekler. 1 olunca devam eder. yukarıda senin yapmak isteğini yanlış anlamadıysam giriş çıkış pinlerini derleyicine bildir ve komutlarını şu şekilde yz.

while(TRUE) // sonsuz döngü için
{
while(! input(pin_xx)); //xx pinine bağlı butonuna baılıncaya kadar bekle
........ //xx pinine bağlı butonuna basıldıysa bunları işle
while(input(pin_xx)); //xx pinine bağlı butondan elini çekinceye kadar bekle
while(! input(pin_xx)); //xx pinine 2. kez basılıncaya kadar bekle
.......... //xx pinine 2. kez basılınca bu komutları işle
while(! input(pin_yy)); //yy pinine basılıncaya kadar bekle
...
...
...
}

yok amacım böyle değil. 1. butona 1 kere basarım ardından ister 2. kez basarım işter basmam direk 2. butona basarım gibi bi uypulamaysa ona göre ayarlayım inş.

kolay gelsin kardeşim. inş. yardımcı olabilmişimdir


 
merhaba ilginiz için teşekkür ederim. ben 4 kanallı dokunmatik dimmer yapmak istiyorum. 1. butona dokunduğum zaman lamba %25 parlaklıkta yansın. 2. kez aynı butona basarsam lamba sönsün. 1. butona bastıktan sonra 2. dokunmatik butona bastığım zaman parlaklık % 50 artacak 3. butona bastığım zaman % 75 artacak. 3. butona tekrar bastığım zaman parlaklık% 50 düşecek. şekilde istioyum. yardımcı olursanız sevinirim.
 
cevabınızı bekliyorum
 
kusura bakmayın işlerim vardı yapmak istediğinimz herhalde şöyle bişey.

#define tus_1 pin_xx // pin_xx yerine ilgili tus pini yazılacak
#define tus_2 pin_cc // pin_cc yerine ilgili tus pini yazılacak
#define tus_3 pin_zz // pin_cc yerine ilgili tus pini yazılacak

#define yuzde_0 0 // duty e yazılacak olan %0 doluluk oranı değer
#define yuzde_25 fff // fff yerine duty e yazılacak olan %25 lik değer
#define yuzde_50 kkk // kkk yerine duty e yazılacak olan %50 lik değer
#define yuzde_75 rrr // rrr yerine duty e yazılacak olan %75 lik değer
#define yuzde_100 ttt // ttt yerine duty e yazılacak olan %100 lik değer

int1 tus_1_kontrol=0, tus_2_kontrol=0,tus_3_kontrol=0,tus_4_kontrol=0;

while (TRUE)
{

if(input(tus_1)) // tus 1 e basılsıysa
{
delay_ms(10); // tuş arkına karşılık azcık bekle
if(tus_1_kontrol==0) { tus_1_kontrol=1; set_pwm1_duty(yuzde_25); } // tuşa ilk kez nasıldıysa lambayı %25 yak
else { tus_1_kontrol=0; set_pwm1_duty(yuzde_0); } // tuşa ikinci kez basıldıysa lambayı sönder.
while(input(tus_1)); // tuşdan elini çekinceye kadar bekle
}

if(input(tus_2)) // tus 2 e basılsıysa
{
delay_ms(10));
if(tus_2_kontrol==0) { tus_2_kontrol=1; set_pwm1_duty(yuzde_50); }
else { tus_2_kontrol=0; set_pwm1_duty(yuzde_0); }
while(input(tus_2));
}

if(input(tus_3)) // tus 3 e basılsıysa
{
delay_ms(10));
if(tus_3_kontrol==0) { tus_3_kontrol=1; set_pwm1_duty(yuzde_75); }
else { tus_3_kontrol=0; set_pwm1_duty(yuzde_0); }
while(input(tus_3));

}

if(input(tus_4)) // tus 4 e basılsıysa
{
delay_ms(10);
if(tus_4_kontrol==0) { tus_4_kontrol=1; set_pwm1_duty(yuzde_100); }
else { tus_4_kontrol=0; set_pwm1_duty(yuzde_0); }
while(input(tus_4));
}
}

istersen değişik bi şey yapacaksan onlarıda tasarlayabilirsin mesela tus1 e basıldığında %25 duty olsun . tus2 ye bastığında %50 olsun tus 1 e tekrar bastığında %25e dussun ama enson bastığın tusa tekrar basınca lamba sonsun istersen aşağıdaki gibi tasarla


if(input(tus_1)) // tus 1 e basılsıysa
{
delay_ms(10); // buton arkına karşılık azcık bekle
if(tus_1_kontrol==0) { tus_1_kontrol=1; set_pwm1_duty(yuzde_25); } // tuşa ilkkez basıldıysa lambayı yak
else { tus_1_kontrol=0; set_pwm1_duty(yuzde_0); } // ikinci kez basıldıysa lambayı sönder
tus_2_kontrol=0;
tus_3_kontrol=0;
tus_4_kontrol=0;
while(input(tus_1));
}

yukarıda aynen şu işlemi yapar; tus1 e basıldığında %25 duty ayarlar ve diğer tus_1_kontrol kontrol edilerek 1 se 0 , 0 sa 1 yapılır. tus_1_kontrol değişkeni ile lambanın yanık mı? sönuk mü olduüunu kontrol ediyoruz.tekrar tuşa basıldığında ona göre işlem yapıyoruz. diğer tuşların tus_x_kontrol değerlerinide sıfırlıyoruz ki; tus_1 e basınca %25 duty olsun. tus_2 ye basınca %50 duty olsun, tekrar tus_1 e basılınca lamba sönmesin %25 duty olsun ama tus_1 ardarda 2. kez basılınca lamba sönsün. diğer pwm kurulumu vs. halledersin diye ve öğrenebilesin diye hazır olarak tam bir proğram yazıp vermiyorum. proğramı çok kolay anlaşılacak şekilde yazdığımı umuyorum. yazım hataları olabilir kusura bakma. inşallah anlayabilmişimdir ve anlatabilmişimdir.

kolay gelsin.
 
merakımı mazur görün; bu işlemi ödev olarak mı verdiler yoksa hobi olarak mı yapıyorsunuz. yani 2 tuşla artırma ve azaltma yapabilecekken neden 4-5 tuşla sabit değerler kullanarak yapmaya çalışıyorsunuz. mesela maximum duty 900 olan bideğer için 10 ar 10 ar artırma ve azaltma yapıp 90 farklı ışık elde edebilecekken neden 4 tuşla 4 farklı ışık?

yani şöyle bişey neden değil. yukarı tuşa baılınca ışığı 10 artır aşağı tuşa basılınca 10 azalt tuşlardan herhangi birine 3 saniye basılınca lambayı sönder. yada açma kapama için de 1 tuş ayarlayabilrisin; tus_1 açma kapama için. tus_2 artırmak için, tus_3 azaltmak için. gibisinden?,
 
Merhaba
ben ögencilerimize tübitak kapsamında proje yaptırıyoruz. bu proje ögrenciden geldi. ve dokunmatik olarak ışık seviyesini ayarlayıp artırmak için yapıyoruz. dediğiniz şekilde olsa zaren kolyaca yapabilirim. ben birçok uygulamalar yaptım. dokunmatik sensörüde 4011 enetgetresiyle gerçekleştirdim. ilginiz için teşekkür ederim. sizinle irtibatı sürdürmek isterim. selam.
 
Merhaba
programı sizin dediginiz gibi yazdum. yazılımı veriyorum.
#include<16f628a.h>
#fuses intrc,nowdt,noprotect,nowdt,noprotect
#use delay(clock=4000000)
#define tus_1 Pin_a0
#define tus_2 Pin_a1
#define tus_3 pin_a2
#define tus_4 pin_a3
#define yuzde_0 0 // doluluk oranı
#define yuzde_25 625 //100 hz için uygulanmıştır.
#define yuzde_50 1250
#define yuzde_75 1875
#define yuzde_100 2500
int1 tus_1_kontrol=0, tus_2_kontrol=0,tus_3_kontrol=0,tus_4_kontrol=0;

void main(){
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,624,1);
set_pwm1_duty(yuzde_0);
while(true){
if (input(tus_1)){
delay_ms(10);
if(tus_1_kontrol==0){tus_1_kontrol=1;set_pwm1_duty(yuzde_25);}//tusa ilk kez basıldıysa %25 yak
else { tus_1_kontrol=0; set_pwm1_duty(yuzde_0); }
while(input(tus_1)); }
if (input(tus_2)){
delay_ms(10);
if(tus_2_kontrol==0){tus_2_kontrol=1;set_pwm1_duty(yuzde_50);}//2.tusa ilk kez basıldıysa %50 yak
else { tus_2_kontrol=0; set_pwm1_duty(yuzde_25); }
while(input(tus_2)); }
if (input(tus_3)){
delay_ms(10);
if(tus_3_kontrol==0){tus_3_kontrol=1;set_pwm1_duty(yuzde_75);}//3.tusa ilk kez basıldıysa %75 yak
else { tus_3_kontrol=0; set_pwm1_duty(yuzde_50); }
while(input(tus_3)); }
if (input(tus_4)){
delay_ms(10);
if(tus_4_kontrol==0){tus_4_kontrol=1;set_pwm1_duty(yuzde_100);}//4.tusa ilk kez basıldıysa %100 yak
else { tus_4_kontrol=0; set_pwm1_duty(yuzde_75); }
while(input(tus_4)); }
}}

yazılımda her buton ayrı ayrı çalışıyor. sadece 4. buton açlışmıyor. ben tuş bir bastıgım zaman 0525 artıracak. tuş2 bastıgım zaman parlaklık %50artacak. tuş üçe bastıgım zaman %75 artacak tuş 4 bastıgımzaman %100 artacak tekrar 4. butona 2. kez bastıgımzaman %75 düşecek.3. butona 2. kez bastıgım zaman %50 düşecek şekilde çalışmasını istiyorum. verdigim yazılımda 1. butona bastıgımda %25 artırıyor. 2. butona bastıgım zaman artıması gerektigi yerde azaltıyor. yani ben kademe kademe artırıp azaltma yapmak istiyorum. yardımcı olursanız sevinirim.
ayrıca bastıgım zman hemen almıyor.
 
BENİM MERAK ETTİĞİM. TUŞALARA SIRAYLA BASILMAZSA NASIL BİR TEPKİ VERMESİ GEREKTİĞİ. 1. , 2. , 3. , 4. TUŞLARA SIRAYLA BASTIĞINIZDA ARTACAK. 4.3.2.1. SIRAYLA BASTIĞINIZDA DA AZALACAK. AMA 1.2. BASIP DA 3 Ü ATLAYIP 4 YAPARSAK? YADA AZALTIRKEN RASGELE 4.3.2.1. YERİNE 3.4. 1.2. YAPARSAK NASIL BİR TEPKİ VERSİN. SIRADAN GİDİLMEZSE TEPKİ VERMESİN Mİ? YADA NASIL BİR TEPKİ VERSİN. (HER İHTİMALİ DEĞERLENDİRMEK GEREKİYOR Kİ YANLIŞLIK OLMASIN.)

EĞER AMACIN. TUS 1 E BASILDIĞINDA PWM İN DEĞERİ %25 OLSUN ARDINDAN TUŞ 2 YE BASILDIĞINDA %50 ..... OLSUN. TUŞ ATLARSAM DA TUŞA İLK BASIS SA EĞER TUS DEGERİ OLAN PWM OLsUN İSE;

while(TRUE)
{

if(input(tus_1)) // tus 1 e basılsıysa
{
delay_ms(10); // buton arkına karşılık azcık bekle
if(tus_1_kontrol==0) { tus_1_kontrol=1; set_pwm1_duty(yuzde_25); } // tuşa ilkkez basıldıysa lambayı yak
else { tus_1_kontrol=0; set_pwm1_duty(yuzde_0); } // ikinci kez basıldıysa lambayı sönder
tus_2_kontrol=0;
tus_3_kontrol=0;
tus_4_kontrol=0;
while(input(tus_1));
}

if(input(tus_2)) // tus 2 e basılsıysa
{
delay_ms(10); // buton arkına karşılık azcık bekle
if(tus_2_kontrol==0) { tus_2_kontrol=1; set_pwm1_duty(yuzde_50); } // tuşa ilkkez basıldıysa lambayı yak
else { tus_2_kontrol=0; set_pwm1_duty(yuzde_0); } // ikinci kez basıldıysa lambayı sönder
tus_1_kontrol=0;
tus_3_kontrol=0;
tus_4_kontrol=0;
while(input(tus_2));
}

if(input(tus_3)) // tus 3 e basılsıysa
{
delay_ms(10); // buton arkına karşılık azcık bekle
if(tus_3_kontrol==0) { tus_3_kontrol=1; set_pwm1_duty(yuzde_75); } // tuşa ilkkez basıldıysa lambayı yak
else { tus_3_kontrol=0; set_pwm1_duty(yuzde_0); } // ikinci kez basıldıysa lambayı sönder
tus_1_kontrol=0;
tus_2_kontrol=0;
tus_4_kontrol=0;
while(input(tus_3));
}

if(input(tus_4)) // tus 4 e basılsıysa
{
delay_ms(10); // buton arkına karşılık azcık bekle
if(tus_4_kontrol==0) { tus_3_kontrol=1; set_pwm1_duty(yuzde_100); } // tuşa ilkkez basıldıysa lambayı yak
else { tus_4_kontrol=0; set_pwm1_duty(yuzde_0); } // ikinci kez basıldıysa lambayı sönder
tus_1_kontrol=0;
tus_2_kontrol=0;
tus_3_kontrol=0;
while(input(tus_4));
}
}

// KISACA YAZILIM; BASILAN TUŞUN DEGERİNİ PWM E AKTARIR. TUŞA İKİNCİ KEZ BASILIRSA LAMBA SÖNER. TUŞLARA SIRADAN BASMAK YADA BASMAMAK Bİ SORUN OLUŞTURMAZ. 1. TUŞA BASIP ARDINDAN 2. TUŞA BASILIRSA VE ARDINDAN TEKRAR 1. TUŞA BASILIRSA; 1 TUŞA İLK BASILMIŞ GİBİ İŞLEM YAPAR.

2. BASISTA LAMBAYI SÖNDERMESİN TUŞLAR %25 ARTIRMA VE AZALTMA YAPSIN VE TUŞLARA SIRADAN BASACAĞIM ONUN HARİCİ KABUL ETMESİN DİYORSANIZ; (sadece 1 tuş için. diğerleri için buna uygun tasarlarsınız.)



if(input(tus_1)&&(pwm_duty_deger=<yuzde_25)) // tus 1 e basılsıysa ve pwm %50 ve aşağısındaysa
{

delay_ms(10); // buton arkına karşılık azcık bekle
if((tus_1_kontrol==0)&&((tus_2_kontrol==1)) // tuşa ilkkez basıldıysa ve daha önce tus 2 ye basıldıysa lamba ışığını düşür
{
tus_1_kontrol=1;
tus_2_kontrol=0;
pwm_duty_deger= yuzde_0;
set_pwm1_duty(pwm_duty_deger);
}

else if((tus_1_kontrol==0)&&((tus_2_kontrol==0)) // tuşa ilkkez basıldıysa ve daha önce tus 2 ye basılmadıysa lamba ışığını artır
}
tus_1_kontrol=1;
pwm_duty_deger= yuzde_25;
set_pwm1_duty(pwm_duty_deger);
}

else // tuşa ikinci kez basıldıysa ve daha önce tus 2 ye basıldığını önemseme lambayı sönder
}
tus_1_kontrol=0;
tus_2_kontrol=0;
tus_3_kontrol=0;
tus_4_kontrol=0;
pwm_duty_deger=0;
set_pwm1_duty(pwm_duty_deger);
}


while(input(tus_1));
}


YOK ARKADAŞ BU DA DEĞİL; TUŞLAR %25 ARTIRMA VE AZALTMA YAPSIN. LAMBAYI SONDURME İŞLEMİNİ TUŞ 1 E BASISTA YAPSIN DERSEN.; (SADECE 1 TUŞ İÇİN;)


if(input(tus_1)&&(pwm_duty_deger=<yuzde_25)) // tus 1 e basılsıysa ve pwm %50 ve aşağısındaysa
{

delay_ms(10); // buton arkına karşılık azcık bekle
if((tus_1_kontrol==0)&&((tus_2_kontrol==1)) // tuşa ilkkez basıldıysa ve daha önce tus 2 ye basıldıysa lamba ışığını düşür
{
tus_1_kontrol=1;
tus_2_kontrol=0;
pwm_duty_deger= yuzde_0;
set_pwm1_duty(pwm_duty_deger);
}

else if((tus_1_kontrol==0)&&((tus_2_kontrol==0)) // tuşa ilkkez basıldıysa ve daha önce tus 2 ye basılmadıysa lamba ışığını artır
}
tus_1_kontrol=1;
pwm_duty_deger= yuzde_25;
set_pwm1_duty(pwm_duty_deger);
}

else // tuşa ikinci kez basıldıysa ve daha önce tus 2 ye basıldığını önemseme lambayı sönder
}

// TUŞ 1 E ARDARDA 2. KEZ BASILIRSA NE YAPACAKSA? O YAZILSIN(EN AZINDAN 4. TUŞ İÇİN DÜŞÜRME İŞLEMİ YAPMANIZ GEREKECEK.

tus_1_kontrol=0;
}


while(input(tus_1));
}




ANLADIĞIM KADARIYLA BEN SİZİN ÇALIŞMAYI YANLIŞ ANLAMIŞIM, İSTEDİĞİNİZE GÖRE CEVAP VEREMEMİŞİM.

YUKARIDAKİLERİN SİZİN İSTEDİĞİNİZ OLDUĞUNU SANMIYORUM. İNŞ. SİZİN İSTEDİĞİNİZ GİBİDİR. İŞİN ÖZÜ; SİZİN NE YAPMAK İSTEDİĞİNİZİN MANTIĞINI DEĞİŞKENLER VASITASIYLA KONTROL ETMEYE ÇALIŞMANIZ GEREKECEK.

YUKARIDAKİ YAZILIM İŞİNİZİ GÖRMEZ İSE TÜM İHTİMALLERİN ÖNEM YADA ÖNEMSİZLİĞİ GÖZ ÖNÜNDE BULUNDURULARAK VE TUŞLARA GÖRE TAM OLARAK NE OLMASINI İSTEDİĞİNİZİ YAZARSANIZ (SİZ YAZMIŞSINIZ AMA BAHSETTİĞİM TUŞA SIRADAN BASMAMAK GİBİ Bİ ŞEY OLURSA NE OLACAK?) TAM OALRAK İSTEDİĞİNİZ GİBİ Bİ ÇALIŞAN YAZILIMI AKŞAM SAAT. 23,00 A HAZIRLAR SUNARIM. (SAAT 21,00 A KADAR EVE ANCA GİDERİM.) İNŞ. İSTEDİĞİNİZ GİBİ YAZILIM YAPALIM.

KOLAY GELSİN.
 
(prog. anlamam) Devre mantığınız çok karışık artırma işi okey tamam da tekrar basışta düşürmesi olmaz sanki... 2 defa aynı butona bastınız devre ne yapacak artış mı düşüş mü? Benim düşüncem illa ki 4 kademe isteniyorsa aynı tuşa tekrar basıldığında işlem yapmasın görmesin. piyasa baktığımızda da daha az düğmeli ürünler var aç-kapa tek buton, + buton, - buton veya tek buton ile aç/%25, %50... %100, kapat mantığı. Hem kullanıcı da basiti tercih eder. Saygılarımla.
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,306
Kullanıcılar
449,849
Son üye
cagan20

Yeni konular

Geri
Üst