asansör+display

Başlatan tauf1, 15 Kasım 2013, 18:02:14

tauf1

arkadaşlar step motor ile bir asansör yaptım, step motorda bir problem yok display herkata geçişte çalışıyor ancak step motorla display aynı devreye uyarlandığında başlangıçta display 0     3. kata basılınca display sönüyor kat geçişlerinde yanmıyor 3. kata gelince displayler 3 ü gösteriyor.
kat geçişlerinde displayi nasıl aktif edebilirim.
#include <16f877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay(clock=20000000)


const int yarim_adim[]={0x80,0xC0,0X40,0X60,0X20,0X30,0X10,0X90}; // Step motor yarım adım dönüş adımları
char birler,onlar,yuzler,binler,sayi=0;  

// Ortak katot display için veri değerleri
const int digit[4]={0x3F, 0x06, 0x5B, 0x4F};
int1 kabin_0,kabin_1,kabin_2,kabin_3,kat_0,kat_1,kat_2,kat_3;
int i=0,hiz=10;
void display()
{

     
     if(input(pin_d4))
     {
     
      
      
      sayi=0;
       birler=onlar=yuzler=binler=sayi%10;
      }
       if(input(pin_d5))
      {
      
      sayi=1;
      
      birler=onlar=yuzler=binler=sayi%10; 
       
      }
       if(input(pin_d6))
      {
      
      sayi=2;
      
       birler=onlar=yuzler=binler=sayi%10; 
      }
      
       if(input(pin_d7))
      {
      sayi=3;
      
       birler=onlar=yuzler=binler=sayi%10; 
      
      }}

void geri()
{
  
          output_b(yarim_adim[i]);  // Step motor 1 adım ileri
     i--;
    if(i==-1)
    i=7;
     delay_ms(hiz);
        
         }
void ileri()
{

          output_b(yarim_adim[i]);  // Step motor 1 adım ileri
     i++;
    if(i==8)
    i=0;
      delay_ms(hiz);   
}

/********* ANA PROGRAM FONKSİYONU********/
void main()
{
set_tris_d(0b11110000);
set_tris_b(0b00000000);
set_tris_a(0b00001111);
set_tris_c(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
set_tris_d(0xFF); // A portu tümüyle çıkış olarak yönlendiriliyor
   
   output_b(0x00);
   output_c(0x00);  //
   output_d(0xFF); 
    
     output_low(pin_d0);      // 1. display pasif durumda
     output_low(pin_d3);      // 2. display pasif durumda
     output_low(pin_d2);      // 3. display pasif durumda
     output_low(pin_d1);      // 4. display pasif durumda
     
     birler=onlar=yuzler=binler=sayi%10;
   
         output_high(pin_d0);
         output_c(digit[birler]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d1);
while(true)
{
birler=onlar=yuzler=binler=sayi%10;
   
         output_high(pin_d0);
         output_c(digit[birler]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_us(20);      // 500 msn bekle
         output_low(pin_d1);
     
kabin_0=input(pin_d4);
kabin_1=input(pin_d5);
kabin_2=input(pin_d6);
kabin_3=input(pin_d7);
kat_0=input(pin_a0);
kat_1=input(pin_a1);
kat_2=input(pin_a2);
kat_3=input(pin_a3);


 
 if((kabin_0&kat_1)==1)
 {
 while(!input(pin_d5))
 { 
 geri();
 }}

 
if((kabin_1&kat_2)==1)
{
while(!input(pin_d6))
{

geri();

}}
      
 
if((kabin_2&kat_3)==1)
{
while(!input(pin_d7))
{
geri();

}}

if((kabin_0&kat_2)==1)
{
while(!input(pin_d6))
{
geri();

}}

if((kabin_0&kat_3)==1)
{
while(!input(pin_d7))
{
geri();

}}

if((kabin_1&kat_3)==1)
{
while(!input(pin_d7))
{
geri();

}}

if((kabin_1&kat_0)==1)
{
while(!input(pin_d4))
{ 
ileri();

}}

if((kabin_2&kat_1)==1)
{
while(!input(pin_d5))
{
ileri();

}}
 
if((kabin_2&kat_0)==1)
{
while(!input(pin_d4))
{ 
ileri();

}}

if((kabin_3&kat_2)==1)
{
while(!input(pin_d6))
{
ileri();

}}

if((kabin_3&kat_1)==1)
{
while(!input(pin_d5))
{
ileri();

}}

if((kabin_3&kat_0)==1)
{
while(!input(pin_d4))
{ 
ileri();

}
      }display();
}}

Kabil ATICI

bu dili pek bilmem ama anladığım kadar,
sen istediğin katın düğmesini bastığında sistem sadece motoru çalıştırıyor. Yani kata ve ekran gösterimine bakmıyor.
Eğer 1,2 dijit bir ekran olsa ekranı direk sür derim. Böylece ekranı yenilemen gerekmez. Yani yazacağın şeyi bir kez yazarsın öyle kalır. Taaki sen değiştirene kadar.

Burada gördüğüm kadar motor için hıza bağlı bir gecikme ile kontrol ediyorsun.
Bunu bir timer tarafından üretilen bir kesme ile yaparsan ;yani motor dönme işlemini bir timer'a yüklersen senin sistemin için asansör katını kontrol etmen için zaman kalır.(timer kesmesi kullanman gerekir.)
Yoksa şu hali ile motor döngüsü içinde hem ekranı yenilemen hemde hangi katta olduğunu kontrol ettirmen gerekir.
ambar7

tauf1

yok mu şuna bi el atacak usta

tauf1

yaptım arkadaşlar.
her butona basmada displayi taratınca oldu.

respected

Çözdüğünüz sorunun kodlarını paylaşsaydınız belki başkaları da faydalanırdı.

tauf1

hemen paylaşıyotum
/******************************************************
 Uygulama Adı     : 4 katlı asansör uygulaması
 
 Yazan            : FUAT BERDİLEK
 
 1000
 1100
 0100
 0110
 0010
 0011
 0001
 1001
*******************************************************/

#include <16f877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay(clock=20000000)


const int yarim_adim[]={0x80,0xC0,0X40,0X60,0X20,0X30,0X10,0X90}; // Step motor yarım adım dönüş adımları

char birler=0,onlar=0,yuzler=0,binler=0,sayi=0;  


const int digit[4]={0x3F, 0x06, 0x5B, 0x4F};// Ortak katot display için veri değerleri
int1 kabin_0,kabin_1,kabin_2,kabin_3,kat_0,kat_1,kat_2,kat_3;
int i=0,hiz=3;


void geri()
{

output_b(yarim_adim[i]);
delay_ms(hiz);

     i--;
     if(i==-1)
     i=7;
     
    birler=onlar=yuzler=binler=sayi%10;
  
         output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
      
      if(input(pin_d4))
     { 
     output_b(yarim_adim[i]);
delay_ms(hiz);

     i--;
     if(i==-1)
     i=7;
     
birler=onlar=yuzler=binler=sayi%10;
  
        output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
    
         sayi=0;            
     }
    
    if(input(pin_d5))
     { 
     output_b(yarim_adim[i]);
delay_ms(hiz);

     i--;
     if(i==-1)
     i=7;
    
    birler=onlar=yuzler=binler=sayi%10;
   
      output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
         
         sayi=1;
     }
       
    if(input(pin_d6))
     {
     output_b(yarim_adim[i]);
delay_ms(hiz);

     i--;
     if(i==-1)
     i=7;
     
    birler=onlar=yuzler=binler=sayi%10;
   
        output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
         
         sayi=2;
     }
       
       if(input(pin_d7))
     { 
     output_b(yarim_adim[i]);
delay_ms(hiz);

     i--;
     if(i==-1)
     i=7;
         
      birler=onlar=yuzler=binler=sayi%10;
   
         output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
         
         sayi=3;
     }      
     }
     
void ileri()
{

output_b(yarim_adim[i]);
delay_ms(hiz);
     i++;
     if(i==8)
     i=0;
     
   birler=onlar=yuzler=binler=sayi%10;
  
        output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
     
       if(input(pin_d7))
     {
     output_b(yarim_adim[i]);
delay_ms(hiz);
     i++;
     if(i==8)
     i=0;
     
   birler=onlar=yuzler=binler=sayi%10;
   
       output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
    
         sayi=3;
     }
       
      if(input(pin_d6))
      {
      output_b(yarim_adim[i]);
delay_ms(hiz);
     i++;
     if(i==8)
     i=0;
     
      birler=onlar=yuzler=binler=sayi%10;
   
        output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
         
         sayi=2;
     }
   
     if(input(pin_d5))
     { 
     output_b(yarim_adim[i]);
delay_ms(hiz);
     i++;
     if(i==8)
     i=0;
     
     birler=onlar=yuzler=binler=sayi%10;
   
        output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
         
         sayi=1;
     }
     
    if(input(pin_d4))
     { 
     output_b(yarim_adim[i]);
delay_ms(hiz);
     i++;
     if(i==8)
     i=0;
    birler=onlar=yuzler=binler=sayi%10;
   
        output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
         
         sayi=0;
    }
    }

/********* ANA PROGRAM FONKSİYONU********/
void main()
{

   set_tris_b(0b00000000);
   set_tris_a(0b00001111);
   set_tris_c(0x00); 
   set_tris_d(0xFF); 
   
   output_b(0x00);
   output_c(0x00);  
   output_d(0xFF); 
    
     output_low(pin_d0);      // 1. display pasif durumda
     output_low(pin_d3);      // 2. display pasif durumda
     output_low(pin_d2);      // 3. display pasif durumda
     output_low(pin_d1);      // 4. display pasif durumda
     
  
while(true)
{
birler=onlar=yuzler=binler=sayi%10;
   
         output_high(pin_d0);
         output_c(digit[birler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d0);
         output_high(pin_d3); 
         output_c(digit[onlar]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d3);
         output_high(pin_d2);
         output_c(digit[yuzler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d2);
         output_high(pin_d1);
         output_c(digit[binler]); 
         delay_ms(3);      // 20 us bekleme
         output_low(pin_d1);  
     
kabin_0=input(pin_d4);
kabin_1=input(pin_d5);
kabin_2=input(pin_d6);
kabin_3=input(pin_d7);
kat_0=input(pin_a0);
kat_1=input(pin_a1);
kat_2=input(pin_a2);
kat_3=input(pin_a3);




 if((kabin_0&kat_1)==1)
 {
 while(!input(pin_d5))
 { 
 geri();
 }}
if((kabin_1&kat_2)==1)
{
while(!input(pin_d6))
{
geri();    
}}
if((kabin_2&kat_3)==1)
{
while(!input(pin_d7))
{
geri();
}}
if((kabin_0&kat_2)==1)
{
while(!input(pin_d6))
{
geri();
}}
if((kabin_0&kat_3)==1)
{
while(!input(pin_d7))
{
geri();
}}
if((kabin_1&kat_3)==1)
{
while(!input(pin_d7))
{
geri();
}}
if((kabin_1&kat_0)==1)
{
while(!input(pin_d4))
{ 
ileri();
}}
if((kabin_2&kat_1)==1)
{
while(!input(pin_d5))
{
 ileri();
}}
if((kabin_2&kat_0)==1)
{
while(!input(pin_d4))
{ 
ileri();
}}
if((kabin_3&kat_2)==1)
{
while(!input(pin_d6))
{
ileri();
}}
if((kabin_3&kat_1)==1)
{
while(!input(pin_d5))
{
ileri();
}}
if((kabin_3&kat_0)==1)
{
while(!input(pin_d4))
{ 
ileri();
}}}}

sinan.halici

bu uygulamanın isis çizimi var mı?