Skocz do zawartości

LPC1114 TMR32B0 PWM Sprzetowy na MAT2 (Rozwiązany)


devport

Pomocna odpowiedź

Witam, od 3 dni staram się wymusić przygaszanie LED podłączonej do PIO0_1 procesora (Wyjście CT32B0_MAT2).

Sam Timer działa... sprawdzałem, lecz problem jest z wystawieniem impulsów.

Niestety Oscyloskopu nie posiadam.

Procek ustawiony na 48MHz.

Czy coś robię nie tak?

void TIMER16_0_IRQHandler(void)
{
LPC_TMR16B0->IR = 0x1f; 
}

void initTimer32(void)
{

/* Enable Timer32B0 */
LPC_SYSCON->SYSAHBCLKCTRL |= 0x200;
LPC_IOCON->PIO0_1 = 0x02;
LPC_IOCON->PIO1_7 = 0x02;
LPC_TMR32B0->TCR = 2;
LPC_TMR32B0->MCR = 3;
LPC_TMR32B0->MR0 = 0;
 LPC_TMR32B0->MR1 = 48000;
LPC_TMR32B0->MR2 = 48000;	
LPC_TMR32B0->PWMC = 0x06;
LPC_TMR32B0->EMR =0x6;
LPC_TMR32B0->PR = 99;
LPC_TMR32B0->TCR = 1;
NVIC_EnableIRQ(TIMER_32_0_IRQn); 
}

Link do komentarza
Share on other sites

MR0 jest 48000, MR1 i MR2 24000, a dioda nadal nic...

samo przerwanie działa (w funkcji obsługi przerwania nakazałem cyklicznie gasić i zapalać diodę na innym porcie IO)

Problem jest nadal... wartości w MR1,2,3 nic nie zmieniają.

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

Aj przepraszam, to co wstawiłem było moimi ostatnimi kombinacjami...

Handler zły wkleiłem na forum (używam 2 timerów 16 i 32) z tym 16bit nie mam problemu... ;] Problem rozwiązałem... zamiast wartości HEX wprowadziłem ponownie ale podciągając pojedyncze bity (tak dla pewności i widać pomogło)

Wkleję poprawny kod który na wyjście CT32B0_MAT2 podaje wypełnienie 0-50%

Może komuś się przyda.

Można bez wywoływania przerwania... jednak dla mnie będzie ono potrzebne więc wstawiłem.

#define PWM_PERIOD 	48000

void TIMER32_0_IRQHandler(void)
{		
LPC_TMR32B0->IR = 0x1f;				//czyszczenie flagi przerwania
}

void initTimer32(void)
{

/* Enable Timer32B0 */
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9) | (1<<16);
LPC_IOCON->PIO0_1 &= ~0x07;
LPC_IOCON->PIO0_1 |= 0x02;
LPC_TMR32B0->PR = 0;
LPC_TMR32B0->PWMC = (1<<2);
LPC_TMR32B0->MR0 = PWM_PERIOD;
LPC_TMR32B0->MR2 = PWM_PERIOD*0.5;	
LPC_TMR32B0->MCR = (1<<0) | (1<<1); //interrupt, reset MR0

LPC_TMR32B0->TCR = (1<<0);
NVIC_EnableIRQ(TIMER_32_0_IRQn); 

}
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.