logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[BASCOM]Problem z obsługą wyświetlacza Lcd

karol123 16 Lis 2007 17:47 1992 7
  • #1 4488255
    karol123
    Poziom 16  
    Witam wszystkich pisze ponieważ mam problem z obsługą wyświetlacza w moim układzie wyświetlacz 2x8znaków Programuje układ w Bascomie Avr mam pytanie dotyczące opcji konfiguracji wyświetlacza a opcjach Bascomu nie mam tam wyboru wyświetlacza 2x8znaków i jeszcze jest tam opcja konfigurowania portów procesora potrzebnych do komunikacji z wyświetlaczem czy muszę je skonfigurować Jeszcze mam jedno spostrzeżenie po zaprogramowaniu na wyświetlaczu pojawia się co prawda dużo znaków zapytania a po odłączeniu zasilania i podaniu na nowo już wyświetlacz nic nie reaguje.W załączniku przesyłam program napisany w Bascomie.

    Config Portd = &B1100001
    Config Portb = &B11111111
    Portd.4 = 1
    Portd.3 = 1
    Portd.2 = 1
    Dim Dfd As Byte
    
    Set Portb.7
    Config Timer1 = Timer , Prescale = 8
    Stop Timer1
    
    Dim Odleglosc As Long
    Dim Predkosc As Long
    Dim Odl As Word
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim Maksymalna As Byte
    Dim Maxs As Byte
    Dim Liczba As Byte
    Dim Rodzajpomiaru As Bit
    Dim Czas_off As Word
    Dim Odlegla As Byte
    Dim Flaga As Bit
    Dim Dane As Word
    A = 2
    B = 50
    Set Portb.1
    Set Portb.3
    Readeeprom Predkosc , 5
    Cls
    Lcd "EdW"
    Wait 2
    If Predkosc < 1000 Then Predkosc = 3400
    Gosub Predkosci
    Czas_off = 19800
    
    Ala:
    Do
    Gosub Wylaczenie
    Reset Portb.4
    Reset Portb.5
    
    If Pind.4 = 0 Then
       Incr Maxs
       If Maxs > 3 Then Maxs = 0
       Waitms 100
    End If
    
    Waitms 100
    Cls
    
    If Maxs = 0 Then Lcd "1m?"
    If Maxs = 1 Then Lcd "3m?"
    If Maxs = 2 Then Lcd "10m?"
    If Maxs = 3 Then Lcd "predkosc"
    
    
    
    If Pind.2 = 0 Then Exit Do
    
    Loop
    Liczba = 10
    If Maxs = 2 Then Liczba = 200
    If Maxs = 0 Or Maxs = 3 Then Set Portb.4
    If Maxs = 1 Then Set Portb.3
    
    Do
    Gosub Wylaczenie
    If Pind.3 = 0 Then
      Goto Ala
    End If
    
    
    If Pind.2 = 0 Then
       Czas_off = 0
       Cls
          Start Timer1
          For C = 1 To Liczba
             Set Portd.0
             Waitus 12
             nop
             nop
             Reset Portd.0
             Waitus 10
             nop
             nop
          Next C
         Waitms 1
          If Maxs > 0 Then
             Waitms 2
          End If
    
          If Maxs = 2 Then
              Waitms 5
          End If
    
          A_1:
          If Pind.1 = 0 Then
             If Timer1 < 65000 Then
    
                Goto A_1
    
             End If
             Odlegla = 1
          End If
          Stop Timer1
    
          Timer1 = Timer1 - 18
          If Maxs < 3 Then
            Odleglosc = Timer1 * Predkosc
             Odleglosc = Odleglosc / 20000
    
             If Odlegla = 1 Then
                Lcd "blizej !"
                Odlegla = 0
             Else
                Lcd Odleglosc ; "mm" ; "   " ; Odl ; "m/s"
             End If
    
          Else
             Predkosc = 20000000 / Timer1
             Gosub Predkosci
             Lcd Odl ; "m/s?"
          End If
       Timer1 = 0
       Waitms 250
    End If
    
    If Maxs = 3 Then
       If Pind.4 = 0 Then
          Goto Ala
       End If
    End If
    Loop
    
    Predkosci:
    Odl = Predkosc / 10
    Return
    
    Wylaczenie:
    Waitms 1
    Incr Czas_off
    If Czas_off > 20000 Then
       Czas_off = 0
       Writeeeprom Predkosc , 5
       Set Portd.5
    End If
    Return


    Proszę stosować znaczniki code
    And!
  • #2 4488474
    snow
    Poziom 31  
    Nie znam się zbytnio na bascomie ale chyba brak przypisania linii wyświetlacza do portów procka.
  • #3 4489696
    mirekk36
    Poziom 42  
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portc.3 , Db7 = Portc.4 , E = Portd.6 , Rs = Portd.7


    coś takiego musisz sobie zdefiniować w programie tylko dla twojego wyświetlacza, więc sprawdź na jakich pinach masz podpięty i przerób te linijki powyżej na swoje potrzeby
  • #4 4491634
    karol123
    Poziom 16  
    Tak ja to już przerabiałem nic mi to nie pomogło czyli wina leży w czymś innym ten program nie wiem czy dobrze się wgrywa do procesora programuje przez Isp w zestawie uruchomieniowym po wgraniu co prawda pokazują się znaki zapytania na wyświetlaczu ale nic poza tym a jak wyłączę zasilanie i znów załączam to nic już się nie ukazuje tylko czarne kwadraty ma wyświetlaczu bo pewnie mam trochę mocny kontrast ustawiony Pozdrawiam
  • #5 4492265
    Neverhood
    Poziom 16  
    To może spróbuj wgrać jakiś prosty programik, aby sprawdzić lcd
    np.
    
    wait 1
    cls
    lcd"pierwsza linia"
    lowerlinie
    lcd"123456789"
    end
    

    w bascomie musisz najpierw w zakładce compilatora "lcd" ustawić jakie masz końcówki lcd podłączone do procka

    Cytat:
    jak wyłączę zasilanie i znów załączam to nic już się nie ukazuje tylko czarne kwadraty ma wyświetlaczu bo pewnie mam trochę mocny kontrast ustawiony Pozdrawiam
    czyli tak jakby inicjacji nie było ... chyba masz w kompilatorze źle ustawione końcówki od lcd.
  • #6 4492317
    karol123
    Poziom 16  
    Ciężki temat bo proste wgrywałem
    i działał a czasami nie ma na to wpływ zaprogramowanie Eprom spróbuje jeszcze ale pomysły mi się kończą
  • #7 4493045
    Neverhood
    Poziom 16  
    W takim razie program jest do bani! hmm jakoś nie ogarniam tego programu. Żadnych wcięć ... odstrasza to strasznie ;-)

    Bascom ma to do siebie, że kompiluje bez zająknięcia (nie zgłasza problemów), a potem się program buntuje bo kompilator syntax error nie wykrył.

    Ja bym proponował najpierw dać

    config port...
    dim a as ....
    timer...


    program...


    tutaj wszystkie etykiety,procedury...

    np.
    wszystkie deklaracje zmienne dać przed inicjacją timera.


    Ala: <- przestawić na sam koniec


    
    Config Portd = &B1100001
    Config Portb = &B11111111
    Portd.4 = 1
    Portd.3 = 1
    Portd.2 = 1
    Dim Dfd As Byte
    
    Set Portb.7
    Config Timer1 = Timer , Prescale = 8
    Stop Timer1
    
    Dim Odleglosc As Long
    Dim Predkosc As Long
    Dim Odl As Word
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim Maksymalna As Byte
    Dim Maxs As Byte
    Dim Liczba As Byte
    Dim Rodzajpomiaru As Bit
    Dim Czas_off As Word
    Dim Odlegla As Byte
    Dim Flaga As Bit
    Dim Dane As Word
    A = 2
    B = 50
    Set Portb.1
    Set Portb.3
    Readeeprom Predkosc , 5
    Cls
    Lcd "EdW"
    Wait 2
    If Predkosc < 1000 Then Predkosc = 3400
    Gosub Predkosci
    Czas_off = 19800[color=red]<-Tutaj program zawsze musi stanąć!!!!!!!!!!!!!!!! tzw. zawiesza się wszystko[/color]
    
    Ala:
    Do
    Gosub Wylaczenie
    Reset Portb.4
    Reset Portb.5
    
    If Pind.4 = 0 Then
    Incr Maxs
    If Maxs > 3 Then Maxs = 0
    Waitms 100
    End If
    
    Waitms 100
    Cls
    
    If Maxs = 0 Then Lcd "1m?"
    If Maxs = 1 Then Lcd "3m?"
    If Maxs = 2 Then Lcd "10m?"
    If Maxs = 3 Then Lcd "predkosc"
    
    
    
    If Pind.2 = 0 Then Exit Do
    
    Loop
    Liczba = 10
    If Maxs = 2 Then Liczba = 200
    If Maxs = 0 Or Maxs = 3 Then Set Portb.4
    If Maxs = 1 Then Set Portb.3
    
    Do
    Gosub Wylaczenie
    If Pind.3 = 0 Then
    Goto Ala
    End If
    
    
    If Pind.2 = 0 Then
    Czas_off = 0
    Cls
    Start Timer1
    For C = 1 To Liczba
    Set Portd.0
    Waitus 12
    nop
    nop
    Reset Portd.0
    Waitus 10
    nop
    nop
    Next C
    Waitms 1
    If Maxs > 0 Then
    Waitms 2
    End If
    
    If Maxs = 2 Then
    Waitms 5
    End If
    
    A_1:
    If Pind.1 = 0 Then
    If Timer1 < 65000 Then
    
    Goto A_1
    
    End If
    Odlegla = 1
    End If
    Stop Timer1
    
    Timer1 = Timer1 - 18
    If Maxs < 3 Then
    Odleglosc = Timer1 * Predkosc
    Odleglosc = Odleglosc / 20000
    
    If Odlegla = 1 Then
    Lcd "blizej !"
    Odlegla = 0
    Else
    Lcd Odleglosc ; "mm" ; " " ; Odl ; "m/s"
    End If
    
    Else
    Predkosc = 20000000 / Timer1
    Gosub Predkosci
    Lcd Odl ; "m/s?"
    End If
    Timer1 = 0
    Waitms 250
    End If
    
    If Maxs = 3 Then
    If Pind.4 = 0 Then
    Goto Ala
    End If
    End If
    Loop
    
    Predkosci:
    Odl = Predkosc / 10
    Return
    
    Wylaczenie:
    Waitms 1
    Incr Czas_off
    If Czas_off > 20000 Then
    Czas_off = 0
    Writeeeprom Predkosc , 5
    Set Portd.5
    End If
    Return


    Wydaje mi się , że program zrobi config portów, ustawi timer, przypisze zmienne do ramu, natępnie to
    A = 2
    B = 50
    Set Portb.1
    Set Portb.3
    Readeeprom Predkosc , 5
    Cls
    Lcd "EdW"
    Wait 2
    If Predkosc < 1000 Then Predkosc = 3400
    potem skok - przypisanie tylko jednej zmiennej, wraca
    Czas_off = 19800
    To jest koniec programu bo
    potem jest etykieta ala: ( która zajmuje prawie cały program)


    Mimo wszystko nadal nie wiem jak miał działać ten program , czyli co autor chciał osiągnąć :|

    Nie rozumiem tego :
    Config Timer1 = Timer , Prescale = 8
    Stop Timer1

    Jakoś nie umiem sobie wyobrazić po co nam timer1 jeśli nie odblokujemy przerwań, oraz nie wybierzemy co ma zrobić po zgłoszeniu przerwania!
  • #8 4494862
    karol123
    Poziom 16  
    Nie wydaje się to dziwne ale musiałby pan mieć przed sobą układ jest tam pomiar impulsu wysłanego i po powrocie do procesora przeliczeniu go na metry ,ale to tak na marginesie powiem że układ zaczął działać ale po kilku razowym w graniu do procesora nie rozumiem jak kompilator ustawia wyjścia na wyświetlacz ja ten procesor programowałem w innym układzie i po zaprogramowaniu włożyłem do innego.Pozdrawiam
REKLAMA