Skocz do zawartości

Line Follower i Atmega8L pomoc


OutSideR2k11

Pomocna odpowiedź

Witam, potrzebuje pomocy przy zaprogramowaniu mojego linefollowera. W programowaniu jestem dosc slaby a prace odnosnie mechanicznej czesci prawie ukonczylem. Przegladajac rozne projekty oraz niejako kurs programowania stworzylem cos takiego:

''''''''''''''''''''''''Konfiguracja''''''''''''''''''''''''
$regfile = "m8def.dat"
$crystal = 12000000

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto , Reference = Avcc

'Konfiguracja sterowania sprzętowym PWM
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

'Granica reagowania na linię - dobierana doświadczalnie
Const Granica = 500

'Konfiguracja portów
Config Portd = Output
Config Portb = Output

'Opis portów
'Enable1 - Silnik lewy - Portb.1 (PWM1A)
'Enable2 - Silnik prawy - portb.2 (PWM1B)
'Input1 - Silnik lewy A - Portd.3
'Input2 - Silnik lewy B - Portd.2
'Input4 - Silnik prawy A - Portd.0
'Input3 - Silnik prawy B - Portd.1

'Czujnik lewy - ADC0
'Czujnik środkowy lewy - ADC1
'Czujnik środkowy prawy - ADC2
'Czujnik prawy - ADC3

'Deklaracje zmiennych
Dim Czujnik_lewy As Word
Dim Czujnik_srodkowy_lewy As Word
Dim Czujnik_srodkowy_prawy As Word
Dim Czujnik_prawy As Word

Start Adc

Set Silnik_lewy_a
Reset Silnik_lewy_b
Set Silnik_prawy_a
Reset Silnik_prawy_b
'Silniki włączone
Pwm1a = 255
Pwm1b = 255
''''''''''''''''''''''''Pętla główna''''''''''''''''''''''''
   Do
   'Każdowazowa konfiguracja czujników
   Czujnik_lewy = Getadc(0)
   Czujnik_srodkowy_lewy = Getadc(1)
   Czujnik_srodkowy_prawy = Getadc(2)
   Czujnik_prawy = Getadc(3)

      If Czujnik_srodkowy_lewy > Granica Then
         Pwm1a = 255
         Pwm1b = 255
      If Czujnik_srodkowy_prawy > Granica Then
         Pwm1a = 255
         Pwm1b = 255
      Elseif Czujnik_lewy > Granica Then
         Pwm1a = 0
         Pwm1b = 255
      Elseif Czujnik_prawy > Granica Then
         Pwm1a = 255
         Pwm1b = 0
      Else
         Pwm1a = 255
         Pwm1b = 255
      End If
      End If
   Loop
   End

Pytanie czy to ma prawo dzialac ? ew. jak moge to usprawnic ?

Link do komentarza
Share on other sites

Oczywiście, że ma prawo działac, tylko zmień sobie wartość:

Const Granica = 500

na około 300-350.

Kolejnym błędem jest niedoczytanie noty katalogowej twego procka. On pracuje tylko do 8Mhz. Twój to Atmega8L, a nie Atmega8. Czyli zmieniacz w programie:

$crystal = 12000000

taktowanie na 8000000.

Tak z własnego doświadczenia, lepiej napisz program na case-ach, lub chociaż sam człon P z regulatora PID. Taki program sprawdzi się tylko w LF na serwach. Przy większych prędkościach wymięka.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

dziekuje bardzo z podpowiedz, akurat mam robotka jedynie na serwach 🙂 ale chcialbym program rozbudowac o czlony regulatora ale nie wiem zbytnio jak :/ a jeszcze jedno diody sygnalizujace dzialanie poszczeglonych czujnikow mam podciagniete bezposrednio do wyjsc czujnikow czy musze jeszcze cos dopisywac w programie zeby dzialaly one jak nalezy ?

Link do komentarza
Share on other sites

Zamień przy procku kwarc z 12MHz na 8MHz.

a jeszcze jedno diody sygnalizujace dzialanie poszczeglonych czujnikow mam podciagniete bezposrednio do wyjsc czujnikow czy musze jeszcze cos dopisywac w programie zeby dzialaly one jak nalezy ?

Nie musisz.

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

No to inna sprawa. Musisz przestawić fusebity. Każdy procek Atmela standardowo ma włączone dzielenie wewnętrznego zegara przez 8 - czyli jeśli Atmega8 ma wbudowane 8Mhz to chodzi na 1Mhz, gdyż zegar dzieli się przez 8. Proszę TU masz fajny poradnik o Fusach.

Link do komentarza
Share on other sites

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

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.