Skocz do zawartości

Line Follower i Atmega8L pomoc


Pomocna odpowiedź

Napisano

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 ?

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

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 ?

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.

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.

Jak się wczytasz i zrobisz to tak jak autor to będzie dobrze 😉

[ Dodano: 25-08-2011, 20:51 ]

Aaa... Na wszelki wypadek zbuduj sobie generator 1Mhz na bramce. Mówię ci to z własnego doświadczenia 😉

witam, po dodaniu dodatkowych linijek :

Silnik_lewy_a Alias Portd.3
Silnik_lewy_b Alias Portd.2
Silnik_prawy_b Alias Portd.0
Silnik_prawy_a Alias Portd.1

udalo sie programik skompilowac 🙂

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