Skocz do zawartości

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


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

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.

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...