Skocz do zawartości

Atmega128A - problem z OC1C


Sainus

Pomocna odpowiedź

Witajcie
Mam problem z Timerem 1 w Atmega128. Próbuje uruchomić 3-fazowy PWM przy użyciu timera 1. Wyjścia OC1A i OC1B reagują na poniższy kod (zmieniam OCR1 od 0),  ale OC1C nie zmienia stanu (zachowuje się jak dla 0). Do wyjść PWM (PB5-PB7) mam narazie podłączone LEDy. 2 z nich przy wartościach rejestrów OCR1 równych 255, mocno świecą lecz ten od OC1C nie. Dla wartości 0 w wszystkich OCR1 ledy nieznacznie świecą. O czym zapomniałem konfigurując rejestry? Jestem raczej mało zaawansowany w tej kwestii.


Tutaj kod którym chce uruchomić ten PWM:

int main(void)
{
    DDRB|=(1<<PB7)|(1<<PB6)|(1<<PB5);
    TCCR1A    |=    (1<<WGM10) ;
    TCCR1B    |=    (1<<WGM12) ;
    TCCR1A    |= (1<<COM1A1) | (1<<COM1B1) | (1<<COM1C1);
    TCCR1B  |= (1<<CS10) | (1<<CS11);
    ICR1 = 255;
        OCR1A    =    255;
        OCR1B    =    255;
        OCR1C    =    255;
    while (1)
    {

    }
}

 

Edytowano przez Gieneq
Zachęcam do używania bloku kodu
Link do komentarza
Share on other sites

Napisz w którym trybie odpalasz timer 1. Bo z WGM wynika, że w 5, a do tego nie pasuje mi zapis do ICR1.

I czy na pewno nie uruchamiasz jednocześnie timera 2, bo wtedy automatycznie startuje modulator, którego wyjście widać właśnie na PB7.

m128mod.thumb.PNG.2895f9638c583720b0bbfb60ef72603d.PNG

EDIT: A najlepiej pokaż cały kod jaki naprawdę ładujesz do procka. Jakże powszechne jest przekonanie, że błąd jest w miejscu gdzie sie go spodziewamy.

Edytowano przez marek1707
  • Lubię! 1
Link do komentarza
Share on other sites

Timer 1 ustawiałem na FAST PWM 8 bit, a timera 2 nie ruszałem w ogóle.

To jest ostatni kod jaki wgrywałem.

#include <avr/io.h>
#define F_CPU 1000000UL 
#include <util/delay.h>

int main(void)
{
	DDRB|=(1<<PB7)|(1<<PB6)|(1<<PB5);
	TCCR1A	|=	(1<<WGM10) ;
	TCCR1B	|=	(1<<WGM12) ;
	TCCR1A	|= (1<<COM1A1) | (1<<COM1B1) | (1<<COM1C1); 
	TCCR1B  |= (1<<CS10) | (1<<CS11);
	ICR1 = 255;
        OCR1A    =    0;
        OCR1B    =    0;
        OCR1C    =    255;
    while (1) 
    {

    }
}

 

Link do komentarza
Share on other sites

OK, to jeszcze sprawdź jak masz ustawione fuse bity. ATmega128 ma taki jeden odpowiedzialny za kompatybilność tego scalaka z historyczną już mega103. A w tamtym chipie niektóre funkcje nie istniały. OC1C do nich się zalicza, bo Timer 1 miał wtedy tylko dwa wyjścia PWM.

mega128compat.thumb.PNG.97e683feaa934f6528e747aea714cacd.PNG

To w jaki spsób możesz grzebać w fuse bitach zależy od programatora. A same bity - ich liczba i znaczenie zależą od modelu procesora AVR. Każdy ma inaczej. Szukaj w datasheet konkretnie ATmega128.

Edytowano przez marek1707
  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Tak, wyłącz M103C bo to wycina wiele fajnych peryferiów i funkcji atmega128 oraz - jeśli nie używasz zaawansowanego programatora/debuggera JTAG - także bit JTAGEN. Ten z kolei wyłącza z normalnego funkcjonowania 4 bity portu F.

Możesz też włączyć EESAVE - wtedy podczas operacji chip erase poprzedzającej zawsze wpisanie nowego kodu, nie będzie niszczona zawartość EEPROMu. To bardzo wygodne, jeśli masz tam jakieś logi albo współczynniki kalibracyjne, program nie będzie musiał ich liczyć od nowa.

Edytowano przez marek1707
  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.