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

BACA JUGA:   RTC DS 1307 dengan Codevision AVR [2]

#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

BACA JUGA:   belajar mikrokontroler; Menyalakan led sesuai data pembanding

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

}

}

 




DMCA.com Protection Status

pengunaan if lcd pada avr (3), rangkian sensor cahaya dengan atmega16 (3), contoh final project atmega32 (3), cara pemasangan sensor cahaya untuk atmega 8535 program cvavr (2), sensor cahaya menggunakan atmega (2), sensor cahaya menggunakan atmega16 (2), rangkaian menyalakan lampu dengan ldr cv avr (2), codingan ldr dengan atmega8535 (2), cara pemasangan sensor cahaya untuk atmega 8535 (2), sensor dengan atmega16 dan code vision avr (2)

Post You May Also Like

Berikan tanggapan anda

  1. 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

  2. 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.