Przerwań brak, wklejony kod to całość programu.
Wiem ze _delay_ms() jest mało precyzyjna przy czasach powyzej 250 ms, ale tutaj czasy są sporo krótsze. Czy przy _delay_us() tez są podobne ograniczenia? Oscyloskopu nie mam i nie mam skąd go zdobyć 🙁 Wina serwa to to raczej nie jest, bo pozostałe tg9e działały tak samo.
Wrzucam kod. Może tak będzie łatwiej znaleźć błąd, którego nie widzę. Zaznaczam, że timery mam podłaczone do czegoś innego, więc nie mogłem ich użyć. PA8, to nóżka (Atmega 16a), do której podłączyłem biały kabel od serwa. Vcc serwa=5,0V
#include<avr\io.h>
#include <avr\delay.h>
int main (void)// maks nastawy to 4000 us i 550 us
{DDRA=0xff; while(1){PORTA|=0x80;_delay_us(4000);PORTA&=~0x80;_delay_ms(20);};}
Z mojej bardzo ograniczonej wiedzy 🙁 i pokrętnej logiki wynika, ze przy złym taktowaniu czasy powinny być proporcjonalne do tych w artykule. Poprawcie mnie, jeśli się mylę. 🙂
A propo rezystorów do cny 70, to nie wolno zapominać o rezystorze dla diody. Ja o nim zapomniałem i po krótkiej chwili podłączenia do pakietu 3xAA (duracell) dioda się "zapaliła", a soczewka wyleciała w powietrze. Dobrze, że akurat głowy nad nią nie trzymałem 🙂
Bardzo użyteczny artykuł. Oczywiście piwo i wielkie podziękowania.
➕ A jeśli chodzi o nagrywanie, to można zrobić to również przy zwykłych silnikach używając enkoderów.