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

[Bascom] Wyświetlanie wypełnienia PWM na lcd w %

xspi13 05 Lut 2011 21:57 3123 4
  • #1 9109115
    xspi13
    Poziom 11  
    Otóż mam mały problem bo zaczynam programowanie i natknąłem się na problem bo chce aby na wyświetlaczu podawał mi wynik w procentach. Z góry dzięki, poniżej kod.

    
    $crystal = 4000000                                          'Deklaracja częstotliwości kwarcu
    $regfile "attiny2313.dat"                                   'deklaracja modelu procesora
    
    Config Lcd = 16 * 2
    
    Declare Sub Zwieksz                                         'Deklaracja procedury zwiększającej stan rejestru porównania
    Declare Sub Zmniejsz                                        'Deklaracja procedury zmniejszającej stan rejestru porównania
    
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Down       'Konfiguracja Timera
    
    Config Portd = &B0000000                                    'Pd.0 i Pd.1 jako wejścia
    Portd = &B0000111                                           'podciągnięte
    
    Ddrb = &B11111111                                           'Odblokowanie globalnego wyjścia OC1
    
    Cls : Lcd "Portal naukowy" : Lowerline : Lcd "Generator PWM"       'wstępny opis
    
    Wait 3                                                      'czekaj 3 sekundy
    Pwm1a = 500                                                 'wstępnie w rejestrze Pwm1 liczba 255 - niewielka moc
    
    
    Do                                                          'pętla nieskończona
    
    If Pind.0 = 0 Then Zmniejsz                                 'S1 zmniejsza zawartość rejestru Pwm1a (=OCR1)
    If Pind.1 = 0 Then Zwieksz                                  'S2 zwiększa zawartość rejestru Pwm1a (=OCR1)
    Cls                                                         'czyść wyświetlacz
    Lcd "PWM1a " ; Pwm1a ; "%"                                  'wyświetl zawartość rejestru OCR1
                                                                'wyświetl zawartość licznika T/C1 (TCNT1)
    Waitms 100                                                  'czekaj 100 milisekundę
    Loop : End
    
    
    
    Sub Zwieksz                                                 'procedury: zwiększająca i zmniejszająca stal rejestru porównania
    Incr Pwm1a
    Pwm1a = Pwm1a + 50
    End Sub
    
    Sub Zmniejsz
    Decr Pwm1a
    Pwm1a = Pwm1a - 50
    End Sub   


    Poprawiłem tytuł.
    [zumek]
  • #2 9109227
    xamrex
    Poziom 28  
    Coś mi się tu nie podoba.
    Masz w ustawianiach Pwm = 8
    Czyli rozdzielczość to 8 bitów

    Więc czemu pakujesz tutaj 500
    Pwm1a = 500

    Skoro rozdzielczość to 8 bitów?

    Ja bym to zrobił tak,
    Zostawił tą rozdzielczość 8 bitową (czyli max wartość PWM1a to 255) NIE MOŻESZ DAĆ TAM 500!
    Teraz wartość 1 to ok 0,4%
    127 - to 50%
    255 to 100%

    I Zamiast tego
    Lcd "PWM1a " ; Pwm1a ; "%"

    Wpisz
    
    wartProcentowa = Pwm1a * 0.4
    Lcd "PWM1a " ; wartProcentowa ; "%"


    Oczywiście na górze programu musi być
    DIM wartProcentowa as single


    Robione na sucho, ale powinno działać.

    Tu masz gotowy program:
    $crystal = 4000000                                          'Deklaracja częstotliwości kwarcu
    $regfile "attiny2313.dat"                                   'deklaracja modelu procesora
    
    Config Lcd = 16 * 2
    
    Declare Sub Zwieksz                                         'Deklaracja procedury zwiększającej stan rejestru porównania
    Declare Sub Zmniejsz                                        'Deklaracja procedury zmniejszającej stan rejestru porównania
    Dim T As Byte
    DIM wartProcentowa as single
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Down       'Konfiguracja Timera
    
    Config Portd = &B0000000                                    'Pd.0 i Pd.1 jako wejścia
    Portd = &B0000111                                           'podciągnięte
    
    Ddrb = &B11111111                                           'Odblokowanie globalnego wyjścia OC1
    
    Cls : Lcd "Portal naukowy" : Lowerline : Lcd "Generator PWM"       'wstępny opis
    
    Wait 3                                                      'czekaj 3 sekundy
    Pwm1a = 127                                                'wstępnie w rejestrze Pwm1 liczba 255 - niewielka moc
    
    
    Do                                                          'pętla nieskończona
    
    If Pind.0 = 0 Then Zmniejsz                                 'S1 zmniejsza zawartość rejestru Pwm1a (=OCR1)
    If Pind.1 = 0 Then Zwieksz                                  'S2 zwiększa zawartość rejestru Pwm1a (=OCR1)
    Cls                                                         'czyść wyświetlacz
    Wartprocentowa = Pwm1a * 0.4
    Lcd "PWM1a " ; wartProcentowa ; "%"                                 'wyświetl zawartość rejestru OCR1
                                                                'wyświetl zawartość licznika T/C1 (TCNT1)
    Waitms 100                                                  'czekaj 100 milisekundę
    Loop : End
    
    
    
    Sub Zwieksz                                                 'procedury: zwiększająca i zmniejszająca stal rejestru porównania
    Incr Pwm1a
    Pwm1a = Pwm1a + 50
    End Sub
    
    Sub Zmniejsz
    Decr Pwm1a
    Pwm1a = Pwm1a - 50
    End Sub
  • #3 9109525
    xspi13
    Poziom 11  
    wiem że troche to sknociłem, ale w symukacji pokazuje to troche inaczej.
    Wielkie dzięki za pomoc.

    Dodano po 18 [minuty]:

    I jeszcze jedno jak pozbyć się przecinka.
  • #4 9110945
    xamrex
    Poziom 28  
    Użyj funkcji do zaokrąglania FUSING
  • #5 9111212
    xspi13
    Poziom 11  
    Dzięki za podpowiedź. Oto już mój finał i poprawiony kod.
    
    $sim
    
    $crystal = 4000000                                          'Deklaracja częstotliwości kwarcu
    $regfile "attiny2313.dat"                                   'deklaracja modelu procesora
    
    Config Lcd = 16 * 2
    
    Declare Sub Zwieksz                                         'Deklaracja procedury zwiększającej stan
    Declare Sub Zmniejsz                                        'Deklaracja procedury zmniejszającej stan
    Dim Wartprocentowa As Single , Z As String * 10
    
    
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Down       'Konfiguracja Timera
    
    Config Portd = &B0000011                                    'Pd.0 i Pd.1 jako wejścia
    Portd = &B0000011                                           'podciągnięte
    
    Ddrb = &B11111111                                           'Odblokowanie globalnego wyjścia OC1
    
    Cls : Lcd "Test" : Lowerline : Lcd "Generator PWM"          'wstępny opis
    
    Wait 2                                                      'czekaj 2 sekundy
    Pwm1a = 126                                                 'wstępnie w rejestrze Pwm1 liczba 126 równa połowie - niewielka moc
    
    
    Do                                                          'pętla nieskończona
    
    If Pind.0 = 0 Then Zmniejsz                                 'S1 zmniejsza zawartość rejestru Pwm1a (=OCR1)
    If Pind.1 = 0 Then Zwieksz                                  'S2 zwiększa zawartość rejestru Pwm1a (=OCR1)
    Cls                                                          'czyść wyświetlacz
    Z = Str(wartprocentowa)
    Print Z
    Z = Fusing(wartprocentowa , "#.")
    
    
    Wartprocentowa = Pwm1a * 0.4                                'wyświetl zawartość rejestru OCR1
    Lcd "PWM1a " ; Z ; "%"
    
    Waitms 100                                                  'czekaj 100 milisekundę
    Loop : End
    
    
    
    Sub Zwieksz                                                 'procedury: zwiększająca i zmniejszająca stal rejestru porównania
    Incr Pwm1a
    Pwm1a = Pwm1a + 20
    End Sub
    
    Sub Zmniejsz
    Decr Pwm1a
    Pwm1a = Pwm1a - 20
    End Sub
REKLAMA