Forum elektroda.pl

Regulamin  | Punkty  | Dodaj...  | Ostatnie  | Szukaj | Rejestracja | Zaloguj



Pętla opóźniająca w C dla AVR


  Strona Główna -> Forum elektroda.pl -> Mikrokontrolery Ogólne ->Pętla opóźniająca w C dla AVR Napisz nowy temat  Odpowiedz do tematu 
AutorSchowaj lewą kolumnę Wiadomość
Prymulka
Poziom 17
Poziom 17
Miasto: Bydgoszcz
Dołączył: 10 Wrz 2003
Posty: 378
Pomógł: 9
Ocena postów: 6
Prymulka
Poziom 17
Post#1 19 Wrz 2005 11:53  Autor tematu   

Pętla opóźniająca w C dla AVR


Witam!
Napisałem w C taką funkcję opóźniającą
void wait100ms(unsigned char x)
{
unsigned char a,b;
for (;x > 0; --x)
for(b=50; b>0; --b)
for(a=100; a>20; --a)
__asm("nop");
}
Niestety nie wiem jakie wartości mają mieć dokładnie a i b by pętla trwała 100ms. Zaglądałem do listingu ale nie znam dobrze assemblera do AVR i nie mogę sobie z tym poradzić, konkretnie to nie wiem ile czasu zajmują same pętle nielicząc a*b. Kwarc mam 4MHz. Bardzo proszę o pomoc.
Pozdrawiam, Łukasz

Oceń post: + 0 -
Powrót do góry
Google

Google Adsense
Google


Powrót do góry
yego666
Specjalista PLD
Specjalista PLD
Dołączył: 26 Lut 2004
Posty: 1354
Pomógł: 136
Ocena postów: 1
yego666
Specjalista PLD
Post#2 19 Wrz 2005 12:30Pomocny post    

Re: Pętla opóźniająca w C dla AVR


Nie sadze, by ktokolwiek znal dokladne wartosci opoznien dla poszczegolnych iteracji petli for, zwlaszcza w wielopoziomowym ukladzie.
Z doswiadczenia jednak moge podpowiedziec ze dwie petle FOR z licznikami do 255 powinny Ci bardziej niz wystarczyc.

Wrzuc takie petle na symulator i popatrz ile czasu zajmuja, a potem dopasuj liczniki tak by otrzymac owe 100ms. To jest standardowe podejscie do tego typu zagadnienia.
Inna mozliwosc to wywolac kod asemblerowy z C i w nim skonstruowac zadane opoznienie, co jest o tyle latwiejsze, ze dla instrukcji asemblerowych masz zawsze podana ilosc cykli na egzekucje.

Pozdrawiam, yego

Oceń post: + 0 -
Powrót do góry
Google

Google Adsense
Google


Powrót do góry
sepher
Poziom 16
Poziom 16
Miasto: Poznań
Dołączył: 13 Gru 2002
Posty: 301
Pomógł: 21
Ocena postów: 1
sepher
Poziom 16
Post#3 19 Wrz 2005 14:10Pomocny post    

Re: Pętla opóźniająca w C dla AVR


Jeśli używasz WinAVR, zajrzyj do katalogu z bibliotekami i poszukaj pliku delay.h. Zawiera ona funkcje opóźniające, jako parametry podajesz tylko ilość ms lub us.

Oceń post: + 0 -
Powrót do góry
Google

Google Adsense
Google


Powrót do góry
Prymulka
Poziom 17
Poziom 17
Miasto: Bydgoszcz
Dołączył: 10 Wrz 2003
Posty: 378
Pomógł: 9
Ocena postów: 6
Prymulka
Poziom 17
Post#4 19 Wrz 2005 20:48  Autor tematu   

Re: Pętla opóźniająca w C dla AVR


A w czym moge to zasymulować? i czy mam symulować kod asembleroski z listingu czy odrazu z C. Używam AVRSide. Przeglądałem tą bibliotekę delay.h ale coś nie mogę się połapać w tych funkcjach, nie wiem chyba jestem już 100 lat za murzynami :D.

Oceń post: + 0 -
Powrót do góry
Google

Google Adsense
Google


Powrót do góry
sepher
Poziom 16
Poziom 16
Miasto: Poznań
Dołączył: 13 Gru 2002
Posty: 301
Pomógł: 21
Ocena postów: 1
sepher
Poziom 16
Post#5 19 Wrz 2005 21:02    

Re: Pętla opóźniająca w C dla AVR


Dodajesz bibliotekę dyrektywą #include i dostępne stają się 2 funkcje (teraz wyciąg z dokumentacji ;)):

_delay_us(double __us)

The maximal possible delay is 768 us / F_CPU in MHz.

_delay_ms(double __ms)

The maximal possible delay is 262.14 ms / F_CPU in MHz.

F_CPU musisz oczywiście gdzies zdefiniować, na przykład tak

#define F_CPU 16000000UL // 16 MHz

literki UL informują kompilator, że ma traktować to jako unsigned long.

Co do drugiej czeście pytania - jest możliwość symulowania plików wyprodukowanych przez AVR-GCC w AvrStudio. Jako jedną z flag kompilatora podaje się żądany format pliku. Ja używam formatu elf/dwarf. W symulatorze widać krok po kroku instrukcje w C, tak jak zapisałeś w programie. Jest tez mozliwość podejrzenia jak każda z wprowadzonych została 'przetłumaczona' przez kompilator.

Oceń post: + 0 -
Powrót do góry
Napisz nowy temat  Odpowiedz do tematu     Strona Główna -> Forum elektroda.pl -> Mikrokontrolery Ogólne -> Pętla opóźniająca w C dla AVR
Strona 1 z 1
Podobne tematy
[Atmega16][ASM]Pętla opóźniająca (3)
[ASM] Pętla opóźniająca 100us-25.5ms (10)
Pętla opóźniająca (8051) w asemblerze. Czy opóźnienie wynosi 400us? (1)
Linia opóźniająca na AVR + Bascom (3)
AVR - funkcja opóźniająca ze zmiennym argumentem (2)
procedura opóźniająca dla PIC 16F84A (3)
C, I2C, pętla while(), Avr (19)
avr-gcc pętla while i przerwania (3)
[Atmega][C][AVR Studio] Pętla w pętli (8)
Pętla for C AVR ciało pętli (4)



Administrator || Moderatorzy || Regulamin forum || Regulamin ogólny || Informacja o cookies || Kontakt

Page generation time: 0.066 seconds

elektroda.pl temat RSS