Skocz do zawartości

Line Follower i Atmega8L pomoc


Pomocna odpowiedź

witam ponownie, do programowania robota uzylem program BASCOM AVR 2.0.5.0. na zakladce fuse bit ustawilem int clock 8MHZ (juz gotowa opcja do wyboru). Nastepnie dalem zapisz. Potem wgralem programik i niby wszystko pomyslnie przeszlo. Nastepnie dalem zeby porownal zawartosc bufora z zawartoscia procka i tez ok. Po tym wszystkim odpinam programator, wlaczam robota i nic sie nie dzieje :/

pytanie czy cos zrobilem zle podczas programowania czy mozliwe ze proc chodzi a mostek l293D jest uwalony ? ew. jak to sprawdzic ?

a moge prosic o pomoc w napisaniu prostego programu do sprawdzenia silnikow?

pomijajac okreslenie atmegi i czestotliwosci, tylko same porty jak maja byc, rozumiem ze portd jako wy, oraz pinb.1 i pinb.2 jako wy, czy potrzebuje cos jeszcze ? nie wiem ktore porty ustawic zeby ruszyc silniki ;/

tutaj schemat plytki a staram sie pisac w bascomie

a wogole to staram sie napisac wlasny program od poczatku dla tego LF gdyz tamten pisalem wzorujac sie na innym LF w ramach nauki...

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.2 = Output
Config Portd.3 = Output

Pwm1a = 255
Pwm1b = 255

portd.0=1
portd.1=0
Portd.2=1
portd.3=0

rozumiem ze program ma wygladac tak:

$regfile = "m8def.dat"
$crystal = 1000000

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.2 = Output
Config Portd.3 = Output

Pwm1a = 255
Pwm1b = 255

portd.0=1
portd.1=0
Portd.2=1
portd.3=0

jesli tak to musze szukac innej przyczyny...bo silniki ani rusz

OutSideR2k11, źle konfigurujesz piny. Zapomniałeś o dwóch z nich. Wpisz najlepiej dla testu zamiast tego Twojego config'a portów coś takiego:

Config PortB = output
Config PortD = output

witam, program testowy do silnikow juz dziala, prosilbym tylko o sprawdzenie calego programu w odniesieniu do schematu ideowego robota

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

'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 = 350

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

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

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

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

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

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

a tutaj schemat koncowy :

LED5 i LED8 pokazują to samo. R13, R11, R10 trochę za małe. AREF podpinasz przez kondensator do GND, a nie do +5V. A, staraj się używać symbolu GND zamiast tego 0V. Złącze ISP na PCB wyjdzie chyba w lustrzanym odbiciu. C9 zasadniczo niepotrzebne, możesz dać większy C1 jeśli chcesz. R1 dałbym 22k zamiast 10k.

  • Pomogłeś! 1

dziekuje NAWYK juz poprawione, a powiedzcie czy program napisany jest adekwatny do tego co sie dzieje na schemacie ?

[ Dodano: 04-10-2011, 19:24 ]

i jeszcze jedno, chcialem napisac program tak aby w momencie skretu ograniczyc predkosc robota a kolka obracaly sie w przeciwnych kierunkach do siebie a nie jak dotychczas jedno stoi a drugie kreci, pytanie czy dobrze to zrobilem ?

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

'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 = 350

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

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

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

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

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

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 = 180
         Silnik_lewy_a = 1
         Silnik_lewy_b = 0
         Pwm1b = 180
         Silnik_prawy_a = 1
         Silnik_prawy_b = 0


      If Czujnik_srodkowy_prawy > Granica Then

         Pwm1a = 180
         Silnik_lewy_a = 1
         Silnik_lewy_b = 0
         Pwm1b = 180
         Silnik_prawy_a = 1
         Silnik_prawy_b = 0

      Elseif Czujnik_lewy > Granica Then

         Pwm1a = 140
         Silnik_lewy_a = 0
         Silnik_lewy_b = 1
         Pwm1b = 140
         Silnik_prawy_a = 1
         Silnik_prawy_b = 0

      Elseif Czujnik_prawy > Granica Then

         Pwm1a = 140
         Silnik_lewy_a = 1
         Silnik_lewy_b = 0
         Pwm1b = 140
         Silnik_prawy_a = 0
         Silnik_prawy_b = 1

      Else
         Pwm1a = 0
         Pwm1b = 0
      End If
      End If
   Loop
   End

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