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.

LCD Atmega 8 i bascom - pomoc w napisaniu programu

Michał~88 02 Gru 2009 23:50 2016 7
  • #1 02 Gru 2009 23:50
    Michał~88
    Poziom 14  

    Witam.
    Chciałbym wykonać coś podobnego co widać na filmiku.
    Czy mógł by mi ktoś pomóc w napisaniu programu bądź podpowiedzeniu od czego zacząć lub ma ktoś z was gotowca.
    Pozdrawiam.


    Link

    0 7
  • #2 03 Gru 2009 00:10
    Jaduda
    Poziom 32  

    Najpierw musisz stworzyć schemat całego układu, a potem wsiąść się za pisanie programu. Co do realizacji sprzętowej to polecam lekturę tego tematu.

    0
  • #3 03 Gru 2009 07:36
    Michał~88
    Poziom 14  

    Co do realizacji sprzętowej to wykonałem na płytce prototypowej widzę że z postu który mi podałeś użytkownik wader_669 wykorzystał ten sam schemat podłączenia z książki "Programowanie mikrokontrolerów AVR w języku Bascom". Więc z tym mam problem z głowy i działa mi zmienianie podświetlenia jasności diody LCD tylko nie wiem jak się zabrać za tą linijkę by ładnie wyświetlała możliwości maksymalne i minimalne nastawiania a nie chciał bym by wyświetlało mi wartość PWM od 0 do 255 bo innemu użytkownikowi po co to wiedzieć jak może być ładnie przedstawione.

    0
  • #4 03 Gru 2009 09:22
    Jaduda
    Poziom 32  

    Michał~88 napisał:
    tylko nie wiem jak się zabrać za tą linijkę by ładnie wyświetlała możliwości maksymalne i minimalne nastawiania a nie chciał bym by wyświetlało mi wartość PWM od 0 do 255 bo innemu użytkownikowi po co to wiedzieć jak może być ładnie przedstawione.
    Wystarczy wprowadzić dodatkową zmienną, która będzie reprezentowała wartość PWM/2,55 i tak dla PWM=255 będzie zawierała wartość 100... :D

    0
  • #5 03 Gru 2009 09:46
    Michał~88
    Poziom 14  

    :D hehe też to jest jakieś wyjście :D poczytałem nawet artykuły o analizatorze widma audio ale chyba zmierzam w nie tym kierunku.

    0
  • #6 03 Gru 2009 23:47
    Michał~88
    Poziom 14  

    Hmm po dodaniu zmiennej Pr i zrobeniu działania Pr = Pwm1a / 2.55 wyświetla mi na LCD gdy mam 255 85 %
    w czym robię błąd.

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    Config Pinb.1 = Output
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Up
    Dim Pr As Integer
    Declare Sub Zwieksz                                         'Deklaracja procedury zwiększajšcej stan rejestru porównania
    Declare Sub Zmniejsz                                        'Deklaracja procedury zmniejszajšcej stan rejestru porównania
    Pwm1a = 20
    S1 Alias Pinc.1                                             'przypisanie nazwie Pinb.2
    S2 Alias Pinc.0                                             'przypisanie nazwie Pinb.1
    Deflcdchar 0 , 27 , 17 , 17 , 17 , 17 , 17 , 17 , 27        ' replace ? with number (0-7)
    Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31        ' replace ? with number (0-7)
    Do
    Pr = Pwm1a / 2.55                                           'pętla nieskończona
    Debounce S1 , 0 , Zmniejsz , Sub                            'S1 zmniejsza zawarto?ć rejestru Pwm1a (=OCR1)
    Debounce S2 , 0 , Zwieksz , Sub                             'S2 zwiększa zawarto?ć rejestru Pwm1a (=OCR1)
    Cls                                                         'czy?ć wy?wietlacz
    Lcd "Pod " ; Pr ; "%"                                       'wy?wietl zawarto?ć rejestru OCR1
    Lowerline
    Lcd Pwm1a                                                   'wy?wietl zawarto?ć licznika T/C1 (TCNT1)
    Waitms 100
    Cursor Off                                                  'czekaj 100 milisekundę
    Loop : End

    Sub Zwieksz
    Incr Pwm1a
    End Sub

    Sub Zmniejsz
    Decr Pwm1a
    End Sub

    0
  • #7 04 Gru 2009 00:30
    Jaduda
    Poziom 32  

    To wypróbuj ten kod:

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    Config Pinb.1 = Output
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Up
    Dim Pr As Single
    Declare Sub Zwieksz                                         'Deklaracja procedury zwiększajšcej stan rejestru porównania
    Declare Sub Zmniejsz                                        'Deklaracja procedury zmniejszajšcej stan rejestru porównania
    Pwm1a = 20
    S1 Alias Pinc.1                                             'przypisanie nazwie Pinb.2
    S2 Alias Pinc.0                                             'przypisanie nazwie Pinb.1
    Deflcdchar 0 , 27 , 17 , 17 , 17 , 17 , 17 , 17 , 27        ' replace ? with number (0-7)
    Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31        ' replace ? with number (0-7)
    Do
    Pr = Pwm1a / 2.55                                           '/ 2.55                                           'pętla nieskończona
    Debounce S1 , 0 , Zmniejsz , Sub                            'S1 zmniejsza zawarto?ć rejestru Pwm1a (=OCR1)
    Debounce S2 , 0 , Zwieksz , Sub                             'S2 zwiększa zawarto?ć rejestru Pwm1a (=OCR1)
    Cls                                                         'czy?ć wy?wietlacz
    Lcd "Pod " ; Fusing(pr , "#.&&") ; "%"                      'wy?wietl zawarto?ć rejestru OCR1
    Lowerline
    Lcd Pwm1a                                                   'wy?wietl zawarto?ć licznika T/C1 (TCNT1)
    Waitms 100
    Cursor Off                                                  'czekaj 100 milisekundę
    Loop : End

    Sub Zwieksz
    Incr Pwm1a
    End Sub

    Sub Zmniejsz
    Decr Pwm1a
    End Sub

    U mnie już dobrze pokazuje %. Wystarczyło zmienić typ zmiennej Pr z Integer na Single i trochę sformatować wynik :D

    0