APLIKASI

Selasa, 09 April 2013

Progam Input Output digital Ala Arduino di Codevision avr.

Apa mungkin  Liblary arduino di gunakan di codevision?? Tentu saja mungkin, tetapi jika hanya di copas code dari arduino ke Cavr ada kemungkinan error karna fungsi bawaan yang di buat masing2 software agak berbeda. Tapi kalo ditiru pasti bias,, Contohnya untuk progam INPUT/OUTPUT di arduino, mari kita belajar bersama..
Pada pin arduino lebih di kenal D0,D1…..D13 , dan A0-A15 untuk pin analog. Gambar di bawah ini adalah mapping pin arduino dengan atmega 8/168/328.
 
sumber klik
 

Pada Codevision AVR biasa di tulis dengan instruksi DDRD,PORT dan PIN. D
Pada kesempatan Kali ini fungsi digitalWrite (output), digitalRead(baca Input),pinMode (setting I/0) akan di tulis di Codevision Avr..
berikut contoh progam untuk membaca input  dan mengeluarkan output.


1:  #include <mega168.h> // atau mega8.h  
2:  #include <delay.h>  
3:  #define LOW 0  
4:  #define HIGH 1  
5:  #define OUTPUT 1  
6:  #define INPUT 0  
7:  #define INPUT_PULLUP 2  
8:  unsigned char digitalRead(unsigned char P) {  
9:    if (P>=0 && P<=7){if(PIND & (1 << P)){  
10:    return HIGH;}else{return LOW;}}   
11:       else if (P>=8 && P<=13){if(PINB & (1 << P-8)) {  
12:    return HIGH;}else{return LOW;}}   
13:       else if (P>=14 && P<21){if(PINC & (1 << P-14)){  
14:    return HIGH;}else{return LOW;}} }   
15:  /*************************************************************/    
16:  void digitalWrite(unsigned char P,unsigned char ST) {   
17:       if(P>=0 && P<=7){if(ST == HIGH){(PORTD |= (1 << P))}  
18:    else{ (PORTD &= ~(1 << P)); }}  
19:       else if (P>=8 && P<=13){if(ST == HIGH){  
20:    (PORTB |= (1 << P-8)); }else{ (PORTB &= ~(1 << P-9)); }}  
21:       else if (P>=14){if(ST == HIGH){  
22:    (PORTC |= (1 << P-14)); }else{ (PORTC &= ~(1 << P-14)); }}}  
23:  /*************************************************************/                      
24:  void pinMode(unsigned char P,unsigned char ST) {  
25:       if(P>=0 && P<=7){ if(ST == OUTPUT){ DDRD|= (1 << P); }  
26:    else{DDRD &= ~(1 << P); if(ST==INPUT_PULLUP){PORTD|=(1<<P);}}}  
27:    else if(P>=8 && P<14){if(ST == OUTPUT){ DDRB|= (1 << P-8); }  
28:    else{DDRB &= ~(1 << P-8);if(ST==INPUT_PULLUP){PORTB|=(1<<P-8);}}}  
29:    else if(P>=14 && P<21){if(ST == OUTPUT){DDRC |=(1 << P-14); }  
30:    else{DDRC &= ~(1 << P-14);if(ST==INPUT_PULLUP){PORTC|=(1<<P-14);}}}}  
31:  /*************************************************************/  
32:  void main(void){   
33:  // setting I/O  
34:  pinMode(0,INPUT_PULLUP);  
35:  pinMode(1,OUTPUT);  
36:    while(1) // LOOPING  
37:    {  
38:     if(digitalRead(0)==LOW){  
39:     digitalWrite(1,HIGH);  
40:     }  
41:     if(digitalRead(0)==HIGH){  
42:     digitalWrite(1,LOW);  
43:     }  
44:    }  
45:  }  

 Penjelasan  
 pinMode(0,INPUT_PULLUP);  
 membuat pin D0 sebagai Input dan di beri PULLUP INTERNAL.  
 pinMode(1,OUTPUT);  
 membuat pin D1 sebagai output.  
 if(digitalRead(0)==LOW){digitalWrite(1,HIGH);  
 jika pin D0 diberi LOW, maka pin D1 bernilai HIGH.  
 if(digitalRead(0)==HIGH){digitalWrite(1,LOW);}  
 jika pin D0 diberi HIGH, maka pin D1 bernilai LOW.  
 Sekian, Semoga bermanfaat ya…  

Tidak ada komentar :