• Motivation

    Bekerja keraslah, Bermimpilah lebih besar dan jadilah yang terbaik FILAB.id...
  • Motivation

    Anda saat ini adalah hasil dari pengalaman anda FILAB.id...
  • Motivation

    Kesalahan adalah bukti bahwa kamu sedang mencoba FILAB.id...
Tampilkan postingan dengan label PWM. Tampilkan semua postingan
Tampilkan postingan dengan label PWM. Tampilkan semua postingan

Kamis, 30 Juni 2016

Akses PWM Codevisionavr

Salam elektro,

TOLONG BACA DENGAN DETAIL !

Siapkan alat dan bahan :
  • Minimum sytem atmega 8
  • Variable resistor 10k 
  • Lcd 16x2 
  • Motor dc (2)
  • IC L293D 
  • Push button (2)
  • Kabel jumper disesuaikan
  • Breadboard
  • Kabel usb
  • Laptop
  • Software codevision avr 
  • Download simulasi proteus
1. Sambungkan semua komponen sesuai dengan gambar atau bisa kalian coba dulu pada software proteus isis


CATATAN !
a. Pastikan setting software sudah sesuai
b. Pastikan pin PWM terdapat pada PORTB.1 dan PORTB.2 pada atmega 8
c. Pastikan settingan crystal menggunakan 12 Mhz
d. Timer 1 dan timer 2 sama saja tinggal kalian pilih salah satu

2. Buat program seperti dibawah ini pada software codevisionavr,apabila ada yang belum tau cara menggunakan software codevision avr bisa baca disini 

Sebelum membuat program,kalian setting dulu pada codevision avr dan proteus seperti ini

Dengan menggunakan TIMER 1


Dengan menggunakan TIMER 2


Display setting



/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Akses PWM
Version : 
Date    : 6/30/2016
Author  : Fickry Muhammad
Company : PT LEN
Comments: 


Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*******************************************************/

#include <mega8.h>
#include <stdio.h>
#include <delay.h>

// Alphanumeric LCD functions
#include <alcd.h>

#define incr_speed PINC.0
#define decr_speed PINC.1

#define motor_1_forward PORTB.0
#define motor_1_reverse PORTB.3

#define motor_2_forward PORTB.4
#define motor_2_reverse PORTB.5


// Declare your global variables here

int speed = 0;
char buffer[20];

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

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

DDRC.0  = 0;
PORTC.0 = 1;

DDRC.1  = 0;
PORTC.1 = 1;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 46.875 kHz
// Mode: Ph. correct PWM top=0x03FF
// OC1A output: Non-Inverted PWM
// OC1B output: Non-Inverted PWM
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 43.648 ms
// Output Pulse(s):
// OC1A Period: 43.648 ms Width: 32.725 ms
// OC1B Period: 43.648 ms Width: 0 us
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x02;
OCR1AL=0xFF;
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<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (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<<TOIE0);

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

// 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<<ADFR) | (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);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);

while (1)
      {
      // Place your code here 
      
      motor_1_reverse = 1;
      motor_2_reverse = 1;
      
      OCR1A = speed;
      OCR1B = speed; 
      
        if (incr_speed == 0)
        {
        speed = speed + 10;
        delay_ms(200);
        }
        
        if (decr_speed == 0)
        {
        speed = speed - 10;
        delay_ms(200);
        } 
        
        if (speed <= 0) speed = 0;
        
      sprintf(buffer,"Speed = %02d",speed);
      lcd_gotoxy(0,0);
      lcd_puts(buffer);
      lcd_gotoxy(0,1);
      lcd_putsf("aruselektronika");

      delay_ms(100);
      }
}
3. Compile project pada software cvavr,apabila tidak terjadi error lanjut dengan proses upload atau build all project files 

4. Download program .hex (hasil compile) pada minimum sistem menggunakan usb asp baca disini,bila menggunakan simulasi tinggal kalian masukan file .hexnya ke dalam ic baca disini

Theory Timer
Timer0
Mode Phase Correct PWM
Foc0 = Fosc/(N*512)
D = (OCR0/255)*100%

Mode Fast PWM
Foc0 = Fosc/(N*256)
D = (OCR0/255)*100%

Dimana:
Foc0 = Frekuensi output OC0
N = Skala clock (mempunyai nilai 1, 8, 64, 256 dan 1024)
D = Duty cycle
Fosc = Frekuensi clock kristal yang digunakan

Timer1
Mode Phase Correct PWM
Foc1a = Fosc/(2*N*TOP)
Foc1b = Fosc/(2*N*TOP)
D = (OCR1X/TOP)*100%

Mode Fast PWM
Foc1a = Fosc/(N*(1+TOP))
Foc1b = Fosc/(N*(1+TOP))
D = (OCR1X/TOP)*100%

Dimana:
Foc1a = Frekuensi output OC1A
Foc1b = Frekuensi output OC1B
N = Skala clock (mempunyai nilai 1, 8, 64, 256 dan 1024)
D = Duty cycle
Fosc = Frekuensi clock kristal yang digunakan
TOP = nilai maksimum counter (TCNT1), TOP mempunyai 3 buah nilai untuk kedua mode tersebut yaitu 8 bit (FF), 9 bit (1FF) dan 10 bit (3FF)

Sekarang saya akan membuat aplikasi membangkitkan sinyal PWM dengan periode 20 ms dengan duty cycle 75%, menggunakan Timer1 10 Bit Mode Fast PWM.

Dengan menggunakan kristal 12 Mhz, N = 256 dan TOP = 10 bit = 3FF = 1023

Maka akan didapat frekuensi output (Foc1x) sebesar 45,77 Hz atau jika diubah kedalam peroide 21,8 ms ≈ 20 ms

Untuk Duty cycle:
D = (OCR1X/TOP)*100%
75% = (OCR1X/1023)*100%
OCR1X = 767 = 2FF (dalam hexa) 

Untuk theory lebih lanjut kalian baca disini dan disini 

Instruction 
Jika kalian membuatnya pada simulasi,kalian coba run ,jika kalian ingin menambah kecepatan tekan tombol + speed,dan jika kalian ingin menurunkan kecepatan kalian tekan tombol - speed,lihat perubahan signal pwm pada osciloscop dan lcd 

Development
bisa kalian kembangkan,contohnya membuat robot line follower ketika robot berberlok kalian bisa atur kecepatan motornya 

Share:

Selasa, 28 Juni 2016

Dimmer Lampu / Motor AC Via Arduino

Salam elektro,Dimmer adalah rangkaian yang bisa mengatur besaran dan juga tingkat cahaya lampu/motor yang menyala, kalian bisa mengaturnya mulai dari yang redup hingga ke remang-remang sampai ke nyala lampu yang terang, dan kalian juga bisa membuat rangkaian dimmer pengatur nyala lampu dengan pola sederhana, di dalam rangkaian dimmer ini, terdapat 4 komponen penting guna mengatur kerja dimmer ini, komponen TRIAC berfungsi untuk mengatur besaran tegangan AC yang masuk ke perangkat lampu ini, sementara komponen OPTOTRIAC dan arduino berfungsi untuk mengatur bias TRIAC guna menentukan titik on dan off pada komponen TRIAC ini.

TOLONG BACA DENGAN DETAIL !

Siapkan alat dan bahan :
  • Arduino Uno/Nano/Mega (sama saja)
  • Variable resistor 10k
  • Resistor 100 Ohm (2)
  • Resistor 220 Ohm (2)
  • Lampu / Motor AC 220VAC
  • Sumber 220 VAC
  • Triac BTA08 
  • OptoTriac MOC3021
  • Kabel jumper disesuaikan
  • Breadboard
  • Kabel usb
  • Laptop
  • Software arduino ide
  • Download simulasi schematic (altium file) 
1. Sambungkan semua komponen sesuai dengan gambar atau bisa kalian coba dulu pada software proteus isis



CATATAN !

A. Menurut pengalaman saya kalian jangan salah memilih jenis optotriac karena optotriac     mempunyai 2 jenis yaitu yang menggunakan zero crossing dan tanpa zero crossing, untuk aplikasi ini kalian gunakan yang tanpa zero crossing MOC302x, apa itu zerocrossing ?  

B. Pastikan kalian mengunakan opto triac bukan optotransistor, mengapa harus demikian ? silahkan kalian baca baca lagi di google

C. Rangkaian tidak akan berjalan dengan sempurna pada simulasi, jadi kalian langsung saja membuat hardwarenya

D. Pastikan pin optotriac ,triac dll sudah sesuai

E. Dikarenakan rangkaian ini melibatkan arus AC,jadi kalian lebih berhati hati lagi 

F. Jika kalian menggunakan beban yang tinggi, gunakan tipe triac yang mempunyai ampere besar

2. Copy paste sketch/program di bawah ini  ke dalam software arduino atau bisa langsung kalian upload pilih arduino yang digunakan,com yang digunakan kemudian click Run on Arduino pada lembaran project (driver harus benar benar terinstal) 
 3. Verify program arduino,apabila tidak terjadi error lanjut dengan proses upload

4. Upload program,apabila succes akan muncul tulisan done uploading,apabila ada yang belum tahu bagaimana cara upload code/sketch ke board arduino bisa baca disini

Instruction 
Pastikan rangkain sudah benar (sesuai),kalian beri supply pada board arduino,kemudian beri supply 220VAC pada lampu (be carreful),kalian coba putar tuas pada potensio,lihat perubahan yang terjadi pada lampu/motor, jika berhasil, lampu/motor akan terang atau redup/lambat cepat, sesuai putaran potensio (nilai potensio)

Development
1. Bisa kalian gunakan untuk control lampu kamar tidur kalian 
2. Bisa kalian gunakan untuk mengatur kecepatan motor universal AC



Share:

Jumat, 15 April 2016

Push Button & PWM Arduino

PUSH BUTTON & PWM
VIA ARDUINO


Pada turorial sebelumnya,arus elektronika sudah membahas bagaimana cara menggunakan pwm,nah banyak yang bertanya" terus bagaimana sih cara menambah nilai pwm tersebut ? nah silahkan kalian simak penjelasannya dibawah ini.

TOLONG BACA DENGAN DETAIL !

Siapkan alat dan bahan :
  • Arduino Nano/Uno/Mega (sama saja)
  • Light emmiting diode (led)
  • Resistor 220 ohm
  • Push button 2 pin / 4 pin (sama saja) 
  • Breadboard
  • Cable male to female
  • Laptop
  • Software arduino ide
  • Kabel usb
  • Download simulasi proteus (cara simulasi arduino di proteus klik disini)
  • Perintah-perintah pwm dan disini 
1. Sambungkan board arduino & led (sesuai gambar) 

CATATAN !
a. Pin arduino yang bisa digunakan untk akses pwm yaitu 3,5,6,9,10,11,selain itu adalah pin digital dan analog
b. Pastikan led dan switch terhubung dengan baik dan benar
c. Sebenarnya pwm itu hanya menuliskan nilai melalui perintah analogWrite()

2. Copy paste sketch/program di bawah ini  ke dalam software arduino 
/*
 * Push button pwm programmer by fickry muhammad
 */

#define lampu    9 // inisialisasi port 9 sebagai pemberi signal PWM
#define button1  2
#define button2  5

int data;

void setup() {
Serial.begin(9600);
Serial.print("Push Button & PWM By aruselektronika.blogspot.co.id");
pinMode(lampu, OUTPUT); // setting pin lampu sebagai output
pinMode(button1,INPUT_PULLUP);
pinMode(button2,INPUT_PULLUP);
}
 
void loop()
{
analogWrite(lampu,data);

if(!digitalRead(button1)){
data=data+1;
delay(100);  
}
if(!digitalRead(button2)){
data=data-1;
delay(100);
}
Serial.print("PWM = ");
Serial.print(data);
Serial.println();
delay(100);
}
3. Verify program arduino,apabila tidak terjadi error lanjut dengan proses upload

4, Upload program,apabila succes akan muncul tulisan done uploading,apabila ada yang belum tahu bagaimana cara upload code/sketch ke board arduino bisa baca disini

5. Sekarang klian coba tekan push button 1 atau push button 2 lihat apa yang akan terjadi pada led tersebut,dan lihat pada serial monitor software arduino maupun serial monitor pada simulasi proteus,bila program berfungsi dengan benar maka "data" akan increment atau decrement


Share:

PWM LED

PWM LED 
VIA ARDUINO 
Apa sih itu PWM ? PWM atau Pulse Width Modulation jika diterjemahkan langsung artinya Modulasi Lebar Pulsa,Jika kalain punya sebuah pulsa dan dapat mengubah lebarnya tanpa mengubah frekuensinya artinya kita baru saja melakukan modulasi pada lebar pulsa yg kalian miliki,nah terus bagaimana sih cara akses pwm menggunakan arduino ? silahkan kalian simak penjelasannya dibawah ini. 

TOLONG BACA DENGAN DETAIL ! 

Siapkan alat dan bahan : 
1. Sambungkan board arduino & led (sesuai gambar diatas) 
      Arduino                    Led
      1. Pin 9            >       Seri dengan resistor & led
      2. Ground        >       Cathode led 
     
CATATAN !
a. Pin arduino yang bisa digunakan untk akses pwm yaitu 3,5,6,9,10,11,selain itu adalah pin digital dan analog
b. Pastikan led terhubung dengan baik dan benar
c. Sebenarnya pwm itu hanya menuliskan nilai melalui perintah analogWrite()

2. Copy paste sketch/program di bawah ini  ke dalam software arduino 
 
#define lampu 9 // inisialisasi port 9 sebagai pemberi signal PWM  
int i = 0; // inisialisasi variabel untuk perulangan  
   
void setup() {  
pinMode(lampu, OUTPUT); // setting pin lampu sebagai output  
}  
   
void loop(){  
for(i=0;i<500;i++)
{
  analogWrite(lampu,i);
  delay(10);
}
}
3. Verify program arduino,apabila tidak terjadi error lanjut dengan proses upload

4, Upload program,apabila succes akan muncul tulisan done uploading,apabila ada yang

belum tahu bagaimana cara upload code/sketch ke board arduino bisa baca disini

5. Sekarang anda coba lihat apa yang akan terjadi pada led tersebut,apabila program sudah benar led akan mulai nyala secara perlahan,lalu redup secara perlahan 


Share:
Copyright © FILAB | Powered by FILAB
Design by Fickry Muhammad | Technology by Filab.id