Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Prośba o pomoc w napisaniu programu Bascom, obsługa ekranu LCD

emix995 01 Maj 2012 15:23 1360 2
  • #1 01 Maj 2012 15:23
    emix995
    Poziom 9  

    Chciał bym żeby ktoś mi pomógł napisać program ma mniej więcej wyglądać to tak:
    Po włączeniu na ekraniku 40x2 (tylko taki mam akurat)
    Pojawi się napis
    Wybierz opcję:
    1. Line follower 2. Minisumo 3.Rc5
    naciskam przycisk 1 i na ekraniku pojawia się:
    Wybrałeś obcję: line follower
    (ładowanie takie po kolei po jednym kwadracie) .
    jak się załadują wszystkie kwadraty toi będzie pisać
    Opcja 1 linefollower
    Naciśnij 4. aby wrócić do menu:
    w tym czasie normalnie robot działa oczywiście ale jak nacisnę 4 to powróci do stanu na początku. Czyli opcja 1 2 i 3
    jak nacisnę 2 to pisze Wybrałeś opcję 2. mini sumo itd!
    Narazie chciał bym to na atmega8 przetestować sam program ale całość będzie na Atmega16

    Kod do line follower (Autorem jest piotreks-89 )

    Code:
    ''''''''''''''''''''''''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

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

    'Granica reagowania na linię
    Const Granica = 400
    'Deklaracja nazw
    Led2 Alias Portd.7
    Led3 Alias Portd.6
    Led4 Alias Portd.5
    Led5 Alias Portd.4

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

    '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(2)
    Czujnik_srodkowy_lewy = Getadc(3)
    Czujnik_srodkowy_prawy = Getadc(4)
    Czujnik_prawy = Getadc(5)

       If Czujnik_srodkowy_lewy > Granica Then
          Pwm1a = 255
          Pwm1b = 255
          Led3 = 1
       If Czujnik_srodkowy_prawy > Granica Then
          Pwm1a = 255
          Pwm1b = 255
          Led4 = 1
       Elseif Czujnik_lewy > Granica Then
          Pwm1a = 0
          Pwm1b = 255
          Led2 = 1
       Elseif Czujnik_prawy > Granica Then
          Pwm1a = 255
          Pwm1b = 0
          Led5 = 1




       Else
          Pwm1a = 255
          Pwm1b = 255
          Led2 = 0
          Led3 = 0
          Led4 = 0
          Led5 = 0
       End If
       End If
    Loop
    End


    nie wiem czy komuś to będzie potrzebne ale konf. wyświetlacza to
    Code:
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 


    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Proszę to poprawić. - arnoldziq

    Dodano po 3 [godziny] 20 [minuty]:

    początek kodu
    Code:
    $regfile = "m8def.dat"
    
    $crystal = 100000
    Config Lcd = 40 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    config portd=input
        Cls
    Dim I As Byte


               Cls

               Lcd ".WYBIERZ OBCJE:" ; Chr(0) ; Chr(1) ;

               Cursor Off

               Home Lower

               Lcd "1. LINE 2.SUMO 3.RC5" ; Chr(0) ; Chr(1) ;

    Do
    For I = 1 To 21
    Shiftlcd Right
    Waitms 2000
    Next I

    For I = 1 To 21
    Shiftlcd Left
    Waitms 2000
    Next I
    Do

       if pinb.0=1 then                         'jeżeli przycisk 1 wciśnięty
                                                   'chciał bym że jak nacisne 1 to pokaze sie napis i zacznie działać jak to rozwiązać?
    Loop
    End If

    Loop

    0 2
  • #2 01 Maj 2012 19:19
    30402
    Użytkownik usunął konto  
  • #3 01 Maj 2012 23:24
    bogdan_p
    Poziom 39  

    Zgadzam się z kol.Saabotaz zacznij pisanie od nowa tylko na początek zrób sobie schemat blokowy w którym uwzględnij wszystkie podzespoły potrzebne w danej konfiguracji robota . Na pewno wspólnym blokiem dla wszystkich będzie sterowanie dwoma mostkami H , następnie blok czujników na koniec komunikacja RC5 . Następnie napisz 3 programy które w czasie swojej pracy będą korzystały z odpowiednich czujników oraz wysyłały polecenia do podprogramów sterujących silnikami na sam koniec zostaw sobie LCD i resztę bajerów . Program line follower który pokazałeś będzie działał tylko jest to przerost formy nad treścią ..... zupełnie nie potrzebny PWM skoro tylko dwa poziomy 0 / 255 , po co sterowanie mostkiem H jeżeli na początku programu od razu ustawiasz oba mostki do jazdy prosto do tego wystarczą dwa tranzystory , po co pomiar przetwornikiem jak ustalasz jednorazowy stan warunku . Do takiej pracy to zupełnie wystarczą komparatory analogowe , ponadto ustawisz sobie dowolny próg działania oraz pętlę histerezy , proponuje przeglądnij sobie inne projekty tego typu robotów i przemyśl dokładnie konstrukcję mechaniczną , program można poprawiać wiele razy z mechaniką już tak prosto nie jest .

    0