Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.
  • #1
    Mat614
    Level 2  
    Witam, mam 15 lat i mam na imię Mateusz. Napisałem program do linefollower i chciałem zastosować PWM i ADC ale nie wiem czy mi to wyszło. Gdy wgrywam program, włączam robota i naciskam start to nic czujniki nic nie wykrywają a silniki cały czas się kręcą do przodu. Pomoglibyście mi bym był bardzo wdzięczny.:D

    $regfile = "m88def.dat"
    $crystal = 16000000
    
    'Konfiguracja przetwornika analog-cyfra (ADC)
    Config Adc = Single , Prescaler = Auto
    
    'Konfiguracja sterowania sprzętowym PWM
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    
    'Konfiguracja portów
    Config Portb = Output
    Config Portd = &B01111111
    Config Portc = Input
    
    Portd.7 = 1
    
    Przycisk Alias Pind.7
         Led Alias Portd.6
    Enable_a Alias Portb.1
    Enable_b Alias Portb.2
    Silnik_prawy_a Alias Portd.3
    Silnik_prawy_b Alias Portd.2
    Silnik_lewy_a Alias Portd.1
    Silnik_lewy_b Alias Portd.0
    
    'Opis portów
    'Enable_a - Silnik lewy - Portb.1 (PWM1A)
    'Enable_b - Silnik prawy - portb.2 (PWM1B)
    'Input1 - Silnik prawy A - Portd.3
    'Input2 - Silnik prawy B - Portd.2
    'Input4 - Silnik lewy A - Portd.0
    'Input3 - Silnik lewy B - Portd.1
    'Dioda - Portd.6
    'Czujnik lewy skrajny - ADC2
    'Czujnik lewy - ADC3
    'Czujnik środkowy - ADC4
    'Czujnik prawy - ADC5
    'Czujnik prawy skrajny - ADC6
    
    'Granica reagowania na linię - należy dobrać doświadczalnie
    Const Granica = 500
    
    'Deklaracje zmiennych
    Dim Czujnik_skrajny_lewy As Single
    Dim Czujnik_lewy As Single
    Dim Czujnik_srodkowy As Single
    Dim Czujnik_prawy As Single
    Dim Czujnik_skrajny_prawy As Single
    Dim W As Word
    
    Set Led
    
    'Blok instrukcji
    Set Silnik_lewy_a
    Reset Silnik_lewy_b
    Set Silnik_prawy_a
    Reset Silnik_prawy_b
    
    Do
    
    Bitwait Pind.7 , Reset                                      'czekaj aż 7 linia portu D będzie w stanie 0.
    
    
       Gosub Wczytaj_stany_przetwornikow
       If Czujnik_srodkowy > Granica Then
          'Silnik lewy - maksymalna prędkość
          Pwm1a = 250
          'Silnik prawy - maksymalna prędkość
          Pwm1b = 250
       Elseif Czujnik_lewy > Granica Then
          Pwm1a = 230
          Pwm1b = 100
       Elseif Czujnik_skrajny_lewy > Granica Then
          Pwm1a = 230
          Pwm1b = 230
       Elseif Czujnik_prawy > Granica Then
          Pwm1a = 100
          Pwm1b = 230
       Elseif Czujnik_skrajny_prawy > Granica Then
          Pwm1a = 230
          Pwm1b = 230
       End If
    Loop
    End
    
    
    Wczytaj_stany_przetwornikow:
    Start Adc
    W = Getadc(6)
    W = Getadc(6)
    Stop Adc
    Czujnik_prawy = W
    Start Adc
    W = Getadc(5)
    W = Getadc(5)
    Stop Adc
    Czujnik_skrajny_lewy = W
    Start Adc
    W = Getadc(2)
    W = Getadc(2)
    Stop Adc
    Czujnik_lewy = W
    W = Getadc(3)
    W = Getadc(3)
    Stop Adc
    Czujnik_srodkowy = W
    W = Getadc(4)
    W = Getadc(4)
    Stop Adc
    Czujnik_skrajny_prawy = W
    Return


    Moderated By Mirek Z.:

    A to? http://www.dioda.com.pl/forum/topics49/bascom-obsluga-adc-z-uzyciem-megi16-i-cny70-vt3575.htm