makdonald napisał(a):
Chce wygenerować bardzo krótkie 2 impulsy na timerze ... ok 1us
Dlaczego koniecznie na timerze? Przy tych czasach trwania impulsów to będzie dosyć kłopotliwe. Nie podałeś kluczowej informacji, jakie masz taktowanie mikrokontrolera, ale nawet zakładając maksymalne 16MHz, to tylko 16 taktów zegara, więc nie będzie łatwo.
makdonald napisał(a):
...chodzi mi o ok 1us a potem 1us przerwa i znowu 1us impuls...
... no a później jaka minimalna przerwa przed następnymi dwoma impulsami?
makdonald napisał(a):
może ktoś mnie nakieruje co źle robię
makdonald napisał(a):
może ktoś mnie nakieruje co źle robię
No właśnie kolega Mirek już napisał, jaki robisz błąd - nie bierzesz pod uwagę tego, że np. każda procedura obsługi przerwania trochę trwa. Samo wejście i powrót z procedury to ok. 8 taktów, do tego prolog i epilog, które zajmują minimum z 10 taktów zegara i już masz więcej niż 16 taktów. A gdzie miejsce na kod? A jak dodasz nieco kodu, to prolog i epilog mogą się wydłużyć, bo będzie trzeba więcej rejestrów odłożyć na stos. Jeśli piszesz procedurę obsługi przerwania w C, to może ona nie być zbyt optymalna... itd.
Ogólnie koncepcja rozwiązania jest nieodpowiednia z powodów, które podałem wyżej, dlatego Ci to nie działa. Zdecydowanie prościej byłoby to zrobić jako opóźnienie blokujące np. na kilku(nastu) instrukcjach NOP asemblera, czy nawet na
_delay_us(). Oczywiście należałoby uwzględnić fakt, że wykonanie kodu związanego ze zmianą stanu pinu zajmie też kilka taktów. Robiąc to na timerze niewiele zyskasz, bo mikrokontroler i tak będzie zajęty obsługą przerwań.
Gdyby się bardzo uprzeć przy tym timerze, to
być może udałoby się to zrobić, ale moim zdaniem raczej trzeba by wykorzystać sprzętowy generator z wykorzystaniem timera, włączyć go na czas tych dwóch impulsów, a później wyłączyć w procedurze obsługi drugiego przerwania, najlepiej napisanej w asemblerze, aby uzyskać maksymalną wydajność. Należy jednak wziąć także pod uwagę, że ewentualne inne przerwania używane w programie mogą pokrzyżować nasze plany, choćby ze względu na możliwe pewne opóźnienia w wykonywaniu przerwań spowodowane brakiem priorytetów przerwań i wywłaszczania w tych mikrokontrolerach.