PROGRAM DIFD PADA MIKROKONTROLER MENGGUNAKAN BAHASA C (Aktif ketika sudah tidak mendeteksi)

PROGRAM DIFD (DARI PLC) PADA MIKROKONTROLER MENGGUNAKAN BAHASA C


Ok kawan semua, kali ini saya akan membahas tentang bagaimana membuat program DIFD yang biasanya dipakai pada pemrograman PLC pada pemrograman mikrokontroler dengan menggunakan bahasa C dan pada kesempatan ini saya menggunakan software CVAvr.


Kita tahu instruksi DIFD salahsatunya digunakan untuk aplikasi palang pintu parkir. Sistem kerjanya yaitu pada saat mobil masuk dan terdeteksi oleh sensor, palang pintunya belum menutup. Ketika mobil sudah lewat dan sudah tidak terdeteksi sensor lagi barulah palang pintu tertutup. Itu juga berlaku untuk aplikasi yang menggunakan sistem kerja yang sama. Gambaran sistemnya seperti ini :


Digambar itu mobil harus sudah lewat ketika palang pintu tertutup. Artinya setelah sensor tidak mendeteksi keberadaan mobil. Pada kondisi ini kita bisa menggunakan instruksi DIFD jika kita menggunakan PLC. Bagaimana jika menggunakan Mikrokkontroler dengan bahasa C.

Mari kita bahas...

Kita bisa gambarkan ke rangkaian elektronika sebagai berikut :



Maaf disitu saya pakai Limit Switch semua......

Gambar diatas LS TUTUP dalam posisi tertutup karena memang kondisi awal portal tertutup.

Langsung saja berikut programnya :

#include <mega8535.h>
int X,Y;
void main(void)
{
DDRA=0xFF;
PORTA=0x00;
DDRB=0x00;
PORTB=0xFF;
X=0;
Y=0;
while (1)
      {
      // Place your code here
      if (PINB.0==0) 
        { Y=Y+1; };
      if (Y>0) 
        { PORTA=0x00000001; };      
      if (PINB.2==0 && X==0) 
        { PORTA=0x00000000; Y=0; };  
      if (PINB.3==0) 
        { X=X+5; X=X+5; };
      if (PINB.3==1 && X>0) 
        { PORTA=0x00000010; };
      if (PINB.1==0&& X>0) 
        { PORTA=0x00000000; X=0;  };
       }
}

 Begini penjelasannya .....

Kita deklarasikan penggunaan jenis mikronya dengan instruksi "#include <mega8535.h>" serta kita menggunakan dua variabel yaitu dengan instruksi "int X,Y;"

Selanjutnya kita setting port A dan Port B dengan instruksi 

DDRA=0xFF;
PORTA=0x00;
DDRB=0x00;
PORTB=0xFF;
Kemudian kita set awal nilai variabel dengan angka nol dengan instruksi
X=0;
Y=0;
Setelah persiapan selesai kita masuk program utama.

      if (PINB.0==0) 
        { Y=Y+1; };
      if (Y>0) 
        { PORTA=0x00000001; };      
      if (PINB.2==0 && X==0) 
        { PORTA=0x00000000; Y=0; };  
      if (PINB.3==0) 
        { X=X+5; X=X+5; };
      if (PINB.3==1 && X>0) 
        { PORTA=0x00000010; };
      if (PINB.1==0&& X>0) 
        { PORTA=0x00000000; X=0;  };


  1. Jika tombol input buka ditekan maka portal membuka 
  2. Jika telah membuka penuh portal berhenti (biar motor tidak terbakar)
  3. Mobil masuk dan terdeteksi sensor ...... tidak dilakukan apa-apa (hanya menambah nilai variavel X)
  4. Setelah tidak terdeteksi sensor dan kondisi nilai X>0 maka portal menutup
  5. Setelah portal menutup penur maka portal berhenti (biar motor tidak terbakar juga :)) serta mereset variabel X
Catatan : Variabel Y tambahan saja apabila menggunakan inputan dari luar seperti PC atau Mikro yang lain.

Sekian dan silahkan dicoba ......

Sampai jumpa dan terima kasih.


Program_Lengkap
#include <mega8535.h>
int X,Y;
// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(1<<PORTB7) | (1<<PORTB6) | (1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
MCUCSR=(0<<ISC2);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
X=0;
Y=0;
while (1)
      {
      // Place your code here
      if (PINB.0==0) 
        { Y=Y+1; };
 if (Y>0) 
        { PORTA=0x00000001; };      
      if (PINB.2==0 && X==0) 
        { PORTA=0x00000000; Y=0; };  
      if (PINB.3==0) 
        { X=X+5; X=X+5; };
      if (PINB.3==1 && X>0) 
        { PORTA=0x00000010; };
      if (PINB.1==0&& X>0) 
        { PORTA=0x00000000; X=0;  };  
      }
}


Berlangganan update artikel terbaru via email:

0 Response to "PROGRAM DIFD PADA MIKROKONTROLER MENGGUNAKAN BAHASA C (Aktif ketika sudah tidak mendeteksi)"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel