Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 - Nie działa licznik OCR1A ani B

Michał 911 28 Mar 2013 09:32 1488 8
  • #1 28 Mar 2013 09:32
    Michał 911
    Poziom 18  

    Witam.
    Mam taki problem;
    od jakiegoś czasu próbuję uruchomić w uC ATmega8 sprzętowy PWM, na liczniku OCR1A i ciągle mi nie działa - natomiast OCR2 działa bez problemu. Pewnie robię jakoś głupotę, ale nie mogę się dopatrzyć o co co tu chodzi.
    Już nawet kopiowałem gotowe kawałki kodu z stron, gdzie był gotowy działający program i też nic.

    To jeden z kodów jaki zalazłem w sieci;

    Kod: c
    Zaloguj się, aby zobaczyć kod


    natomiast tu kawek gotowego kodu zmienionego przeze mnie;
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ale to też nie działa.
    O co chodzi?

    0 8
  • #2 28 Mar 2013 12:35
    pawel_konin
    Poziom 20  

    Michał 911 napisał:
    Witam,

    Mam taki problem;
    Od jakiegoś czasu próbuję uruchomić w uC ATmega8 sprzętowy PWM, na liczniku OCR1A i ciągle mi nie działa - natomiast OCR2 działa bez problemu. Pewnie robię jakoś głupotę, ale nie mogę się dopatrzyć o co co tu chodzi. Już nawet kopiowałem gotowe kawałki kodu z stron gdzie był gotowy działający program i też nic.

    To jeden z kodów jaki zalazłem w sieci;
    Kod: c
    Zaloguj się, aby zobaczyć kod


    natomiast tu kawek gotowego kodu zmienionego przeze mnie;
    Kod: c
    Zaloguj się, aby zobaczyć kod


    ale to też nie działa. O co chodzi?


    Jak można na pierwszy rzut oka zauważyć żaden kod nie ma prawa działać.
    W pierwszym
    Kod: c
    Zaloguj się, aby zobaczyć kod

    oraz brak deklaracji kierunku portów brak ustawienia że, port jest wyjściem oraz brak "...|=_BV..." zły tryb tryb PWM(możesz nie widzieć efektu) oraz brak makra szybkości taktowania procesora.
    Teraz drugi kod:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Brak przejęcia portów przez PWM, znów ten sam zły tryb pwm(można nie widzieć efektów), znów brak "...|=_BV..."
    Proponował bym tryb 14 lub 15 pwm z odpowiednią konfiguracją wszystko w datasheecie strona 97 16-bit Timer/Counter Register Description.



    [/b]

    0
  • #3 28 Mar 2013 15:20
    Michał 911
    Poziom 18  

    Zmieniłem na takie coś;

    Kod: c
    Zaloguj się, aby zobaczyć kod


    ale, nadal nie działa.
    Czy z tym przejęciem portów to o to chodziło; _BV(COM1A1)|_BV(COM1A0) ?

    0
  • #4 28 Mar 2013 16:12
    pawel_konin
    Poziom 20  

    Michał 911 napisał:
    Zmieniłem na takie coś;
    Kod: c
    Zaloguj się, aby zobaczyć kod



    ale, nadal nie działa.
    Czy z tym przejęciem portów to o to chodziło; _BV(COM1A1)|_BV(COM1A0) ?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tutaj masz kod z jednym kanłem tylko A i prescalerem 64. Fajnie by było jakbyś pokazał jak to podłączyłeś czy to na stykówce czy w układzie??

    0
  • #5 28 Mar 2013 16:27
    Michał 911
    Poziom 18  

    Też nic, a PORTB1 jest na pewno sprawny, bo wgrywam inny testowy program i działa.

    0
  • #6 28 Mar 2013 16:49
    pawel_konin
    Poziom 20  

    Michał 911 napisał:
    Też nic, a PORTB1 jest na pewno sprawny, bo wgrywam inny testowy program i działa.

    Jakie są objawy?? Zacznijmy od tego jak masz to podłączone schemat. Jakie są błędy kompilacji ?? Spróbuj użyć trybu 14 i wpisz jakąś wartość w rejestrze ICR1 np 300. Jaki inny program testowy wgrywasz wklej kod.

    0
  • #7 28 Mar 2013 17:19
    TQelektronik
    Poziom 10  

    Witam,
    w tych wszystkich kodach przydałaby się jeszcze nieskończona pętla główna, np.:

    Kod: c
    Zaloguj się, aby zobaczyć kod
    po konfiguracji TIMERa.

    0
  • Pomocny post
    #8 28 Mar 2013 17:47
    pawel_konin
    Poziom 20  

    Do działania timera nie jest potrzebna nieskończona pętla while. Dobra praktyka wskazuję aby w całym programie znalazła się co najmniej jedna nieskończona pętla. Wartość OCR można wpisać na stałe skompilować i wgrać do procesora. Wypróbuj jeszcze ten tryb 14 z ICR1 na TOP wklejam działającą konfigurację pod Atmege 16(sprawdziłem rejestry i konfiguracja jest taka sama) więc jest to działająca konfiguracja z zegarem 1MHz. Jak już to ci nie pójdzie masz uszkodzony procesor lub też coś źle podłączone.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #9 29 Mar 2013 09:53
    Michał 911
    Poziom 18  

    Działa - tylko trzeba było while() wrzucić do maina. :D
    Dzięki za pomoc.

    0