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

oriwad
-
-
Posty: 27
Rejestracja: 9 lut 2012, o 20:19

[Attiny13]problem z opóźnieniem

Postautor: oriwad » 30 lip 2012, o 19:15

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ł.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Re: [Attiny13]problem z opóźnieniem

Postautor: pajaczek » 31 lip 2012, o 11:48

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.

Awatar użytkownika
leonow32
-
-
Posty: 108
Rejestracja: 10 maja 2011, o 15:56
Lokalizacja: Poznań

Re: [Attiny13]problem z opóźnieniem

Postautor: leonow32 » 31 lip 2012, o 14:51

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)?

oriwad
-
-
Posty: 27
Rejestracja: 9 lut 2012, o 20:19

Re: [Attiny13]problem z opóźnieniem

Postautor: oriwad » 2 sie 2012, o 19:24

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.

Chcesz poeksperymentować, zainstaluj sobie AVR Strudio, tam masz symulator, kompilator C/ASM, podaje czasy i takty procka, obsługuje wszystkie AVR.
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.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Re: [Attiny13]problem z opóźnieniem

Postautor: pajaczek » 2 sie 2012, o 20:56

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.

Wróć do „AVR/AVR32”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 22 gości