Witam,
Mój problem polega na tym, że za każdym razem przetwornik odczytuje zawsze taką samą wielkość (0xFF). Zmiana napięcia na wejście AC nie przynosi żadnych zmian. Mierzoną wartość otrzymuje z wyjścia potencjometru.
Poniżej zamieszczam kod programu.
Wypada jeszcze wspomnieć trochę o sprzęcie:
Napięcie z potencjometru (400 Ohm) dzielone jest na pół (dzielnik 3.9k/3.9k) a następnie podawane na wejście ADC0 procka.
AGND -> do masy
AREF -> przez kondensator 100n do masy
AVcc -> +5V
Do tego diody i układ RS232.
Z góry dziękuje za pomoc.
Rafał
Mój problem polega na tym, że za każdym razem przetwornik odczytuje zawsze taką samą wielkość (0xFF). Zmiana napięcia na wejście AC nie przynosi żadnych zmian. Mierzoną wartość otrzymuje z wyjścia potencjometru.
Poniżej zamieszczam kod programu.
#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
int main(void)
{
volatile unsigned int pomiar;
char buffer_n[5];
DDRB = 0x0F; // B1, B2 <- LED
PORTB = 0x00;
DDRC = 0x00;
PORTC = 0x00;
ADMUX |= _BV(REFS0);// wewnetrzne zródło
ADMUX |= _BV(REFS1);// napiecia referencyjnega
ADMUX |= _BV(ADLAR); // wyrownanie do lewej
ADCSRA |= _BV(ADEN); //zezwolenie na konwersje
ADCSRA |= _BV(ADPS0);
ADCSRA |= _BV(ADPS1);
USART_Init(25);
while(1)
{
ADCSRA |= _BV(ADSC); // Rozpoczęcie przetwarzania
while(bit_is_set(ADCSRA,ADSC)) // Oczekiwanie na zakończenie przetwarzania
{};
pomiar = ADCH;
utoa(pomiar, buffer_n, 10);
USART_Transmit(buffer_n[0]);
USART_Transmit(buffer_n[1]);
USART_Transmit(buffer_n[2]);
USART_Transmit(buffer_n[3]);
//USART_Transmit(buffer_n[4]);
_delay_ms(1000);
if(pomiar < 200)
PORTB |= _BV(2);
else
PORTB |= _BV(1);
}
}
Wypada jeszcze wspomnieć trochę o sprzęcie:
Napięcie z potencjometru (400 Ohm) dzielone jest na pół (dzielnik 3.9k/3.9k) a następnie podawane na wejście ADC0 procka.
AGND -> do masy
AREF -> przez kondensator 100n do masy
AVcc -> +5V
Do tego diody i układ RS232.
Z góry dziękuje za pomoc.
Rafał