ADC pada Mikrokontroler ATMEGA16

 

Dalam Mikrokontroler ATMEGA16 terdapat 8 buah ADC yang berada pada PORTA (ADC0-ADC7), ADC (Analog to Digital Converter) merupakan proses perubahan tegangan DC kedalam data bilangan digital, bisa berupa biner, heksa, ataupun desimal tergantung pemrograman yang dilakukan.

Dalam percobaan kali ini akan dilakukan uji coba pembacaan nilai ADC pada PORTA.0(ADC 0) dan PORTA.1(ADC 1) pembacaan data dalam bentuk digital 8bit dan dirubah kedalam bentuk desimal dan ditampilkan dalam LCD 16x2. berikut merupakan skema rangkaian uji cobanya :

ADC_LCDADC pada mikrokontroler ATMEGA16 dapat diberi referensi tegangan eksternal, yang dalam uji coba ini referensi tegangan eksternal di inputkan pada PIN 30 (AVCC).POT_ADC  Dua buah potensio meter di inputkan pada port ADC yang dipergunakan sebagai simulasi perubahan tegangan yang terjadi ketika potensio ini diputar, dalam kenyataan perubahan nilai tegangan ini dapat di aplikasikan berupa pembacaan sensor, misalkan sensor suhu LM35, sensor jarak GP2D12, dll tergantung aplikasi yang akan digunakan.

Berikut merupakan program percobaan beserta penjelasannya yang saya tulis dalam CodeVision AVR :

#include <mega16.h>

#include <delay.h>

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

#define ADC_VREF_TYPE 0x60  //Tegangan referensi yang digunakan pin AVCC

// Nilai konversi adc 8bit
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

int adc0,adc1; 
char buf0[8];
char buf1[8];

void main(void)
{
PORTA=0xFF;  //Pull up interal port A diaktifkan
DDRA=0x00; 
//Seluruh PIN Port A sebagai Input

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

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

lcd_init(16);

while (1)
      {
       lcd_gotoxy(0,0);lcd_putsf("ADC 0 =");
      lcd_gotoxy(0,1);lcd_putsf("ADC 1 =");
      adc0=read_adc(0); // Baca nilai ADC0 dan simpan dalam variabel adc0
      itoa(adc0,buf0);
// Konversi nilai integer adc0 ke dalam bentuk karakter

      lcd_gotoxy(8,0);lcd_puts(buf0); // Tampilkan nilai adc0
      adc1=read_adc(1);  // Baca nilai ADC1 dan simpan dalam variabel adc1
      itoa(adc1,buf1);
//Konversi nilai integer adc1 ke dalam bentuk karakter

      lcd_gotoxy(8,1);lcd_puts(buf1); //tampilkan nilai adc1
      }
}

Hasil Pembacaan ADC akan ditampilkan dalam bentuk desimal 0-255 berdasarkan hasil pembacaan.LCD_adcSemoga membantu, Terima Kasih.

Pengaturan Kecepatan Motor DC dengan ATMEGA16 dan L293D

Pada posting kali ini dilakukan uji coba pengaturan kecepatan putaran motor DC, menggunakan mikrokontroler ATMEGA16 sebagai prosesor, dan driver menggunakan ICL293D yang dapat di inputkan tegangan maksimum 32V, LCD karakter 16x2 sebagai user interface, berikut skema rangkaian tersebut :


Motor DC yang di kontrol berjumlah 2 buah, dengan pengaturan dengan 4buah push button, yang berfungsi menaikan dan menurunkan kecepatan.

Driver motor menggunakan IC L293D yang sudah biasa digunakan, dengan fungsi sebagai berikut :
- IN1 & IN2 = arah putaran motor 1 misal (IN1=High & IN2=Low) maka motor forward dan sebaliknya
- IN3 & IN4 = arah putaran motor 2 misal (IN3=High & IN4=Low) maka motor forward dan sebaliknya
- EN1 = Pengatur kecepatan motor 1 dengan metode PWM (Pulse Width Modulation)
- EN1 = Pengatur kecepatan motor 2 dengan metode PWM (Pulse Width Modulation)

Dengan memanfaatkan fitur Fast PWM yang terdapat dalam mikrokontroler ATMEGA16, pemrograman diawali dengan mengaktifasi Fast PWM mode OCR1A untuk motor 1, dan OCR1B untuk motor 2, kemudian nilai OCR1A dan OCR1B ditampilkan melalui LCD sebagai parameter. Berikut merupakan program lengkapnya yang saya tulis dengan bahasa C pada CodeVision AVR :
#include

// Alphanumeric LCD Module functions
#include
#include
//Deklarasi variabel
int SA,SB;
char MA[8];
char MB[8];
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 12000.000 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// 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=0xA1;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

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

while (1)
      {   
      lcd_gotoxy(0,0);lcd_putsf("M1=");lcd_gotoxy(0,1);lcd_putsf("M2=");  
      PORTD.0=1;   //Motor 1 Forward
      PORTD.1=0; 
      PORTD.3=1;   //Motor 2 Reverse
      PORTD.4=0; 
      if(PINA.0==0){SA++;}  //Jika pushbutton A0 ditekan naikan kecepatan motor 1
      if(PINA.1==0){SA--;}   //Jika pushbutton A1 ditekan turunkan kecepatan motor 1
      if(PINA.2==0){SB++;}   //Jika pushbutton A2 ditekan naikan kecepatan motor 2
      if(PINA.3==0){SB--;}    //Jika pushbutton A3 ditekan turunkan kecepatan motor 2
      lcd_gotoxy(5,0);itoa(SA,MA);lcd_puts(MA); //Tampilkan nilai kecepatan Motor 1
      lcd_gotoxy(5,1);itoa(SB,MB);lcd_puts(MB);  //Tampilkan nilai kecepatan Motor 2
      OCR1A=SA; 
      OCR1B=SB;
      // Place your code here

      }
}

Terima Kasih, semoga membantu.

Monitoring SUHU dan Detector Smoke menggunakan ATmega16 Dengan Bahasa Basic (Bascom AVR)

Pada project kali ini adalah sedikit eksperimen menggunakan sensor suhu LM35 dan smoke detektor, rangkaian akan mendeteksi tingkat ketebalan asap dan nilai parameternya akan ditampilkan melalui LCD, dan akan menentukan tingkat bahaya dan adanya api jika terjadi peningkatan suhu. Monitoring SUHU dan Detector Smoke menggunakan ATmega16 Dengan Bahasa Basic )Bascom AVR) Berikut daftar Komponen Library nya... :-) ATMega 16 Led Button LCD 20*4 Sensor LM35 Detector Smoke Berikut Listing Program Basic nya 'Konfigurasi ATmega 16 '================================== $regfile = "m16def.dat" $crystal = 1200000 'Konfigurasi LCD '================================== Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0 Config Lcd = 20 * 4 Cursor Off 'Konfigurasi Input & Out put '================================== Config Portd = Output Config Porta = Input 'Bagian ADC '================================== Dim Y As Integer Deflcdchar 0 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32 Config Adc = Single , Prescaler = Auto , Reference = Internal Dim A As Word , Volt As Word , Volt_d As Byte Dim Z As Word , I As Word , I_d As Byte Start Adc 'analisasi Port '================================== C Alias Portd.3 'Star Awal Program '================================== Cls Locate 1 , 4 Lcd "ALARM KEBAKARAN" Locate 3 , 1 Lcd " Suhu & Sensor Asap" Locate 4 , 1 Lcd " AVR ATmega16" Wait 1 Cls Waitms 500 'Mulai Program '=================================== Do 'Baca Sensor Suhu '=================================== Locate 1 , 1 Lcd "MONITORING SUHU" A = Getadc(0) Volt = A * 5 Volt_d = Volt Mod 10 Volt = Volt / 20 Locate 2 , 1 Lcd Volt ; "," ; Volt_d Locate 2 , 6 Lcd Chr(0) ; "C" 'Baca Sensor Asap '================================== Locate 3 , 1 Lcd "MONITORING ASAP" Z = Getadc(1) I = Z * 10 I_d = I Mod 10 I = I / 20 Locate 4 , 1 Lcd I ; "," ; I_d Locate 4 , 6 Lcd Chr(1) ; "ppm" 'Bagian Suhu Normal '================================== Normal: If Volt < 31 Then If Volt > 19 Then Locate 2 , 9 Lcd "SUHU NORMAL " C = 1 End If End If 'Bagian Suhu Dingin '=================================== Dingin: If Volt < 19 Then Locate 2 , 8 Lcd " SUHU DINGIN " C = 1 End If 'Bagian Suhu Siaga '=================================== Siaga: If Volt > 30 Then If Volt < 41 Then Locate 2 , 9 Lcd "SUHU SIAGA1" C = 1 End If End If If Volt > 40 Then If Volt < 51 Then Locate 2 , 9 Lcd "SUHU SIAGA2" C = 1 End If End If If Volt > 50 Then If Volt < 61 Then Locate 2 , 9 Lcd "SUHU SIAGA3" C = 1 End If End If 'Bagian Suhu Bahaya '=================================== Bahaya: If Volt > 60 Then Locate 2 , 9 Lcd "KEBAKARAN " C = 0 End If Loop Skema Rangkaian Menggunakan Proteus 7.7 SP2 Untuk pertanyaan dan kelengkapannya Klick Disini Inbox ajah

AVR Studio 5 Full version Download

Software dapat didownload langsung disini
Ukuran File 606MB

Contoh PLC Operasi proses pengisian dan pengosongan Tangki

Pengisian dan pengosongan reservoir adalah proses umum dalam industri serta kebutuhan untuk mencampur dua atau lebih zat. Dengan menggunakan katup otomatis proses ini dapat benar-benar otomatis. yang akan kita gunakan misalkan adalah air, dan tangki harus diisi dan dikosongkan empat kali.

Ketika Anda menekan tombol T1 pada panel operasi, katup V1 terbuka dan sebuah tangki mulai terisi dengan air. Pada saat yang sama, motor M dari mixer mulai bekerja. Ketika reservoir mengisi, permukaan air naik dan mencapai tingkat yang ditetapkan oleh S1 sensor. Menutup katup V1 dan motor mixer berhenti. selanjutnya Katup V2 terbuka, dan tangki tersebut mulai proses pengosongan. Ketika level air turun di bawah tingkat yang ditetapkan oleh sensor S2,maka katup V2 tertutup. Dengan mengulangi siklus yang sama empat kali, lampu yang menunjukkan akhir siklus diaktifkan. Menekan tombol T1 akan memulai siklus baru.