giriş bilgileri okuma sorun.

Başlatan bbs2006, 02 Nisan 2014, 15:24:13

bbs2006

Merhaba
a portuna baglı olan girişleri okuyup switch case yapsıyla programı dallnadırmak istiyorum. ancak. giriş bilgilerini okuyamadıgımdan switch case yapısı çalışmıyor. yardımcı olursanız sevinirim.

#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
#define yuzde_50  1250
#define yuzde_75  1875
#define yuzde_100  2500
int k;


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

k=input_a();
while(true){
//k=input_a();
switch (k){

case 0:
         set_pwm1_duty(0);
         output_high(pin_b0);
         break;
case 1:
         set_pwm1_duty(625);
         
         output_low(pin_b0);
         output_high(pin_b1);
break;

case 3:
         set_pwm1_duty(1250);
         
         output_low(pin_b1);
         output_high(pin_b2);         
         
         break;

case 7:
         set_pwm1_duty(1875);
         
         output_low(pin_b2);
         output_high(pin_b4);         
         break;
case 15:
         set_pwm1_duty(2500);
         
         output_low(pin_b4);
         output_high(pin_b5);         
         
         
         
         
         
         break;

case 8:
         set_pwm1_duty(1875);
         
         output_low(pin_b5);
         output_high(pin_b6);         
         
   
         
         break;
case 12:
         set_pwm1_duty(1250);
         
         output_low(pin_b6);
         output_high(pin_b7);           
         break;

case 14:
         set_pwm1_duty(625);
         
         output_low(pin_b7);
         output_high(pin_a4); 
         
         
         
         break;
}}
}








ferit06

CCS bilmiyorum, benimki hariçten gazel okuma olacak ama;

-TRISA, TRISB ayarları nerede yoksa (input a() yeterli mi)gerekmiyormu?
a yı tamamen giriş yapıyorsanız bu tanım ile a0,1,2,3 tuş bağlı, a4,5,6,7 nin durumları nedir? bunlar 1 komunda ise sizin switch case  konumları k=(0,1,3,7,15) gerçekleşmez.

Salih

Şemanı görürsek daha faydalı olabiliriz.

rree

#3
Komparatörü kapat. Porta  defoult değeri komparator girişe endeksli ayar geliyor.cmd 7 diye bir şey hatırlıyorum asm den.
CCS de nasıldı hatırlayamadım.

tuthenstein

k=input_a();

bu sana bütün a portunu verir diye hatırlıyorum. sekiz bitlik bir sayı verecek. sende case i buna göre oluştur.


A0 için 1;  //00000001
A1 için 2; // 00000010
A2 için 4;
A3 için 6;

gibi yaz bakalım olcakmı.
olursa birden fazla pine aynı anda basıldığında bunuda alglayabilirsin. 

haydarpasamikro

setup_adc( ADC_OFF );

DEfault PORTA pinleri analog dur. Yukarıdaki satır ile tüm A pinleri dijital I/o olsun.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

RaMu

#6
Ayrıca,
bence k 0-255 arası olabileceği için
önce k istenen case aralığındamı diyede kontrol etmek lazım,
port dan veriyi butonlamı alıyorsun?

setup_ccp1(CCP_PWM) ;
olması gerekmiyormu?
setup kısmında çok hata var bence.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

tuthenstein

pwm frekansı okumak istediğini belirtmemiş.

değerler 0-256 arasında olması mümkün ama define kısmından anladığım kadarı ile 4 adet buton bağlı sisteme.

her bit bir portu temsil ediyor. Bu durumda ikilik tabanda hangi pinlere basılırsa o sonuç döner. a0-a4 pinleri için son 4 bit söz konusu olduğundan tek tek basıldığı durumda 0 1 2 4 8 dönebilir. birden fazla buton basılıyorsa mesela a0 ve a2 basılırsa doğal olarak 5 sonucu döner.

tacettin

butonlar direk mi bağlı? pull-up var mı?  yada pull-down  eğer pull-up ise butona bastığında 0 bilgisi gider. şema eklersen daha iyi olur...

bbs2006

devre şeması. ben pwmde kullanacagım. pwm açacagım. şuan  giriş bilgilerini okuyup işleyebilmem gerekiyor.

ferit06

RA 4,5,6,7' yi GND ye bağla yada AND ile PORTA bilgisini 00001111 ile maskeleyerek k ya eşitle....

bbs2006

Merhaba
Komparaötr girişlerini kapttım. yazılım şagıdaki gibirdir A0 pinini 1 yaptıgım zaman b1 1 oluyor. ancak. a0 1 iken a1 pininide 1 yaptıgım zaman çıkış olarak b2 1 olması gerekirken b1 yanmaya devam ediyor.giğer çıkışlardada problem yaşıyorum.

#include<16f628a.h>
#fuses  intrc,nowdt,noprotect,nowdt,noprotect
#use delay(clock=4000000)
#use fast_io(a)
//#use fast_io(b)
#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
#define yuzde_50  1250
#define yuzde_75  1875
#define yuzde_100  2500
#byte porta=5
#byte portb=6
int k,d;

void main(){

set_tris_a(0xff);
set_tris_b(0x00);
setup_comparator(NC_NC_NC_NC);
setup_ccp1(CCP_OFF);
setup_timer_2(T2_DIV_BY_16,624,1);
while(true){
k=input_a();
k=k&00001111;
switch (k){

case 0:
         set_pwm1_duty(0);
         output_b(0x00);
         break;
case 1:
         set_pwm1_duty(625);
         output_high(pin_b1);
break;

case 3:
         set_pwm1_duty(1250);         
         output_high(pin_b2);         
         
         break;

case 7:
         set_pwm1_duty(1875);         
         output_high(pin_b4);         
         break;
case 15:
         set_pwm1_duty(2500);
         output_high(pin_b5);         
         break;

case 8:
         set_pwm1_duty(1875);         
         output_high(pin_b6);                   
         break;
case 12:
         set_pwm1_duty(1250);
         output_high(pin_b7);           
         break;

case 14:
         set_pwm1_duty(625);
         output_high(pin_B7);
         break;
//default:output_b(0x00);break;
}}
}
                               







tuthenstein

high yaptığınız pini daha sonra low a çekmiyorsunuz. yeni bir case e girdiğinde önce output_b(0x00); ekleyin sonra high komutu verin.

yldzelektronik

Yazdığınız kodları code tag içine alsanız daha okunaklı olur.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

bbs2006

istediğiniz şekilde yaptım ama yine problem var. olmadı.

#include<16f628a.h>
#fuses  intrc,nowdt,noprotect,nowdt,noprotect
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#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
#define yuzde_50  1250
#define yuzde_75  1875
#define yuzde_100  2500
#byte porta=5
#byte portb=6
int k,d;

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_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   set_tris_a(0xff);
set_tris_b(0x00);
setup_comparator(NC_NC_NC_NC);
setup_timer_2(T2_DIV_BY_16,624,1);
while(true){
k=input_a();
k=k&00001111;
switch (k){

case 0:
         set_pwm1_duty(0);
         output_b(0x00);
         break;
case 1:
         set_pwm1_duty(625);
         output_b(0x00);
         output_high(pin_b1);
break;

case 3:
         set_pwm1_duty(1250);         
         output_b(0x00);
        output_high(pin_b2);
         
         break;

case 7:
         set_pwm1_duty(1875);         
          output_b(0x00);
         output_high(pin_b4);
         break;
case 15:
         set_pwm1_duty(2500);
          output_b(0x00);
         output_high(pin_b5);
         break;

case 8:
         set_pwm1_duty(1875);         
          output_b(0x00);
         output_high(pin_b6);
         break;
case 12:
         set_pwm1_duty(1250);
         output_b(0x00);
        output_high(pin_b7);
         break;

case 14:
         set_pwm1_duty(625);
         output_b(0x00);
        output_high(pin_B7);
         break;
 //default:output_b(0x00);break;
}}
}