logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[mega8][gcc]ADC konwertuje tylko raz

MADevil 03 Kwi 2009 21:36 2301 5
  • #1 6371304
    MADevil
    Poziom 18  
    Uzyłem przycisku "szukaj" i to wielokrotnie.

    Znalazłem mniej więcej taki kod, który podobno działa:
    
    #define F_CPU 1000000UL 
    #include <avr/io.h> 
    #include <util/delay.h> 
    #include <avr/interrupt.h>
    
    unsigned char bin8toBCD (unsigned char a) 
    { 
       unsigned char dziesiatki; 
       unsigned char jednosci; 
       unsigned char wynik; 
       jednosci = a%10; 
       dziesiatki = a/10; 
       dziesiatki = dziesiatki << 4; 
       wynik = jednosci | dziesiatki; 
       return (wynik); 
    } 
    
    ISR(ADC_vect)   
    { 
       volatile unsigned char liczba; 
       liczba = ADCL;  
       PORTD = bin8toBCD (liczba);    
    } 
    
    int main(void)                        
    { 
       DDRD=0xff; 
       PORTD=0xff;
       ADMUX = 0x40;               
       ADCSRA = _BV(ADEN)|_BV(ADIE)|_BV(ADFR)|_BV(ADSC)|_BV(ADPS0)|_BV(ADPS1); 
    
       sei();                
       while(1) 
       { 
          _delay_ms(100); 
       } 
    }


    zmieniłem może 2 sprawy, ale nie maja one żadnego wpływu na pracę ADC.

    Ogólnie dzieje się tak: po resecie proca jest nowy (zalezny od napięcia) wynik konwersji. Jak zmieniam napięcie w dalszej pracy nie ma efektu, natomiast po kolejnym resecie znowu odczytuje poprawną wartosć i cisza.

    Proc: mega8
    kompilator: avr-gcc

    konfiguracja ADC na "free run"


    aaa, jeszcze, wcześniej samodzielnie napisałem kod do obsługi ADC, ale wynik miałem ten sam :/
  • #3 6371922
    MADevil
    Poziom 18  
    a) jeśli przeczytasz, nawet niedokładnie, jedno i drugie, to zauważysz uderzające podobieństwo.
    b) kody tam podane są przestarzałe(przerwania na "SIGNAL") i mają pewne oczywiste błędy w komentarzach, więc zupełnie nie są "świetne".
  • #4 6372378
    _Robak_
    Poziom 33  
    Jesli dla ciebie swietny kod to taki ktory sie wkleja i cieszy z dzialania to trudno ;) A jakie masz fuse bity ?
  • Pomocny post
    #5 6372469
    Konto nie istnieje
    Poziom 1  
  • #6 6372649
    MADevil
    Poziom 18  
    _Robak_ napisał:
    Jesli dla ciebie swietny kod to taki ktory sie wkleja i cieszy z dzialania to trudno ;) A jakie masz fuse bity ?


    No właśnie nie cieszy i nie działa, chyba że masz antyczny kompilator.

    :arrow: atom1477

    Oczywiście masz racje :D Nigdzie nie znalazłem wprost takiej informacji, a fragment datasheeta z rejestrami ADCL i ADCH jakoś pomijałem (zakładałem, że nie może tam być żadnego myku z działaniem ADC; w '51 nie ma). W każdym razie dziękuję tu, klikam "pomógł" i temat do zamknięcia :)
REKLAMA