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

[ATMega8][C] Obsługa ADC - gdzie tkwi błąd?

cobi_69 20 Lip 2011 15:31 1794 11
  • #1 9738698
    cobi_69
    Poziom 21  
    Próbuję opanować przetwornik ADC w uc ATMega8, napisałem, program w którym skonfigurowałem uC, jednak podczas wyrzucania na LCD nie wyświetla niczego (LCD działa i wszystko z nim ok), nie mam pojęcia gdzie tkwi błąd.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    napięcie rzędu ~1,65V +/-0,5V podawane na ADC2 (pin 25), taktowanie na razie z wewnętrznego zegara (choć jest kwarc 16MHz), AVref także wewnętrzne 2,5V (choć jest zewnętrzne 3,3 ze stabilizatora). Chciałbym te ADC uruchomić a potem będę ustawiał zewnętrzne AVref, taktowanie itp.
  • #2 9738851
    tmf
    VIP Zasłużony dla elektroda
    Po pierwsze - jeśli włączasz wewnętrzne napięcie referencyjne to nie wolno nic podłączać pod VRef. Jedynie kondensator odsprzęgający. W przeciwnym przypadku najpewniej uszkodzisz wewnętrzne źródło referencyjne.
    Kolejna sprawa - ADIF jest ustawiany pod koniec konwersji, a ty masz pętlę, która pętli się tak długo jak ADIF jest ustawiony - czyli wiecznie.
    Powinieneś sprawdzać flagę ADSC.
  • #3 9739562
    cobi_69
    Poziom 21  
    Zmieniłem źródło odniesienia na zewnętrzne
    Co do ADIF'a to nie wiem czemu go tam użyłem oczywiście właśnie tam miał być ADSC

    Poprawiłem te błędy i kilka jeszcze i teraz niby ADC działa gdyż wyświetla mi liczby. Jednak pojawił się inny problem: program ma sczytywać napięcia z dwóch wejść do których podłączony jest akcelerometr. Mam oś x i oś y, jednak po chwili wartości pokazywane na obydwu osiach stają się takie same. pewnie popełniłem błąd w składni, ale po całym dniu siedzenia nad tym już nie wiem nawet gdzie.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • #4 9739836
    janbernat
    Poziom 38  
    Co to jest ADCW?
  • #6 9740016
    janbernat
    Poziom 38  
    A nie po prostu ADC?
    Gdzie to ADCW jest?
  • #7 9740075
    mirekk36
    Poziom 42  
    janbernat napisał:
    A nie po prostu ADC?
    Gdzie to ADCW jest?


    A widzisz Pan ;) ... jakbyś miał pod ręką ECLIPSE to byś podjechał myszką na nazwę ADCW, wcisnąłbyś lewy CTRL - wtedy nazwa ADCW by się podkreśliła - i można byłoby wykonać KLIK

    co ku uciesze przeniosłoby cię do pliku nagłówkowego o nazwie:

    iomx4.h

    i tam zobaczyłbyś od razu skąd to się wzięło:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 1 [minuty]:

    a nawiasem mówiąc kolega tmf - też wspominał o tym w swojej książce , że AVR GCC daje właśnie taki fiuczer od razu jak ADCW
  • #8 9740109
    janbernat
    Poziom 38  
    Czyli ADC to jest to samo co ADCW?
    Czy jakiś inny dostęp do rejestrów?
    Czy też "brzytwa Ockhama" nie powinna tu zadziałać?
    Zawsze używałem ADC a nie ADCW.
    A gdzie tmf to napisał- nie mogę znaleźć...
  • #9 9740271
    cobi_69
    Poziom 21  
    A mógłby ktoś zerknąć przy okazji na mój program i znaleźć błąd w tym algorytmie? :D
  • #10 9740419
    drzasiek
    Specjalista CNC
    Wszystkie te nagłówki ci są potrzebne czy tylko "na wszelki wypadek" załączasz wszystkie które pamiętasz? :)
    Moją uwagę zwrócił fragment:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Nie jestem specem od C ale takiego kasowania i ustawiania bitów jeszcze nie widziałem. Ja bym proponował Bity które ustawiasz ustawiać |= a te które kasujesz to kasować &=~.
    Ale jeśli można tak jak wyżej czyli kasować i ustawiać w jednym zapisie sugerującym ustawianie, to proszę jakąś osobę doświadczoną żeby to wyjaśniła, przy okazji się czegoś nauczę :)
    Następna sprawa, to czemu funkcje os_x oraz os_y tworzysz w main()?
    Funkcje twórz poza mainem.
    Czemu one są int skoro nic nie zwracają? kompilator nie wrzeszczy?
  • #11 9740428
    janbernat
    Poziom 38  
    Mi to się pojawia warning że funkcje mają zwracać coś w int a nie mają return 0;
    To albo pusty return albo funkcje mają być void.
    No ale chyba masz jakieś warningi?
    (ostrzeżenia).
  • #12 9741568
    cobi_69
    Poziom 21  
    Poprawiłem wszystkie powyżej wymienione błędy i wychodzi na to że działa w miarę ok
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA