Идея такова:
есть три датчика тока (Алегро) знанома что выход датчика аналоговый и выдает вольтаж от 0...5В, необходимо производить замеры напруги на каждом датчике, и выводить информацию на экран, при чем выбор датчика дожен осуществлятся нажатием кнопки(канал+ или канал-), ну вот такая дилема возникла немогу разобратся как реализовать этот самый выбор канала, (в автоматическом режиме работало) но надо ж в ручном, буду рад любой помощи
Вот программный код CodeVisionAVR
#include <mega8.h>
#include <stdio.h>
#include <delay.h>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
//-----------------------------------------------------------------------------------------------
#define ADC_VREF_TYPE 0x00
char lcd_buffer[31];
unsigned int resultat;
unsigned char ch_plus=1;
unsigned char ch_minu=1;
unsigned char adc_input;
unsigned int read_adc(unsigned char adc_input)
{
resultat=(ADCW*5)-(ADCW/10);
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
interrupt [EXT_INT0]void ext_int0_isr(void) // Кнопка переключения каналов+
{
ch_plus=0;
ADCSRA|=0x40;
adc_input+=0;
}
interrupt [EXT_INT1]void ext_int1_isr(void) // Кнопка переключения каналов-
{
ch_minu=0;
ADCSRA|=0x40;
adc_input-=0;
}
void main(void)
{
PORTD=0xFF;
DDRD=0x00;
MCUCR=0x0A;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
#asm("sei")
lcd_init(16);
while (1)
{
sprintf(lcd_buffer,"I=%4umA",resultat);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(250);
};
}
- Вложения
-
- 123.JPG
- Схема
- (153.23 КБ) 548 скачиваний


