Witam, używam do symulacji zanim wgram program do kontrolera Proteusa i mam mały problem. Powiedzmy że chcę dać 1 na port na sekundę i go zgasić. Na Atmega8 użyłbym _delay_ms(1000) ale jak tak napiszę na Attiny13 to kod się kompiluje ale jak włączam symulację to Proteus zaczyna sypać błędami(myślałem że symulator może po prostu nie obsługuje takiej funkcji ale jak mam _delay_ms w kodzie i symuluję Atmege8 to wszystko ładnie chodzi, nie mam akurat tego Attiny13 żeby wgrać o niego program i też trochę się boję że może jednak nie obsługuje on tej funkcji i go uszkodziłbym tym kodem).
Pomyślałem że może użyję funkcji nop z asm. Z tego co wyczytałem trwa ona 1 cykl. Tak więc jeśli dobrze rozumiem i mam Atiny13 z zegarem 9,6MHz to jeden cykl trwa 1 / 9.6 MHz = 104.166667 ns czyli jeśli bym napisał
void delay(void){
for(long int i=0; i<=9600000; i++)
asm(nop);
}
to funkcja będzie generować opóźnienie 1s. Tylko nie wiem czy jest to dobry pomysł.

Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj się[Attiny13]problem z opóźnieniem
Moderatorzy:Jacek Bogusz, procesorowiec, r-mik, Moderatorzy
Re: [Attiny13]problem z opóźnieniem
Tak się właśnie robi proste funkcje opóźniające o określony odcinek czasu, choć Twoja wersja jest mocno nieprzemyślana. Hmm... i nie słyszałem by komuś się kiedykolwiek udało uszkodzić uC takim kodem 
Chcesz poeksperymentować, zainstaluj sobie AVR Strudio, tam masz symulator, kompilator C/ASM, podaje czasy i takty procka, obsługuje wszystkie AVR.
Ps. Funkcja będzie trwała dłużej niż 1 sek. Znacznie dłużej...
...albo znacznie krócej, jeżeli kompilator postanowi Ci to zoptymalizować
Pps. Innym pomysłem było by użycie timera i przerwania od niego... nie blokował byś procka niepotrzebnie.

Chcesz poeksperymentować, zainstaluj sobie AVR Strudio, tam masz symulator, kompilator C/ASM, podaje czasy i takty procka, obsługuje wszystkie AVR.
Ps. Funkcja będzie trwała dłużej niż 1 sek. Znacznie dłużej...
...albo znacznie krócej, jeżeli kompilator postanowi Ci to zoptymalizować

Pps. Innym pomysłem było by użycie timera i przerwania od niego... nie blokował byś procka niepotrzebnie.
Re: [Attiny13]problem z opóźnieniem
Samo nop rzeczywiście trwa jeden cykl, ale po wykonaniu obiegu pętli następuje sprawdzenie warunku, dodanie 1 do licznika, skok do początku, itd... zajmie to zdecydowanie więcej niż 1 sekundę.
Poszukaj w necie o timerach programowych. Świetny sposób na wyeliminowanie dziadostwa jakim jest _delay_ms() ale na początku Twojego posta piszesz, że chcesz na jakimś pinie generować jedynki i zera - może lepiej wykorzystać do tego tryb CTC lub PWM i wykorzystać nóżki OC (output compare)?
Poszukaj w necie o timerach programowych. Świetny sposób na wyeliminowanie dziadostwa jakim jest _delay_ms() ale na początku Twojego posta piszesz, że chcesz na jakimś pinie generować jedynki i zera - może lepiej wykorzystać do tego tryb CTC lub PWM i wykorzystać nóżki OC (output compare)?
Re: [Attiny13]problem z opóźnieniem
Faktycznie zapomniałem że pętla to nie tylko jej zawartość ale i procesy związane z jej obsługą.
Chyba najlepiej będzie jak zaciągnę Timer do roboty.
Chyba najlepiej będzie jak zaciągnę Timer do roboty.
Ostatnio przesiadłem się na linuxa i wątpię aby przez wine odpaliło mi AVR Studio. Proteusa jeszcze ale AVR Studio korzysta z zbyt wielu bibliotek windowsowych.Chcesz poeksperymentować, zainstaluj sobie AVR Strudio, tam masz symulator, kompilator C/ASM, podaje czasy i takty procka, obsługuje wszystkie AVR.
Re: [Attiny13]problem z opóźnieniem
Ano niestety, znam ten ból. Ale na takie okazje trzymam VirtualBoxa. Jak dogadasz się z USB to i zaprogramujesz sobie z wirtualki.
Ps. Co do pętli, tutaj problemem było by dodatkowo operowanie na bardzo dużej wartości... wykraczającej poza 16 bit wielkość rejestru, a to implikuje dodatkowe programowe operacje. W takich sytuacjach częściej robi się pętle w pętli.
Pps: Pisz Linuxa lub Linuksa, ale zawsze z dużej.
Ps. Co do pętli, tutaj problemem było by dodatkowo operowanie na bardzo dużej wartości... wykraczającej poza 16 bit wielkość rejestru, a to implikuje dodatkowe programowe operacje. W takich sytuacjach częściej robi się pętle w pętli.
Pps: Pisz Linuxa lub Linuksa, ale zawsze z dużej.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości