zatem tak procesor atmega16, zaprogramowałem atmege na pomiar ciągły i mam bardzo dziwny problem, atmega połączona przez UART do komputera, zczytywanie w labview. tam trzeba ustawić takie coś jak delay before raad(ms), w kodzie na atmedze ustawiłem _delay(100), w programie tez, i mam bardzo dziwny problem, nic nie jest podpięte do przetwornika, powinna być linia prosta, i co jakiś czas około 3 sekund jest nagle nie wiadomo skąd spadek do zera i powrót. Pomiar na żadnie to samo, wszystko ładnie się mierzy, ale co jakiś czas ten spadek , i psuje mi całe pomiary, z czym to może być związane?
mam pomysł gdzie może leżeć problem ale nie wiem jak to rozwiązać,otóż to jest wynikiem tej nie zgodności czasów wystawiania danych przez mikroprocek i czytania przez komputer, mimo że tam jest 100 i tu, po stronie mikroprocka to jakoś innaczej chyba powinno wyglądać bez tego opóźnienia, ale jak?
jak wziąlem zakomentowałem opóźnienie to mi wystawia z ogromna częstotliwościa te pomiary, jak to innaczej zmniejszyc?
dochodze do wniosku że jak zczytam z portu wartość to jej już tam nie ma i ten czas wystawiania i czytania powinien być idealny , jak można by sobie z tym poradzić innaczej?
int main(void) // program główny
{
USART_Init( UART_CONST);
DDRB=0xFF;
ADMUX = 0; // wybierz kanał 0 przetwornika ADC
ADCSRA = _BV(ADEN)|_BV(ADIE)|_BV(ADATE)|_BV(ADSC)|_BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2);
while(1)
{
_delay_ms(100);
UART_putint(value,10); // wypisz przetworzoną wartość
}
}
SIGNAL(SIG_ADC) // przerwanie z przetwornika ADC
{
value = ADCW; // czytaj wartość z przetwornika ADC
}mam pomysł gdzie może leżeć problem ale nie wiem jak to rozwiązać,otóż to jest wynikiem tej nie zgodności czasów wystawiania danych przez mikroprocek i czytania przez komputer, mimo że tam jest 100 i tu, po stronie mikroprocka to jakoś innaczej chyba powinno wyglądać bez tego opóźnienia, ale jak?
jak wziąlem zakomentowałem opóźnienie to mi wystawia z ogromna częstotliwościa te pomiary, jak to innaczej zmniejszyc?
while(1)
{
//_delay_ms(100);
UART_putint(value,10); // wypisz przetworzoną wartość
}
}
SIGNAL(SIG_ADC) // przerwanie z przetwornika ADC
{
value = ADCW; // czytaj wartość z przetwornika ADC
}dochodze do wniosku że jak zczytam z portu wartość to jej już tam nie ma i ten czas wystawiania i czytania powinien być idealny , jak można by sobie z tym poradzić innaczej?