Witam oto mój kod obsługi przetwornika A/C i niestety jest problem w terminalu odbieram tylko same jedynki.
Połączenia są następujące do wejścia PC0 jest podłączony opornik 10kohm i do niego potencjometr którym reguluje napięcie z zakresu od 0 do 5V.
Proszę o pomoc co może być nie tak
#define F_CPU 8000000
#define UART_BAUD 4800
#define UBRR (F_CPU/(16ul*UART_BAUD)-1)
#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>
#include <stdlib.h>
//Inicjalizacja UARTU
void USARTInit(unsigned int ubrr)
{
UBRRH = (ubrr>>8);
UBRRL = (unsigned char) ubrr;
//Włączenie nadawania i odbioru oraz przerwania dla odbioru
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
//Włączono dostęp do ubbh ustawiono 8 bitów danych parzystość oraz 2 bity stopu
UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)|(1<<UPM1)|(1<<USBS);
sei();
}
//Wysłanie pojedynczego znaku
void nadajznak (char dana1)
{
while(!(UCSRA & (1<<UDRE)));
UDR=dana1;
}
//Zliczanie liter w wyrazie i wysyłanie ich do funkcji nadajznak
void nadajstring (char *dana)
{
int dlugosc,i=0;
dlugosc = strlen(dana);
for(i=0;i<dlugosc;i++)
{
nadajznak(dana[i]);
}
}
//Odbieranie znaku przez UART
SIGNAL (SIG_UART_RECV)
{
nadajznak(UDR);
}
volatile unsigned int value=0x00;
SIGNAL(SIG_ADC)
{
value = ADCL;
PORTB = ~(value>>2);
}
int main(void)
{
char wyslij[10];
USARTInit(UBRR);
DDRB = 0xFF;
ADCSR = (1<<ADEN)|(1<<ADIE)|(1<<ADFR)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
ADMUX=(0<<REFS1)|(0<<REFS0)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
sei();
while(1)
{
itoa(value,wyslij,2);
nadajstring(wyslij);
nadajznak(32);
}
}
Połączenia są następujące do wejścia PC0 jest podłączony opornik 10kohm i do niego potencjometr którym reguluje napięcie z zakresu od 0 do 5V.
Proszę o pomoc co może być nie tak