Cytuj:
sei używasz ZAWSZE. sei nie odblokowuje wszystkich przerwań hurtowo tak, że wszystkie już mogą działać... do przerwań są tak jakby dwa szeregowe przełączniki, jeden to globalny sei (włącznik dla wszystkich), a drugi włącznik to odpowiedni rejestr dla każdego z przerwań
No rozumiem to działa jak iloczyn logiczny, oba warunki muszą być spełnione aby móc obsługiwać przerwanie. Właśnie tego nie mogłem nigdzie doczytać.
Cytuj:
F_CPU NIE DEFINIUJESZ w plikach, ale w ustawieniach projektu!
Ja tego nie wymyśliłem, ale chyba nie pierwszy raz się z tym spotykasz więc nie jest to mój wymysł. Teraz będę wiedział co i jak gdy sobie doczytam.
Cytuj:
Z tego co wiem to ma być ISR(TIMER1_OVF_vect), a nie ISR(TIMER1_OVF_VECT). Wielkość liter w prawie wszystkich językach programowania ma duże znaczenie!
Wiem, że wielkość liter ma znaczenie ale uznałem, że skoro nie ma błędu informującego tym, że nie istnieje coś takiego jak "TIMER1_OVF_VECT" to jest ok.
Cytuj:
Dokładnie do takich celów proszę zakładać nowy temat.
Jeśli nie ma możliwości ciągnięcia tego wątku w tym temacie, istnieje możliwość wydzielenia odpowiedzi i utworzenie nowego?
Port C jest ustawiony w stan wysoki więc wygląda na to, że wszystko działa.
Mam jeszcze jedno pytanie. Potrzebuje ten timer do generowania sygnału PWM o trzech różnych częstotliwościach, ze zmianą współczynnika wypełnienia ( stosunek trwania stanu wysokiego do okresu). Wiem o istnieniu funkcji PWM w atmedze i nawet byłem skłonny zastosować to rozwiązanie ale wole sobie napisać swoją funkcję pwm na przerwaniach, która z tego co wiem działa w taki sam sposób jak ta wbudowana. Pytanie jest następujące mogę generować naraz dwa sygnały PWM o różnych częstotliwościach i o różnych współczynnikach wypełnienia, na jednej atmedze? Chodzi mi o to, że czasem może się zdarzyć tak, że nastąpi przerwanie przerwania. Główny kod programu posłuży jedynie do odbioru bitów po ISP i prostego przeliczania wartości otrzymanych na współczynnik wypełnienia.
Cytuj:
(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5)
Tak komputer widzi to w ten sam sposób, ale tylda('~') poprzedzająca to wyrażenie spowoduje jego zanegowanie.
wyrażenie (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5) da nam
nr bitu 7 6 5 4 3 2 1 0
. 0 0 1 1 1 1 1 1
zanegowanie tego wyrażenia daje
. 1 1 0 0 0 0 0 0
czyli zmienia się stan poszczególnych bitów na przeciwny.
Chociaż w sumie w zależności od budowy układu segment może zapalać 1 lub 0 więc możesz o tym wiedzieć.