PIC16F877A İle Endüstriyel Uygulama Denemesi

Başlatan eemuratozan, 05 Ağustos 2015, 14:29:08

sadogan

Sistemde hiç geri dönüş yok hareket gerçekten tamamlandımı bilinmiyor, delay_ms(1000)  ler ile tamamlandığı varsayılıyor.
Bunu yaratacağı sonuçlar neler olabilir ?
Önerim hareketin bitip bitmediği fiziksel olarak kontrol edilmeli.
Her hareket beklelen zaman içerisinde tamamlanmamış ise bunu bir arıza olduğuna karar verip
gerekli işlemlerin yapılması.

eemuratozan

Öneriniz için teşekkürler evet sizin söylediklerinizi de muhakkak ki düşünüyoruz ancak ileri aşamada yapacağımız işler arasında yer alıyor sensör koymadan gerçekleştireceğimiz için bitip bitmediğini anlamak güç olacak tabi
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

Uzun bir aradan sonra nihayet deneme aşamasına geçmeyi planlıyorum hem baskısını yapacağım devremin son hali hem de kodların son hali aşağıda mevcut her türlü görüş ve önerilere açığım:

#include <Numune Alma Sondasi Son Deneme.h>
#include <stdio.h>
#include <stdlib.h>
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_A4
#define LCD_DATA5 PIN_A5
#define LCD_DATA6 PIN_A6
#define LCD_DATA7 PIN_A7
#include <lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#INT_RB
void  RB_isr(void) 
{
   if(input(pin_b4))
      output_low(pin_d0);
   if(input(pin_b5))
      output_low(pin_d2);
   if(input(pin_b6))
      output_low(pin_d5);
   if(input(pin_b7))
      output_low(pin_d1);

}

   

void main()
{
   
  
   unsigned int16 x,y,i,k=1;
   
   setup_oscillator(OSC_4MHZ);
   enable_interrupts(INT_RB);
   enable_interrupts(GLOBAL);
   
   set_tris_a(0x00);
   set_tris_b(0xf1);
   set_tris_c(0x00);
   set_tris_d(0x00);
      
   output_b(0x00);
   output_c(0x00);
   output_d(0x00);
   output_a(0x00);
   
   lcd_init(); 
     
   i=read_eeprom(0);          // srand() fonksiyonunun beslendiği seed için sürekli değişkenlik, i'nin 0 adresindeki değer okunarak hiçbir zaman başlangıç değerine dönmemesi ile sağlanıyor
   write_eeprom(1,7);         // Numune alma işleminin başlayabilmesi için ilk adımın şartı sağlanır ve 1 nolu adresteki değer başlangıçta hep 7'dir
   
   while(TRUE)
   {
   
   if(input(pin_b0))
   {
   delay_ms(20);
   while(input(pin_b0));      // Butondan el kaldırıncaya kadar bekle
   delay_ms(20);              // Buton arkı oluşmasını engellemek için 20 ms bekle
        
     
      //TODO: User Code
         
            output_high(pin_c2);             // Sisteme güç veren röle çekilir ve sistem çalışmaya hazır hale gelir
            delay_ms(1000);      
         for(k=1;k<4;k++)         
         {        
                
         if((read_eeprom(1)==7))             // Numune alma işlemi D7 girişi HIGH ve 1 nolu adres değeri 7 ise başlar
         {
      
            i++;                                            // srand() fonksiyonunun seed'i i sürekli 1 artırılarak değiştirilir
         
            write_eeprom(0,i);                              // Değişen i değeri sonraki işlemlerde rand() fonksiyonunun aynı sayıları tekrarlamaması için 0 nolu adrese kaydedilir
      
            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fNumune islemi\nbasliyor...");// Numune alma işleminin başladığı LCD ekranına yazdırılır
            delay_ms(1000);
            
            write_eeprom(1,0);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 0 yazdırılır
         
         }         
         
         if((read_eeprom(1)==0))             // Bom, D7 girişi HIGH ve 1 nolu adres değeri 0 ise yukarı kalkmaya hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fYukari yonde\nkalkiyor..."); // Bomun yukarı kalktığı LCD ekranına yazdırılır
            output_high(pin_d0);                            // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
            output_high(pin_d1);                            // Bomu uzatan röle enerjilenir
            delay_ms(1000);                                 // Bomun ne kadar süre uzayacağı belirlenir
            output_low(pin_d1);                             // Bomu uzatan röle pasif hale getirilir ve uzama durur
            delay_ms(1000);                                 // Bom uzamasına artı olarak yukarı kalkma süresi burada belirlenir
            output_low(pin_d0);                             // Bomu yukarı kaldıran röle enerjisi kesilir ve bom durur
            
            write_eeprom(1,1);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 1 yazdırırlır
         }          
          
         if((read_eeprom(1)==1))             // Bom, D7 girişi HIGH ve 1 nolu adres değeri 1 ise sola dönmeye hazırdır
         {
         
            y=read_eeprom(0);                               // 0 adresindeki i değeri okunup y'ye atanır
            srand(y);                                       // srand() fonksiyonunun seed'i y olarak belirlenir
            if(k==1)
            x=rand()%500+2000;                            
            if(k==2)
            x=rand()%2500+2500;
            if(k==3)          
            x=rand()%5000+2500;

        
            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fSola donuyor...\n%Lu...%Lu",x,y);     // Bomun sola döndüğü LCD ekranına yazdırılır
            output_high(pin_d2);                            // Bomun sola dönüşünü sağlayan röle enerjilenir ve bom sola dönmeye başlar
            delay_ms(x);                                    // Bom random olarak belirlenen x süre kadar sola döner
            output_low(pin_d2);                             // Bomun sola dönüşünü sağlayan röle enerjisi kesilir ve bom durur
            
            write_eeprom(1,2);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 2 yazdırırlır
         }
         
         if((read_eeprom(1)==2))             // Numune alma işlemi ve helezonun çalışması, D7 girişi HIGH ve 1 nolu adres değeri 2 ise hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fNumune aliniyor\nHelezon acik...");   // Numune alındığı LCD ekrana yazdırırlır
            output_high(pin_d3);                            // Bomu aşağı hareket ettiren röle enerjilenir ve bom kamyon kasasına girmeye başlar
            output_high(pin_d4);                            // Helezonu çalıştıran röle enerjilenir ve helezon dönmeye başlar. Bu sayede kömür alma işlemi gerçekleşir
            delay_ms(1000);                                 // Numune alma işlemi belirlenen süre kadar sürer. Bu süre kamyon kasasının dibine ulaşılan süredir
            output_low(pin_d4);                             // Bomu aşağı indiren röle enerjisi kesilir ve bom durur
            output_low(pin_d3);                             // Helezonu çalıştıran röle enerjisi kesilir ve kömür alma işlemi biter
            
            write_eeprom(1,3);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 3 yazdırırlır
         }
         
         if((read_eeprom(1)==3))             // Bom, D7 girişi HIGH ve 1 nolu adres değeri 3 ise yukarı kalkmaya hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fYukari yonde\nkalkiyor...");          // Bomun yukarı kalktığı LCD ekranına yazdırılır
            output_high(pin_d0);                            // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
            delay_ms(1000);                                 // Bom belirlenen süre kadar yukarı kalkar. Bu süre max bom yükekliği kadardır
            output_low(pin_d0);                             // Bomu yukarı kaldıran röle enerjisi kesilir ve yukarı kalkma işlemi durur
            
            write_eeprom(1,4);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 4 yazdırırlır
         }
         
         if((read_eeprom(1)==4))             // Bom, D7 girişi HIGH ve 1 nolu adres değeri 4 ise sağa dönmeye hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fSaga donuyor...\n%Lu...%Lu",x,y);     // Bomun sağa döndüğü LCd ekrana yazdırılır
            output_high(pin_d5);                            // Bomu sağa döndüren röle enerjilenir ve bom sağa döner
            delay_ms(x);                                    // Bom belirlenen süre kadar sağa döner. Bu süre max sağ konumu kadardır
            output_low(pin_d5);                             // Bomu sağa döndüren röle enerjisi kesilir ve bom durur
            
            write_eeprom(1,5);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 5 yazdırırlır
         }
         
         if((read_eeprom(1)==5))             // Numune boşaltma ve helezonun ters yönde dönme işlemi, D7 girişi HIGH ve 1 nolu adres değeri 5 ise başlamaya hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fNumune bosaliyor\nHelezon kapali...");   // Numune kömürün boşaltıldığı LCD ekrana yazdırılır
            output_high(pin_d3);                            // Bomu aşağı hareket ettiren röle enerjilenir ve bom aşağı hareket eder
            delay_ms(1000);                                 // Bom belirlenen süre kadar aşağı iner. Bu süre min yükeklik kadardır
            output_low(pin_d3);                             // Bomu aşağı hareket ettiren röle enerjisi kesilir ve bom durur
            output_high(pin_c0);                            // Kömürü boşaltan röle enerjilenir ve helezon ters yönde dönmeye başlar
            delay_ms(1000);                                 // Kömür belirlenen süre içerisinde boşalır
            output_low(pin_c0);                             // Kömürü boşaltan röle enerjisi kesilir ve helezon durur
            
            
            write_eeprom(1,6);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 6 yazdırırlır
         }
         
         if((read_eeprom(1)==6))             // Helezon temizleme fanı, D7 girişi HIGH ve 1 nolu adres değeri 6 ise çalışmaya hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fFan calisiyor...\nN. Alma Bitti...");    // Fanın çalıştırıldığı LCd ekrana yazdırılır
            output_high(pin_c1);                            // Fanı çalıştıran röle enerjilenir ve fan çalışmaya başlar
            delay_ms(1000);                                 // Fan belirlenen süre kadar çalışır
            output_low(pin_c1);                             // Fanı çalıştıran röle enerjisi kesilir ve fan durur
            
            write_eeprom(1,7);                              // Başlangıç koşulunun sağlanması için 1 nolu adres değeri tekrar 7 yapılır
           
         }
         }         
         
      }
   }         
           
 
}


Yapmak İstediğim:


Basacağım Devre:




I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

Arkadaşlar biraz ters de olsa basmış olduğum baskı devre ve kodları yani son durum aşağıdadır:

https://youtu.be/u-asTUTh1W8

#include <Numune Alma Sondasi Son Deneme.h>
#include <stdio.h>
#include <stdlib.h>
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_A4
#define LCD_DATA5 PIN_A5
#define LCD_DATA6 PIN_A6
#define LCD_DATA7 PIN_A7
#include <lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#INT_RB
void  RB_isr(void) 
{
   if(input(pin_b4))
      output_low(pin_d0);     // Yukarı sonlandırma anahtarı
   if(input(pin_b5))
      output_low(pin_d2);     // Sol sonlandırma anahtarı
   if(input(pin_b6))
      output_low(pin_d5);     // Sağ sonlandırma anahtarı
   if(input(pin_b7))
      output_low(pin_d1);     // BOŞ

}

   

void main()
{
   
  
   unsigned int16 a,x,y,i,k=1;
   
   setup_oscillator(OSC_4MHZ);      // Dahili osilatör frekansı 4 MHz
   enable_interrupts(INT_RB);       //
   enable_interrupts(GLOBAL);       // Kesmelere izin ver
   
   set_tris_a(0x00);    // Tüm A Portu çıkış
   set_tris_b(0xf1);    // B4,B5,B6,B7 ve B0 pinleri giriş
   set_tris_c(0x00);    // Tüm C Portu çıkış
   set_tris_d(0x00);    // Tüm D Portu çıkış
      
   output_b(0x00);      // Bşalangıçta tüm pin değerleri 0
   output_c(0x00);      //
   output_d(0x00);      //
   output_a(0x00);      //
   
   lcd_init(); 
     
   i=read_eeprom(0);          // srand() fonksiyonunun beslendiği seed için sürekli değişkenlik, i'nin 0 adresindeki değer okunarak hiçbir zaman başlangıç değerine dönmemesi ile sağlanıyor
   write_eeprom(1,7);         // Numune alma işleminin başlayabilmesi için ilk adımın şartı sağlanır ve 1 nolu adresteki değer başlangıçta hep 7'dir
   
   while(TRUE)
   {
   
   if(input(pin_b0))          // Butona basılır ise
   {
   
      delay_ms(20);
      while(input(pin_b0));      // Butondan el kaldırıncaya kadar bekle
      delay_ms(20);              // Buton arkı oluşmasını engellemek için 20 ms bekle       
     
         
      output_high(pin_c2);       // Sisteme güç veren röle çekilir ve sistem çalışmaya hazır hale gelir
      delay_ms(1000);   
            
         for(k=1;k<4;k++)         
         {        
                
         if((read_eeprom(1)==7))             // Numune alma işlemi 1 nolu adres değeri 7 ise başlar
         {
      
            i++;                                            // srand() fonksiyonunun seed'i i sürekli 1 artırılarak değiştirilir
         
            write_eeprom(0,i);                              // Değişen i değeri sonraki işlemlerde rand() fonksiyonunun aynı sayıları tekrarlamaması için 0 nolu adrese kaydedilir
      
            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fNumune islemi\nbasliyor...");// Numune alma işleminin başladığı LCD ekranına yazdırılır
            delay_ms(1000);
            
            write_eeprom(1,0);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 0 yazdırılır
         
         }         
         
         if((read_eeprom(1)==0))             // Bom, 1 nolu adres değeri 0 ise yukarı kalkmaya hazırdır
         {
         
            y=read_eeprom(0);                               // 0 adresindeki i değeri okunup y'ye atanır
            srand(y);                                       // srand() fonksiyonunun seed'i y olarak belirlenir
            a=rand()%1000+500;                              // Bomun ne kadar süre uzayacağı belirlenir
            
            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fYukari kalkiyor...\n%Lu...%Lu",a,y); // Bomun yukarı kalktığı LCD ekranına yazdırılır
            delay_ms(20);
            output_high(pin_d0);                            // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
            delay_ms(20);                                   // İki işlem arası karışıklık önelemek için 20 ms gecikme yeterli görülmüştür
            output_high(pin_d1);                            // Bomu uzatan röle enerjilenir
            delay_ms(a);                                    // Belirlenen süre kadar bom uzar
            output_low(pin_d1);                             // Bomu uzatan röle pasif hale getirilir ve uzama durur
            delay_ms(1000);                                 // Bom uzamasına artı olarak yukarı kalkma süresi burada belirlenir
            output_low(pin_d0);                             // Bomu yukarı kaldıran röle enerjisi kesilir ve bom durur
            
            write_eeprom(1,1);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 1 yazdırırlır
         }          
          
         if((read_eeprom(1)==1))             // Bom, 1 nolu adres değeri 1 ise sola dönmeye hazırdır
         {
         
            y=read_eeprom(0);                               // 0 adresindeki i değeri okunup y'ye atanır
            srand(y);                                       // srand() fonksiyonunun seed'i y olarak belirlenir
            if(k==1)
            x=rand()%500+2000;                              // Her sola dönüş için farklı bir süre üretilir
            if(k==2)
            x=rand()%2500+2500;                             // "  "  "  "  "  "  "  "  "  "  "  "  "  "  "
            if(k==3)
            x=rand()%5000+2500;                             // "  "  "  "  "  "  "  "  "  "  "  "  "  "  "
        
            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fSola donuyor...\n%Lu...%Lu",x,y);     // Bomun sola döndüğü LCD ekranına yazdırılır
            delay_ms(20);
            output_high(pin_d2);                            // Bomun sola dönüşünü sağlayan röle enerjilenir ve bom sola dönmeye başlar
            delay_ms(x);                                    // Bom random olarak belirlenen x süre kadar sola döner
            output_low(pin_d2);                             // Bomun sola dönüşünü sağlayan röle enerjisi kesilir ve bom durur
            
            write_eeprom(1,2);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 2 yazdırırlır
         }
         
         if((read_eeprom(1)==2))             // Numune alma işlemi ve helezonun çalışması, 1 nolu adres değeri 2 ise hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fNumune aliniyor\nHelezon acik...");   // Numune alındığı LCD ekrana yazdırırlır
            delay_ms(20);
            output_high(pin_d3);                            // Bomu aşağı hareket ettiren röle enerjilenir ve bom kamyon kasasına girmeye başlar
            delay_ms(20);
            output_high(pin_d4);                            // Helezonu çalıştıran röle enerjilenir ve helezon dönmeye başlar. Bu sayede kömür alma işlemi gerçekleşir
            delay_ms(1000);                                 // Numune alma işlemi belirlenen süre kadar sürer. Bu süre kamyon kasasının dibine ulaşılan süredir
            output_low(pin_d4);                             // Bomu aşağı indiren röle enerjisi kesilir ve bom durur
            delay_ms(20);
            output_low(pin_d3);                             // Helezonu çalıştıran röle enerjisi kesilir ve kömür alma işlemi biter
            
            write_eeprom(1,3);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 3 yazdırırlır
         }
         
         if((read_eeprom(1)==3))             // Bom, 1 nolu adres değeri 3 ise yukarı kalkmaya hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fYukari yonde\nkalkiyor...");          // Bomun yukarı kalktığı LCD ekranına yazdırılır
            delay_ms(20);
            output_high(pin_d0);                            // Bomu yukarı kaldıran röle enerjilenir ve bom yukarı kalkmaya başlar
            delay_ms(1000);                                 // Bom belirlenen süre kadar yukarı kalkar. Bu süre max bom yükekliği kadardır
            output_low(pin_d0);                             // Bomu yukarı kaldıran röle enerjisi kesilir ve yukarı kalkma işlemi durur
            
            write_eeprom(1,4);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 4 yazdırırlır
         }
         
         if((read_eeprom(1)==4))             // Bom, 1 nolu adres değeri 4 ise sağa dönmeye hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fSaga donuyor...\n%Lu...%Lu",x,y);     // Bomun sağa döndüğü LCd ekrana yazdırılır
            delay_ms(20);
            output_high(pin_d5);                            // Bomu sağa döndüren röle enerjilenir ve bom sağa döner
            delay_ms(x);                                    // Bom belirlenen süre kadar sağa döner. Bu süre max sağ konumu kadardır
            output_low(pin_d5);                             // Bomu sağa döndüren röle enerjisi kesilir ve bom durur
            
            write_eeprom(1,5);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 5 yazdırırlır
         }
         
         if((read_eeprom(1)==5))             // Numune boşaltma ve helezonun ters yönde dönme işlemi, 1 nolu adres değeri 5 ise başlamaya hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fNumune bosaliyor\n%Lu...%Lu",a,y);   // Numune kömürün boşaltıldığı LCD ekrana yazdırılır
            delay_ms(20);
            output_high(pin_d3);                            // Bomu aşağı hareket ettiren röle enerjilenir ve bom aşağı hareket eder
            delay_ms(20);
            output_high(pin_d6);                            // İleri uzayan bom, uzadığı süre kadar kısalmaya başlar
            delay_ms(a);                                    // Belirlenen süre kadar bom geriler
            output_low(pin_d6);                             // Uzama durur
            delay_ms(1000);                                 // Bom belirlenen süre kadar aşağı iner. Bu süre min yükeklik kadardır
            output_low(pin_d3);                             // Bomu aşağı hareket ettiren röle enerjisi kesilir ve bom durur
            delay_ms(20);
            output_high(pin_c0);                            // Kömürü boşaltan röle enerjilenir ve helezon ters yönde dönmeye başlar
            delay_ms(1000);                                 // Kömür belirlenen süre içerisinde boşalır
            output_low(pin_c0);                             // Kömürü boşaltan röle enerjisi kesilir ve helezon durur
            
            
            write_eeprom(1,6);                              // Yarıda kalan bir işlem olduğunda programın nerede kaldığını bilmesi için 1 nolu adrese sonraki işlemin etiketi olan 6 yazdırırlır
         }
         
         if((read_eeprom(1)==6))             // Helezon temizleme fanı, 1 nolu adres değeri 6 ise çalışmaya hazırdır
         {

            lcd_gotoxy(1,1);
            printf(lcd_putc,"\fFan calisiyor...\nN. Alma Bitti...");    // Fanın çalıştırıldığı LCd ekrana yazdırılır
            delay_ms(20);
            output_high(pin_c1);                            // Fanı çalıştıran röle enerjilenir ve fan çalışmaya başlar
            delay_ms(1000);                                 // Fan belirlenen süre kadar çalışır
            output_low(pin_c1);                             // Fanı çalıştıran röle enerjisi kesilir ve fan durur
            
            write_eeprom(1,7);                              // Başlangıç koşulunun sağlanması için 1 nolu adres değeri tekrar 7 yapılır
           
         }
         }        
      }
   }      
}
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

malitronık

elektronik bilgisi olan için pic ile  kararlı calışır mcu etkilenemesi için  her turlu elektronik malzeme var  optucoper bobin condastor niye olmasın :)

OG

Konuyu yeni gördüm videoyu izledim.

Bu makinenin, kömürü alma ve verme süresi (helezon dediğiniz bu olsa gerek) dışındaki her haraket operatöre bağlı gibi, yani görerek manuel kontrolle olmak zorunda sanıyorum.

Kanımca haraketlerin LCD li devreye yazıp gösterilmesi yanlızca operatorun kafasını karıştırır, dikkatini makineden başka tarafa çevirmemeli. İşin mühendisliğinin içinde bu konu daha öncelikli.

Helezon için de gereken bir time kontrolu yeterli. Bu süre bir kereliğine mahsus, bir pot ile manuel ayarlanıp bir buton ile veya kutu içinde (sonradan müdahale olmasın diye) bir jumper ile hafızaya alınır. Ancak bu haraketi de STOP yapması gereken acil butonu olması gerekir. Ve belki gerekiyorsa diğer haraketlere geçildi ise helezona kesme atması gerekir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

eemuratozan

OG hocam bu devreyi dikkate almadığınızda daha önce yüklediğim videoda şu an nasıl çalıştığı ve kontrol kumandasında hangi tuşların olduğu ve ne iş yaptığı var. Ben bu devre ile tek tuşla tüm işlemleri sondanın kendisinin yapmasını sağlıyorum emniyet tuşu ayrı olacak onu bu devreye koymadım. LCD'deki hızlı geçişler henüz devreyi sistemle beraber denemediğim için.Çünkü sistemin zaten ne kadar süre sola döneceği ne kadar süre helezonu çalıştıracağı belli o süreleri kodlamada girdiken sonra sorun kalmayacak. Zaten kalan emniyet tedbirleri arasında sonlandırma anahtarları mevcut ki bunlar kesme ile programın akışına bağlı. Sonuç olarak operatör burada sadece başla butonuna basacak yani herhangi birşeyi takip etmesi gerekmiyor. Aklınızda kalan başka sorular ve fikirler varsa lütfen paylaşın. İlginiz içinse teşekkür ediyorum.
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

#37
Arkadaşlar Projenin Son halini paylaşıyorum. youtube la ilgili problem yaşadığım için drive linki vericem. Değerli dönüşlerinizi bekliyorum.

https://drive.google.com/file/d/0ByilAXr_z_iHWTVSeFBRZnV4ZG8/view?usp=sharing
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

Arkadaşlar yeniden merhaba amatör olarak başlamış olduğum bu pic ile röle sürme işinde gördüm ki çok fazla eksiğim var ve yapmış olduğum devre parazitlerden oldukça fazla etkilendi bu konu başlığı altında devrenin eski hali mevcut ancak ben şimdi çözüm olarak düşündüğüm eklemeler ve düzeltmeler ile yeni halini koyuyorum. Benimle önerilerinizi paylaşmanızı rica ediyorum.
https://drive.google.com/file/d/0ByilAXr_z_iHVXBzdkUyOU1kQUU/view?usp=sharing
bağlantıyı görüntüleyemeyen olur ise lütfen bana bildirsin
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

Erol YILMAZ

Mcu'nun bir girişi bir kere okuyarak karar vermesini sağlamak,
her türlü yanlışa ve hataya davetiye çıkartacaktır.

Misal 16 kere okunmalı ve min 14 kez lojik 1 var ise burası lojik 1'dir denmeli,

Dijital girişte olduğu gibi analog giriş te aynı şekilde çok defa okunup ortalaması alınarak üretilen parazit-vari şeylerin etkisi azaltılabilir.
Bu en basit filtreleme şekli olmasına rağmen ama birçok yerde işe yarar.

Tüm girişlerden kesinkes emin olduktan sonra program yazılabilir,
Yoksa herşeyi sorgular bir türlü sonuca ulaşamazsınız.
Siz tek tek ölçerken doğru gibi görünebilir.

eemuratozan

Peki çizimini yaptığım devre için öneriniz nedir allegro hocam ?
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

dursuncemal

hocam o rolelerin beslemesini hatta disardan gelen sensorlerin beslemelerini ayırırsan rahat edersin
:=

eemuratozan

dursuncemal hocam röle ve sensör girişlerinin beslemesini ayırdım 24 v ile besleniyorlar çizimde 24 v un toprağı gnd2 olarak adandırılmış durumda ayırmış durumdayım ama tabi devreyi daha basmadım basmadan önce önerilerinizi almak istedim.
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

dursuncemal

pic beslemesinin  + ve - sinden topraga 4.7 nf x2 kondanstor un buyuk faydasi olacaktir.reseti  direk + vermiyor isen 5v bir tranzorp yada zener  atarsan iyi olur.aklima gelenler bunlar
:=

EFESU

#44
Konuyu  geç  okudum ama sonuç olarak  şunu  diyebilrim
PIC  le bu  olur . Sadece çalışma  ortamına  göre vereceği tepkiler
farklı  olur

Dikkat edilmesi gerekenler
giriş çıkışlar optokuplor  ile olmalı
münkünse  iki  adet lm2576 kullanıp bi tanesi sadece  PIC i
Diğeri 24  volt grubunu  beslesin
topraklma ve şase olayına dikkat edilmeli
başka da çok bişey yok yazılım önemli tabi
role bobin gibi devre elemanları  muthiş parazit
üretir..ters diyot  kondansator  gibi
elemanları  kullanmaktan kaçınma
yani tasarım  biraz   önemli

kolay gelsin  basıc yada proton  olsaydı
ve devre  şemasını  koysaydınız
daha fazla  yardımcı  olmaya çalışırdık ..