Mam problem z pomiarem napięć przez AVRa. Program wygląda następująco:
AVCC i VCC są podłączone przez kondensatory 100nF do masy. Napięcie mierzę na porcie A, pin 2 (ADC2). Pomiar ma jakby zbyt małą rozdzielczość - przy 976mV uzyskuję na wyświetlaczu wynik 3993. Aby go poprawnie wyskalować, chciałem pomnożyć wartość ADCW * 0,244. Niestety, wygląda to tak, jakby mnożenie odbywało się na liczbach całkowitych i było mnożenie przez 0. Tak samo, jeśli zdecyduję się mnożyć przez 1,01, a 1,99 - wynik wyświetlany jest taki sam. Gdzie leży problem ?
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd.h"
#include <avr/delay.h>
long pomiar1;
unsigned char buf[10];
void adc_init(void)
{
//ADMUX = (1<<REFS0)|(1<<REFS1);
ADCSRA = (1<<ADEN) | (1<<ADPS2)| (1<<ADPS0);
ADMUX = 0b11000010;
}
int main(void)
{
DDRA=0b00000000;
PORTA=0b00000000;
adc_init();
DDRB = 0b10000011;
PORTB = 0b01111111;
DDRD = 0b11111111;
PORTD = 0b11111111;
lcd_init(LCD_DISP_ON);
for (;;) {
ADCSRA |= _BV(ADSC);
while(bit_is_set(ADCSRA,ADSC))
{};
pomiar1=ADCW;
pomiar1=ADCW*0,244;
lcd_gotoxy(0,0);
itoa(pomiar1,buf,10);
lcd_puts(buf);
}}AVCC i VCC są podłączone przez kondensatory 100nF do masy. Napięcie mierzę na porcie A, pin 2 (ADC2). Pomiar ma jakby zbyt małą rozdzielczość - przy 976mV uzyskuję na wyświetlaczu wynik 3993. Aby go poprawnie wyskalować, chciałem pomnożyć wartość ADCW * 0,244. Niestety, wygląda to tak, jakby mnożenie odbywało się na liczbach całkowitych i było mnożenie przez 0. Tak samo, jeśli zdecyduję się mnożyć przez 1,01, a 1,99 - wynik wyświetlany jest taki sam. Gdzie leży problem ?
