Rabu, 27 November 2013

timer untuk gelombang generator

malam bry kali ini ane mau ngelanjutin tentang timer, teryata setelah di selidiki ternya timer juga bisa looh bry di jadikan sebagai gelombang generator.
ok langsung aja ane kasik tutorialnya :

PERCOBAAN :

percobaan ke 1
 Generator Gelombang dengan Adjustable Duty cycle


Pada percobaan kali ini akan dibuat program untuk mengeluarka n gelombang kotak pada pada pin 9 (OC1A) . Gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk k otak dengan duty cycle dapat diatur lebarny a. Lebar duty cycle akan diatur oleh poten siometer yang terhubung pada pin A0. Pada percobaan kali ini akan digunakan fungsi analogWrite yang berfungsi untuk m engeluarkan sinyal gelombang pada pin Pu lse Width Modulation (PWM).
jadi, pada percobaan x ini kita belum mengunakan timer untuk membangkitkan signal. tapi kita hanya memanfaatkan PWM.
  
how to make :
1_ buatlah rangkaian di bawah ini




2_ buatlah program di bawah ini, lalu compile dan masukan .hex ke dalam proteus

int val = 0;
void setup() 
{ 
Serial.begin(9600);
pinMode(9, OUTPUT);
}

void loop() {
val = analogRead(A0); 
analogWrite(9, val/4); 
Serial.print("PWM Value = "); 
Serial.println(val,DEC); 
delay(500);

}
==> jalankan simulasinya dan amati bentuk gelombangnya
kesimpulan : rangkaian di atas dan program di atas berfungsi untuk mengeluarkan duty cycle... duty cycle adalah selisih dari t2 dan t1 atau selisi waktu gelombang saat keadaan high dan keadaan low jadi rumusnya adalah T= th +tl , D= th/T * 100%. dan 
nilai duty cycle pada program di atas dapat di atur dengan mengunakan potensio meter.

berikut merupakan video tutorialnya :

percobaan ke 2
  Generator Gelombang dengan Adjustable Frekuensi


Pada percobaan ka li ini gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk k otak dengan duty cycle yang besarnya tetap yaitu 50%, namun besarnya frekuensi dapat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang te rhubung pada pin A0. Program pada perco baan kali ini akan menggunakan konfigu rasi register untuk mengeluarkan sinyal ge lombang pada pin PWM.

how to make :
1_ rangkailah rangkaian di bawah ini 

2_buatlah program dibawah ini
int setCycles;

void set(int cycles) { char oldSREG;

int dutyCycle = cycles * 0.5; if (dutyCycle < 6) {
dutyCycle = 6;

}

if (dutyCycle > 1015) { dutyCycle = 1015;
}

if (cycles < 50) { cycles = 50;

}

oldSREG = SREG; cli();

ICR1 = cycles; OCR1A = dutyCycle; SREG = oldSREG;
}

void setup() { TCCR1A = 0;
TCCR1B = _BV(WGM13);

TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12)); TCCR1B |= _BV(CS10);

DDRB |= _BV(PORTB1); TCCR1A |= _BV(COM1A1);
}

void loop() {

int temp_cycles = analogRead(A0); if (temp_cycles != setCycles ) {

setCycles = temp_cycles; set(setCycles);
}
}


3_ jalankan simulasinya dan amati bentu gelombangya

==> kesimpulan dari percobaan 2 adalah : program pada percobaan 2 digunakan untuk mengatur keluaran frekuensinya dan duty cyclenya tetap sebesar 50% tidak bisa di ubah lagi.

berikut merupakan video tutorialnya: 


percobaan ke 3:
PWM dengan Adjustable Frekuensi dan Duty cycle (7 KHz sampai 300 KHz)

Pada percobaan ka li ini gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk k otak dengan duty cycle dan frekuensi yang d apat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang terhub ung pada pin A0. Perubahan duty cycle akan diatur oleh potensiometer yang terhu bung pada pin A1. Program pada percobaan kali ini akan menggunakan konfigur asi register untuk mengeluarkan sinyal ge lombang pada pin PWM.

how to make :
1_buatlah rangkaian di bawah ini :
2_buatlah program di bawa ini:
      
int setCycles; int setDuty;

void set(int cycles, float duty) { char oldSREG;

int dutyCycle = cycles * duty; if (dutyCycle < 6) {

dutyCycle = 6;

}

if (dutyCycle > 1015) { dutyCycle = 1015;

}

if (cycles < 50) { cycles = 50;

}

oldSREG = SREG; cli();

ICR1 = cycles; OCR1A = dutyCycle; SREG = oldSREG;

}

void setup() { TCCR1A = 0;

TCCR1B = _BV(WGM13);

TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12)); TCCR1B |= _BV(CS10);

DDRB |= _BV(PORTB1); TCCR1A |= _BV(COM1A1);

}

void loop() {

int temp_cycles = analogRead(A0); int temp_duty = analogRead(A1);

if (temp_cycles != setCycles || temp_duty != setDuty) { setCycles = temp_cycles;

setDuty = temp_duty; set(setCycles, setDuty / 1024.0);
}

}


3_ jalankan simulasi dan amati apa yang terjadi.


==> kesimpulan dari percobaan ke 3 adalah : percobaan ini berfungsi untuk mengatur besar duty cycle dan besar frekuensi gelombang keluaranya....pada potensio di pin A0 digunakan untuk mengatur frekuensinya, sedangkan pada pin A1 digunakan untuk mengatur duty cycle yang di inginkan.
berikut merupakan video tutorialnya:


demikianlah pos kali new
semoga kalian terhibur, mav kalau masih banyak kekurangan...



Selasa, 26 November 2013

TIMER DAN COUNTER

TIMER DAN COUNTER

selamat malam agan2 mavv da lama gak pos karena blog yang kemaren udah di hapus sama google jadi agan sxan bisa lanjutin belajarnya di sini duniailmu132.blogspot.com. pada kesempatan kali ini sama akan membagikan tentang apa itu timer dan counter.
timer adalah sebuah fungsi yang sudah ada di arduino timer terbagi menjadi berbagai bit dan setian bit mempunyai fungsi yang berbeda-beda :
}Timer Counter 0 (8 bit) – Digunakan untuk fungsi delay(), millis(), micros()
}Timer Counter 1 (16 bit) – Digunakan untuk library servo
}Timer Counter 2 (8 bit) – Digunakan untuk fungsi tone()
sedangkan counter adalah sebuah fungsi yang dikembangkan dari timer.

berikut merupakan tutorial untuk mempraktekan timer dan counter hanya dengan simulasi
 PERALATAN :
1.   Komputer
2.   Arduino Uno
3.   Kabel USB tipe B
4.   Project board
5.   Kabel jumper
6.   LED
7.   Resistor 330 Ohm
8.   Switch pushbutton
9.   LCD
10. Potensiometer

PERCOBAAN :
6.1 Penggunaan Timer Overflow Untuk LED Blinking
Pada percobaan kali ini akan dibuat program untuk membuat led berkedip per 500 milliseconds.  Pada  dasarnya  LED  akan  toggle  (berubah  kondisinya)  setiap  terjadi interupsi   timer   overflow.   Nilai   register   timer   di-set   sedemikian   rupa  sehingga menghasilkan waktu overflow per 500 milliseconds.
Prosedur :
1.   Buatlah rangkaian seperti pada Gambar 6.1.

2.   Tuliskan  sintaks  program  berikut  ini,  kemudian  lakukan  kompilasi  dan  upload
program ke sistem minimum Arduino.
boolean  dataLed  =  0;                     
unsigned  int  overflowCount  =  0;

void  setup() {                                 
Serial.begin(9600);               
pinMode(13,  OUTPUT);                   
TCCR1A  =  0;                           
TCCR1B  =  0;                           
TCNT1  =  34286;              

TCCR1B  |=  (1  <<  CS12);



TIMSK1  |=  (1  <<  TOIE1);   
sei();
}

ISR(TIMER1_OVF_vect)  {  TCNT1  =  34286;                           
if(dataLed  ==  0)  {              
dataLed  =  1;                        
}
else  {                                      
dataLed  =  0;                        
}
digitalWrite(13,  dataLed);
overflowCount++;                      
}

void  loop() {
Serial.print("Overflow  count  =  ");       
Serial.println(overflowCount,DEC);
  delay(100);                                            
}
3.   Buka Serial Monitor pada Arduino IDE, pastikan baudrate pada Serial Monitor
adalah 9600. Kemudian amati teks yang ditampilkan pada Serial Monitor. Amati
juga kondisi nyala dan mati LED pada pin12.

6.2 Jam Digital Menggunakan Timer

Pada percobaan kali ini akan dibuat program sederhana yang berfungsi sebagai jam digital  dengan  memanfaatkan  fitur  timer  mikrokontroler.  Timer  akan  dikonfigurasi sehingga terjadi overflow setiap 1 detik. Tiap timer terjadi overflow, variabel detik, menit dan jam akan di update nilainya. Nilai variabel tersebut akan ditampilkan pada LCD.
Prosedur :
1.   Buatlah rangkaian seperti Gambar 6.2.


2.   Tuliskan sintaks program berikut ini, lakukan kompilasi dan upload program.
#include<LiquidCrystal.h>
LiquidCrystal  lcd(2,3,4,5,6,7);
unsigned  int  jam,  menit, detik;
boolean led = 0;

ISR(TIMER1_OVF_vect)  {
TCNT1H=0xC2;
TCNT1L=0xF7;
detik++;
if(detik>=60)  {
detik  =  0;
menit++;
if(menit>=60)  {
menit  =  0;
jam++;
if(jam>=24)  {
jam  =  0;
}
}
}
}

void  initTimer1()  {
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xC2;
TCNT1L=0xF7;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK1=0x01;
sei();
}

void  setup() {
lcd.begin(16,2);
lcd.clear();
initTimer1();
}

void  loop() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Jam  Digital");
lcd.setCursor(0,1);
lcd.print(jam,DEC);
lcd.print(":");
lcd.print(menit,DEC);
lcd.print(":");
lcd.print(detik,DEC);
delay(500);
}

6.3  Counter Mode Falling Edge
Padapercobaan kali iniakandibuat program yang berfungsi untuk menghitung jumlah penekanan switch pada input counter. Konfigurasicountermenggunakan mode falling edge.

Prosedur :

1.  Buatlahrangkaian s epertipadaGambar 6.3.
2.  Tuliskansintaks  program  berikutini,  kemudianlakukankompilasidanupload

programkesistem minimum Arduino.

voidsetup()                      
{
Serial.begin(9600);            
TCCR1A=0x00;                   
TCCR1B=0x06;                   
TCNT1H=0x00;                   
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
}

voidloop() {                                          

Serial.print("Nilai TCNT1 = ");   
Serial.println(TCNT1,DEC);         
delay(100);                      
}

3. Buka Serial Monit or padaArduino IDE, kemudiantekanswitch pushbuttondanamatinilai TCNT1 yang ditampilkanpada Serial Monitor. 

note: Nilai counter TCN1 akan berubah pada saat pin 5 di beri logika 1-0 atau pada saat push button dari kondisi tidak di tekan lalu di tekan maka akan aktif.

6.4  Counter Mode Rising Edge

Padapercobaanka li iniakandibuat program yang fungsinyasamadenganPercobaan 6.3. Namunpadapercobaan kali inikonfigurasicountermenggunakan mode rising edge.

Prosedur :

1.      GantilahsintaksprogrampadaPercobaan 6.5 dengansintaks p rogramberikutini, kemudianlakukankompilasidanupload program kesistem minimum Arduino.
voidsetup()                          
{
Serial.begin(9600);         
TCCR1A=0x00;                
TCCR1B=0x07               
TCNT1H=0x00;         
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
}

voidloop() {                                            

Serial.print("Nilai TCNT1 = ");    
Serial.println(TCNT1,DEC);  
delay(100);                 
}

2.      Buka Serial Monitor padaArduino IDE, kemudiantekanswitch pushbuttondanamatinilai TCNT1 yang ditampilkanpada Serial Monitor. 
note :
1.      Kapankahnilaicounterakanberubah ?Saatswitchditekanataudilepas ?Jelaskan !Pada saat kondisi switch dari keadaan ditekan sampai dilepas , karena pada program kali ini yang di pakai adalah mode rising edge yaitu akan aktif saat kondisi dari 0 ke 1
2.      Jelaskanperbedaanpenggunaancounter mode falling edgedan mode rising edge !Mode falling edge adalah perubahan terjadi saat data atau nilainya berubah dari kondisi High ke LOW sedangkan jika Rissing edge sebaliknya, yaitu dari LOW ke HIGH
TERIMAKASIH TELAH BERKUNJUNG DI BLOG SAYA
SEMOGA APA AYANG ADA DI BLOG INI BERMANFAAT