Projektuję takie małe urządzonko, w którym najpierw był ATTiny861, potem ATMega16 i teraz z powodu prądożerności AVRów z serii Mega, Mój Boss uparł się na migrację do MSP430 bo można go będzie zasilić z klasycznego układu beztransformatorowego z malutkim kondensatorem szeregowym. W tym celu na początek dostałem zakupiony tydzień temu eZ430-RF2500 i całą "laskę" MSP430F2274 by móc już czegoś się nauczyć, przetestować i na szybko zaprojektować nową wersję.
Program dla AVRa jest już prawie cały napisany więc migracja głównego algorytmu tego urządzenia będzie łatwa i być może przyjemna. W skrócie: w urządzeniu potrzebuję 3 PWMy pracujące z częstotliwością ok. 120Hz, jeden timer odliczający podstawę czasu 200us do innych celów, dwa przerwania z zewnątrz, przetwornik ADC 2 kanały i port do 2 cyfrowego wyświetlacza.
Pierwsze próby z Code Composerem i programem mrugającym diodą przebiegły w miarę sprawnie, więc zabrałem się napisania najwaważniejszego modułu jakim sa te nieszczęsne PWMy. Po paru godzinach bojów z konfiguracją i debuggerem efekt był... żaden. Na wyjściach albo była stale jedynka albo zero w zależności od konfiguracji bitów Output Mode, a Timer_A zmianę w rejestrach TACCRx nazwyklej w świecie miał [cenzura], choć licznik inkrementował się normalnie. Ponowna lektura dokumentacji w temacie licznika nasunęła właściwe w tym miejscu pytanie(-a):
I przy okazji druga kwestia, czy jest możliwe przeznaczenie jakiegoś sektora pamięci Flash na pamięć nieulotną, bo ten F2274 nie ma EEPROMa, a gdzieś muszę zapisać parę bajtów konfiguracji, które później użyszkodnik może z poziomu klawiatury zmienić? Zewnętrzną szeregową "flaszkę" Boss będzie miał ciężko przełknąć.
Program dla AVRa jest już prawie cały napisany więc migracja głównego algorytmu tego urządzenia będzie łatwa i być może przyjemna. W skrócie: w urządzeniu potrzebuję 3 PWMy pracujące z częstotliwością ok. 120Hz, jeden timer odliczający podstawę czasu 200us do innych celów, dwa przerwania z zewnątrz, przetwornik ADC 2 kanały i port do 2 cyfrowego wyświetlacza.
Pierwsze próby z Code Composerem i programem mrugającym diodą przebiegły w miarę sprawnie, więc zabrałem się napisania najwaważniejszego modułu jakim sa te nieszczęsne PWMy. Po paru godzinach bojów z konfiguracją i debuggerem efekt był... żaden. Na wyjściach albo była stale jedynka albo zero w zależności od konfiguracji bitów Output Mode, a Timer_A zmianę w rejestrach TACCRx nazwyklej w świecie miał [cenzura], choć licznik inkrementował się normalnie. Ponowna lektura dokumentacji w temacie licznika nasunęła właściwe w tym miejscu pytanie(-a):
- Czy wogóle jest możliwe, by Timer_A stał się sprzętowym generatorem PWM z trzema wyjściami na końcówkach TA 0, TA 1, TA 2?
- Czy rzeczywiście nawet jak licznik pracuje w trybie Continuos Up, TACCR0 nadal jest używany jako wartość przy której następuje zmiana stanu wyjścia i tym samym kanał TA 0 jest "niedostępny"?
- Czy jednak mariage sprzętu (wyjścia porównania w trybie Reset) i przerwanie z przepełnienia (ponowne ustawianie stanu portów) jest tu nieunikniony, albo wogóle PWM w całości programowy?
I przy okazji druga kwestia, czy jest możliwe przeznaczenie jakiegoś sektora pamięci Flash na pamięć nieulotną, bo ten F2274 nie ma EEPROMa, a gdzieś muszę zapisać parę bajtów konfiguracji, które później użyszkodnik może z poziomu klawiatury zmienić? Zewnętrzną szeregową "flaszkę" Boss będzie miał ciężko przełknąć.
