Средства:
-Atmega8
-Фотодиод ФД265А
-LCD Для вывода резцльтата ацп на экран
Реализация:
Подключаю AVCC, AREF, длинную ногу фотодиода к +5V
AGND к GND;
PC0(ADC0) подключаю к короткой ноге фотодиода и через резистор 5КОм в GND
Код программы на С:
Код
#include <mega8.h>
#include <delay.h>
#include <stdlib.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12;PORTD
#endasm
#include <lcd.h>
// Declare your global variables here
char sstr[10];
interrupt [ADC_INT] void adc_isr(void)
{
PORTB = (1<<0);
lcd_gotoxy(0,1);
lcd_putsf("RABOTAET");
lcd_gotoxy(0,0);
lcd_putchar(ADCH);
//delay_ms(127);
//ADCSRA|=0x40;
#asm ("cli")
}
void __init_mk(void) {
DDRB=0xFF;
PORTB=0xFF;
ADCSRA=0x8F;
ADMUX=0;
#asm("sei")
}
void main(void)
{
lcd_init(16);
lcd_clear();
__init_mk();
ADCSRA|=0x40;
while (1)
{
PORTB = (1<<0);
lcd_gotoxy(7,1);
//lcd_putchar(rand());
itoa(rand(),sstr);
lcd_puts(sstr);
lcd_gotoxy(13,1);
lcd_putchar(sstr[2]);
delay_ms(25);
ADCSRA|=0x40;
PORTB = (0<<0);
delay_ms(150);
};
}
#include <delay.h>
#include <stdlib.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12;PORTD
#endasm
#include <lcd.h>
// Declare your global variables here
char sstr[10];
interrupt [ADC_INT] void adc_isr(void)
{
PORTB = (1<<0);
lcd_gotoxy(0,1);
lcd_putsf("RABOTAET");
lcd_gotoxy(0,0);
lcd_putchar(ADCH);
//delay_ms(127);
//ADCSRA|=0x40;
#asm ("cli")
}
void __init_mk(void) {
DDRB=0xFF;
PORTB=0xFF;
ADCSRA=0x8F;
ADMUX=0;
#asm("sei")
}
void main(void)
{
lcd_init(16);
lcd_clear();
__init_mk();
ADCSRA|=0x40;
while (1)
{
PORTB = (1<<0);
lcd_gotoxy(7,1);
//lcd_putchar(rand());
itoa(rand(),sstr);
lcd_puts(sstr);
lcd_gotoxy(13,1);
lcd_putchar(sstr[2]);
delay_ms(25);
ADCSRA|=0x40;
PORTB = (0<<0);
delay_ms(150);
};
}
Прерывания повторяются нормально, но вот число выводимое на дисплей - константно и равно - 838(с каким-то странным префиксом - черный квадрат без двух точек внизу слева)
Что я сделал неправильно?