Skocz do zawartości

[C] przerwanie 1kHz


sobal44

Pomocna odpowiedź

Witam

mam mały problem z przerwaniem, chciał bym by było wykonywane równo co 1kHz

niby wszystko ustawiłem dobrze a przerwanie wykonuje się ciut szybciej.

mógł by ktoś zerknąć na ten kod

SIGNAL(SIG_OVERFLOW2) //1kHz
{ 
czas++;
if(czas==500){przerwanie=1;czas=0;licznik++;}
if(licznik>100){licznik=0;}
TCNT2 = 6;
}

void setup(void)
{

TIMSK = (1<<TOIE2);        // włącz obsługę przerwań T/C2
TCCR2 = (0<<FOC2)|(0<<WGM20)|(0<<COM21)|(0<<COM20)|(0<<WGM21)|(1<<CS22)|(0<<CS21)|(0<<CS20);
TCNT2 = 6;  

uC taktowany przez zewnętrzny kwarc 16MHz

Link do komentarza
Share on other sites

Czy mógłbyś określić znaczenie "ciut"?

I jak to zweryfikowałeś? Bezpośrednio czy po stanie innych rzeczy?

Wg. mnie zmienna licznik "obraca się" w 101 cyklach - może to jest jakaś przyczyna Twoich obserwacji, choć to raczej dawałoby zwolnienie niż przyśpieszenie.

Generalnie Timer 2 ma sprzętowe mechanizmy cyklicznego zgłaszania przerwań dokładnie co określoną liczbę cykli. Nie musisz wtedy przeładowywać go "w locie", jak robisz to w obsłudze przerwania. Taki mechanizm jest niebezpieczny z tego powodu, że jeśli coś innego zajmie Ci procesor i nie zdążysz obsłużyć tego przerwania w 64 cykle zegarowe, stracisz jedno (lub więcej) tyknięcie Timera. Jeśli już przeładowujesz timer, rób to jak najwcześniej w obsłudze przerwania a nie na końcu.

Link do komentarza
Share on other sites

chodzi o to że to przerwanie "zlicza" czas 5 sekund po którym robot się włącza(robot klasy minisumo), na zawodach robot włącza się wcześniej wykonując falstart. w szczawnie było to 4,78 sekund, a w warszawie też coś koło tego.

pomóżcie jutro zawody!!!!!

Link do komentarza
Share on other sites

Zaraz a jak Ty ten czas policzyłeś? Czy wejściem "startującym" odliczanie jest jakiś pin procesora sprzężony elektrycznie ze stoperem sędziego czy raczej z Twoim palcem? Jeśli za wcześnie naciskasz guzik, to błąd 0.22 sekundy jest rzeczą zupełnie normalną. Może tak więcej zimnej krwi? Jeśli boisz się, że nie wytrzymasz i znów przyfalstarcisz, wstaw odliczanie 5.5 sekundy.. 😐 Funkcja wydaje się prawidłowa (jeśli nie masz długich sekcji krytycznych w kodzie) i raczej nie tu jest problem.. Jeszcze podejrzewałbym generator RC ale Ty masz przecież kwarc. Dziesięć głębokich wdechów, popatrz przeciwnikowi w oczy i.. start 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

potrzebuje precyzyjnego odmierzania czasu. By walczyć o jakiekolwiek miejsce muszę mieć doskonały "wyzwalacz" robota. Może ktoś się podzieli jak u niego wygląda wystartowanie MiniSumo?

Link do komentarza
Share on other sites

E.. ale chyba czasu startu nikt nie liczy z dokładnością do 1/100 sek na zawodach, to nie F1.

Ale jeżeli chcesz naprawdę precyzyjny start i masz na pokładzie analogowego Sharpha, który widzi przy starcie przeciwnika to stwórz sobie system AFS Anty Falstart System.

Idea jest prosta. Po naciśnięciu przycisku start, system odlicza te 5 Sek, jednocześnie sprawdza za pomocą Sharpha czy odległość od robota przeciwnika w tym czasie się nie zmieniła. Jeżeli, robot przeciwnika odjedzie, lub podjedzie w czasie do 4,5 sek, to sygnalizowany może być akustycznie, lub diodą falstart przeciwnika. Jeżeli start robota przeciwnika odbędzie się w przedziale od 4,5 do 5 sek, to, uznajesz że mieścisz się w przedziale błędu, i tez startujesz.

Link do komentarza
Share on other sites

No to już jakiś skrajny przypadek mi się wydaje, nikt przy zdrowych zmysłach takiej dokładności nie będzie próbował wymuszać na zawodnikach. Pamiętajmy że to konstrukcje amatorskie, a nie militarne.

Zresztą co mieliby w takiej sytuacji zrobić zawodnicy którzy, taktują procesor wewnętrznym oscylatorem ?

PS. widzę wkradło mi się małe przekłamanie co do czasu, ponieważ regulamin mówi.

Robot powinien byc tak zaprojektowany by samoczynnie rozpoczynał walke nie wczesniej niz piec sekund po

uruchomieniu go przez dowolnego członka druzyny.

Co oznacza że czas nie może być krótszy niż 5 sek, czyli AFS musiał by działać nieco inaczej niż opisałem.

Natomiast co do pomiaru do 1/100 części sek.

No powiedzmy sobie szczerze jest to głupota do ³, wynika to z kilku czynników.

Pierwszy to czynnik ludzki. konkretnie chodzi o to że nie ma fizycznie szans, aby dwoje zawodników przycisło dokładnie w tym samym momencie przycisk START na swoim robocie. A to oznacza różnice w odmierzaniu czasu.

Drugi czynnik już opisałem, to rozrzut w taktowaniu CPU w robotach, nie każdy używa kwarcu, a i ten by należało kalibrować, jak by tak wnikać dokładniej.

Jeżeli organizatorzy jakiś zawodów stosują takie rygorystyczne wymagania, to świadczy to o braku nawet nie tyle wiedzy stosowanej, co zwyczajnie wyobraźni z ich strony.

Zresztą jak oni mierzą ten czas startu, że są w stanie stwierdzić 0,02sek różnicy ? Pomijając już że taki pomiar ma na pewno jakiś błąd.

Link do komentarza
Share on other sites

Pierwszy to czynnik ludzki. konkretnie chodzi o to że nie ma fizycznie szans, aby dwoje zawodników przycisło dokładnie w tym samym momencie przycisk START na swoim robocie. A to oznacza różnice w odmierzaniu czasu.

Dlatego świetnym rozwiązaniem są moduły jakie wprowadzono w Wiedniu - chyba nie było z nimi problemów?

Zresztą jak oni mierzą ten czas startu, że są w stanie stwierdzić 0,02sek różnicy ? Pomijając już że taki pomiar ma na pewno jakiś błąd.

Było już o tym gdzieś na forum, robili to kamerą 30FPS 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.