X
    Categories: mikrokontroler

Sensor cahaya pada ATMega dengan codevision AVR


Sensor cahaya biasanya macem2, mulai dari fotodioda, fototransistor, LDR dan masih banyak lagi. Untuk membuat rangkaian sensor cahaya kita menggunakan Analog to Digital Converternya ATMega, kalau untuk jenis ATMega16, ATMega32 dan ATMega8535 kita bisa menggunakan PINA.

Prinsip kerja rangkaian sensor cahaya ini sama seperti sensor suhu LM35, dimana subrutin ADC milik ATMega akan mengambil input dari kaki ADC kemudian program akan membaca output ADC tersebut.

Berikut contoh penggunaan sensor cahaya menggunakan LDR, saya ambil dari laporan praktikum yang saya ampu, dibuat oleh Mas Adi Candra Swastika. Cara kerja program ini mikrokontrol akan mengambil output ADC dari LDR dan jika hasil pembacaan ADC melebihi 150 maka LCD akan menampilkan angka 1 (high) selain itu maka akan menampilkan angka 0 (low). Program ini dapat dimodifikasi sendiri misal dengan memvariasikan perlakuan output.

*****************************************************

This program was produced by the

CodeWizardAVR V2.05.0 Professional

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 13/04/2012

Author : Adi Candra Swastika

Company :

Comments:

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency : 16.000000 MHz

Memory model : Small

External RAM size : 0

Data Stack size : 256

*****************************************************/

#include <mega16.h> // mikrokontroler yang dipakai adalah atmega 16

#include <stdio.h>

#include <delay.h> //memasukkan library delay atau waktu tunda

// Alphanumeric LCD Module functions

#include <alcd.h> // library yang menunjukkan penggunaan lcd

unsigned char a, reff=150;//definisi variabel a, dan menentukan angka 150 sebagai referensi

char buff[32];

unsigned char adc_data;

#define ADC_VREF_TYPE 0x20

// ADC interrupt service routine

interrupt [ADC_INT] void adc_isr(void)

{

// Read the 8 most significant bits

// of the AD conversion result

adc_data=ADCH;

}

// Read the 8 most significant bits

// of the AD conversion result

// with noise canceling

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);

#asm

in r30,mcucr

cbr r30,__sm_mask

sbr r30,__se_bit | __sm_adc_noise_red

out mcucr,r30

sleep

cbr r30,__se_bit

out mcucr,r30

#endasm

return adc_data;

}

void main(void)

{

//definisi IO(input output) pada masing-masing port

PORTA=0x00;

DDRA=0x00;

PORTB=0x00;

DDRB=0x00;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;


TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// USART disabled

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 1000.000 kHz

// ADC Voltage Reference: AREF 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=0x8C;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:

// RS – PORTB Bit 0

// RD – PORTB Bit 1

// EN – PORTB Bit 2

// D4 – PORTB Bit 4

// D5 – PORTB Bit 5

// D6 – PORTB Bit 6

// D7 – PORTB Bit 7

// Characters/line: 16

lcd_init(16);

// Global enable interrupts

#asm(“sei”)

while (1)

{

a=read_adc(0); // pembacaan adc dimasukkan pada variabel a

lcd_gotoxy(0,0); //mendefinisikan koordinat x=0 y=0 sebagai awal mula penulisan LCD

sprintf (buff,”ADC0 : %d”,read_adc(0)); //menuliskan nilai ADC pada LCD

lcd_puts(buff);

lcd_gotoxy(0,1);//mendefinisikan koordinat x=0 y=1 sebagai awal mula penulisan LCD

if(a<reff){ //perumpamaan jika a kurang dari nilai referensi (150) maka LCD

lcd_putsf(“0”); //akan menampilkan angka 0, jika a>referensi (150) maka LCD

}else{ //akan menampilkan angka 1

lcd_putsf(“1”);

}

delay_ms(300); //memberikan delay sebesar 300 milisecond

lcd_clear();

}

}

 


mekanisme pembacaan sensor oleh LCD (4), pengunaan if lcd pada avr (3), contoh final project atmega32 (3), rangkian sensor cahaya dengan atmega16 (3), program avr sensor ldr lampu otomatis (2), contoh program sensor cahaya (2), coding sensor cahaya di atmega 32 (2), contoh proyek proteus menggunakan mikrokontroler (2), sensor dengan atmega16 dan code vision avr (2), program menggunakan atmega32 (2)

Post You May Also Like

anotherorion: Priyo Harjiyono, blogger kelahiran Cilacap yang kini menjadi warga Ngayogyakarta Hadiningrat, baginya blog adalah dunia untuk menciptakan mimpi2nya. Saat ini masih disibukkan sebagai pembelajar dalam dunia pendidikan.

View Comments

  • mas mau tanya dong kalo pake sensor cahaya lebih dari satu gimana? soalnya saya cobain sourcecode yg agan tulis diatas klo pake sensor cahaya lebih dari satu malah bentrok datanya..mohon pencerahan nya gan..

    • read_adc(0) diatas untuk PINA.0 klo butuh sensor kedua tinggal tambahkan listing programnya misal read_adc(1) untuk input di PINA.1, jangan lupa tambahkan variabel buff_kedua dan a_kedua untuk menyimpan hasil input di sensor kedua.

  • kok erroe ya gan? Error: D:\DATA\DATA\KULIAH\SEMESTER 3\Mikroprosesor\ta\Percobaan program ta\4.c(202): '"' expected, but '“' found Error: D:\DATA\DATA\KULIAH\SEMESTER 3\Mikroprosesor\ta\Percobaan program ta\4.c(212): invalid expression Error: D:\DATA\DATA\KULIAH\SEMESTER 3\Mikroprosesor\ta\Percobaan program ta\4.c(226): invalid expression