Skocz do zawartości

Atmega 32 Resetuje się gdy obciążę silniki lub serwo.


zuba1

Pomocna odpowiedź

Ok kontynuując ten monolog podaję rozwiązanie które powoduje u mnie rozczarowanie okazuje się ze jeśli wpisze do PWM-a wartość 255 robot resetuje się nawet jeśli niema mostków. Podejrzewam że następuje konflikt pracy między 3 timerami które funkcjonują w robocie i każdy jest w miarę intensywnie wykorzystywany. Przyznacie że to nietypowy problem był 😃. Dziękuję wszystkim za pomoc i że poświęciliście dla mnie tyle czasu 😃 Tematu nie zamykam jeśli ktoś miał by taki problem niech pisze tu zawsze to mniej takich samych tematów a i więcej wiedzy w jednym miejscu będzie. Piwo dla panów

Link do komentarza
Share on other sites

zuba1, masz poknoconą obsługę timerów. W ogóle twój kod czyta się ciężko i jakąś głębszą analizę ciężko wykonać, ale mam kilka uwag:

88 linia kodu:

'timer
Config Timer2 = Timer , Prescale = 8
Enable Interrupts                                           'Zgoda na wszystkie odblokowania.
Enable Timer2                                               'Odblokuj Timer2.
On Timer2 Czas1
Stop Timer2

Włączyłeś wszystkie przerwania co raczej zaczyna kolidować z obsługą serwa i pewnie PWMem. Powinieneś tu włączyć tylko przerwanie INT2

Kolejna uwaga do procedury liczącej czas:

Czas1:
Load Timer = 250

If Licznik = 4000 Then
Incr Czas
Licznik = 0
If Flaga2 = 0 Then Incr Bll
If Flaga2 = 1 Then Bab = 1
Incr B
End If

Incr Licznik
Incr Czass
'miganie diodą
If B = 4 Then B = 0

If Flaga = 1 And Czass = 500 Then Czass = 0

If Flaga = 0 And Czass = 1500 Then Czass = 0

If Czass = 0 Then Toggle Led4

'sterowanie podnośnikiem
If Klapa = 0 And Bab = 0 Then
Servo(1) = 150
Licznik = 0
Bll = 0
Bab = 1
Nac1 = 1
End If

If Bll = 1 Then Servo(1) = 60

If Bll = 5 Then Bab = 0

If Flaga2 = 0 Then Enable Timer0
If Flaga2 = 1 Then Disable Timer0

Return

Dlaczego skoro odliczaniem czasu zajmuje się timer2 w tej pętli włączasz i wyłączasz przerwanie od przepełnienia timera0 odpowiedzialnego za pracę serwa. Trochę tego nie rozumiem.

Link do komentarza
Share on other sites

Tak jak pisałem wcześniej serwo drga. Dlatego gdy nie potrzebuję blokowania serwa(ma być bezwładne i nie pobierać prądu bo przekładnia i tak jest samohamowna ) wyłączam go. Timer 2 działa jako system czasu rzeczywistego powtarzającego pewne czynności i nadzorujące je aby nie ingerować w kodzie walki. Te czynności jak widać mają częstotliwość wykonywania 4000Hz. Miej więcej tak to rozplanowałem a czy dobrze to wyjdzie w praniu 😃 Jak widać problem się poniekąd ukazał.

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.