Witam
Mam problem z programem do pomiaru napięcia i wyświetleniu na lcd. Program niby działa ale wyświetlane wartości są przypadkowe 0-150(jednak jak kręcę potencjometrem to coś się zwiększa wchodząc na wyższe wartości 200-455) program jest w fazie początkowej. Jestem początkującym w programowaniu procesorów.
Mam problem z programem do pomiaru napięcia i wyświetleniu na lcd. Program niby działa ale wyświetlane wartości są przypadkowe 0-150(jednak jak kręcę potencjometrem to coś się zwiększa wchodząc na wyższe wartości 200-455) program jest w fazie początkowej. Jestem początkującym w programowaniu procesorów.
#include <avr/io.h>
#include "HD44780.h"
#include <stdlib.h>
#include <stdio.h>
#include <avr/pgmspace.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include <string.h>
#include <avr/interrupt.h>
uint16_t pomiar(uint8_t kanal);//deklaracja funkcji pomioaru
int main(void)
{
int f=0;
char buffer [17];
LCD_Initalize();
//wybor napiecia odniesnienia
ADMUX |= (1<<REFS0) | (1<<REFS1);
//właczenie modułu ADC oraz ustawienie preskalera na 64
ADCSR |= (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
while(1) //nieskonczona petla w której dokonujemy pomiaru i wyswietlamy na lcd
{
LCD_Clear();
f=pomiar(0);
itoa (f,buffer,10); //zmiana z ASCII
LCD_WriteText("pomiar ");
// LCD_WriteData(pomiar(0));
LCD_WriteText(buffer); //pomiar i wyswietlenie
_delay_ms(1000);
}
}
// DEFINICJA FUNKCJI KTÓRA DOKONUJE POMIARU NA WYBRANYM KANALE, WEJSCIU
uint16_t pomiar(uint8_t kanal)
{
//usatwienie wybranego kanału ADC w rejestrze ADMUX
ADMUX |= (ADMUX & 0xF8) | kanal;
//start pomiaru przez ustawienie bitu ADSC w rejestrze ADSC
ADCSR |=(1<<ADSC);
//oczekiwanie na koniec pomiaru dopuku bit jest=1
while ( !ADIF );
//po zakonczeniu pomiaru gdy bit ADSC=0 zwrocenie wyniku w postaci
// 16-to bitowej wartości z rejestrów ADCH oraz ADCL
return ADCW;
}