Я использую ATmega16 в моем проекте. Я хочу получить значение = 1023, когда я даю 5V в качестве входных данных, и 0 при вводе = 0. Функция readADC считывает конкретный канал АЦП микроконтроллера. Частота моих часов составляет 4 МГц. Но при чтении ввода я получаю 255 как максимальное значение вместо 1023. Кто-то, кто знает об avr-программировании, может помочь !!!255 char. вместо 1023 Невозможно установить опорное напряжение
Мой код:
#include <avr/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char ReadADC(unsigned char ch)
{
ch = ch&0b00000111;
ADMUX&=0xF8;
ADMUX |= ch;
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC); //wait for conversion to complete
return(ADC);
}
int main(void)
{
SegDataDDR = 0xFF;
SegCntrlDDR = 0xF3;
SegCntrlPort = 0xF3;
SegDataPort = 0x00;
ADMUX = (1<<REFS0) | (0<<REFS1);
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); // ADEN set to turn ADC on
// clock frequency divided by 32 for operable 125KHz frequency
while(1)
{
ADCSRA |= (1<<ADSC); // start conversion
unsigned char value = ReadADC(0); // Reads the value of the ADC
}
1023. слишком велик, чтобы поместиться в 'без знака char'. То, что вы получаете, это младший байт 1023, который равен 255. – Michael
Подсказка: попробуйте 'unsigned short' или' unsigned int' вместо 'unsigned char' – Levi
Я пробовал float, int и другие, но это doesn 't work Пожалуйста, предложите подходящий тип данных, если это единственная проблема !!! – Yash