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

[atmega8][bascom] Problem z TIMER2 PWM I LCD

PiotrZabek 23 Lis 2009 21:53 6032 6
REKLAMA
  • #1 7300539
    PiotrZabek
    Poziom 14  
    Witam mam za zadanie sterować jasnością 3 diod przez pilot RC5i na wyświetlaczu ma się wyświetlać stan. Na timerze 1 steruje pwm1a i pwm1b i jest w porządku zmienia się jasność. Problem ze sterowaniem 3 diodą (TIMER2), ona nie reaguje gdy wysyłam kod 6 lub 9, mrugnie jednorazowo tylko wtedy gdy wysyłam dowolną komendę do tmfs5360. Jasność tej 3 diody się nie zmienia. Jeżeli zmienię na

    Config Timer2 = Pwm , Async = Off
    to wtedy jestem w stanie sterować tylko ze na wyświetlaczu pojawiają się krzaczki ;/
    Nie wiem w czym jest kłopot pomóżcie ;/ Prosze o pomoc
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    Config Timer2 = Pwm , Async = On , Pwm = On , Compare Pwm = Clear Up , Prescale = 1
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    Declare Sub Wysw
    
    Config Rc5 = Pind.1
    Dim Flaga As Bit
    Dim Address As Byte , Command As Byte , I As Byte
    Enable Interrupts
    Enable Timer1
    Enable Timer2
    
    Pwm1a = 0
    Pwm1b = 0
    Ocr2 = 0
    Flaga = 1
    I = 10
      Call Wysw
    
    
    
           Do
              Getrc5(address , Command)
              If Address = 0 Then
    
                   If Command = 1 Then
                      Pwm1a = Pwm1a + I
                   End If
    
                   If Command = 2 Then
                      Pwm1b = Pwm1b + I
                   End If
    
                   If Command = 4 Then
                      Pwm1a = Pwm1a - I
                   End If
                   If Command = 5 Then
                      Pwm1b = Pwm1b - I
                   End If
                   If Command = 3 Then
                       Ocr2 = Ocr2 + I
                   End If
                   If Command = 6 Then
                       Ocr2 = Ocr2 - I
                   End If
    
                 Flaga = 1
                 Waitms 20
                End If
             Command = Command And &B01111111
             Waitms 100
             Call Wysw
          Loop
    
    End
    
    
    Sub Wysw
       If Flaga = 1 Then
         Cls
        Lcd "PWMA:" ; Pwm1a ; " PWMB:" ; Pwm1b
        Lowerline
        Lcd "OCR2: " ; Ocr2
        Waitms 20
          Flaga = 0
       End If
    End Sub
    
    
    
  • REKLAMA
  • REKLAMA
  • #3 7300834
    PiotrZabek
    Poziom 14  
    Zmieniłem tą linijkę to nic nie pomogło. Dalej są krzaczki przy wyłączonym async i w tedy się zmienia jasność a przy włączonym nie ma krzaczków a jasność się nie zmienia
  • #4 7301267
    korrus666
    Poziom 40  
    Tak to jest jak się korzysta z BASCOMA i jego gotowych procedur, które co robią to nawet najstarsi górale nie wiedzą. Ale to taka mała dygresja. Ja myślę że krzaczki na LCD są spowodowane używaniem przez Bascoma tych samych rejestrów do obsługi PWM timera i LCD. Nie wiem tylko czy można w Bascom coś z tym zrobić. Może jakieś włączenie odkładania na stos wartości w obsłudze przerwania, Ale kto wie czego on używa i co się krzaczy.
  • REKLAMA
  • #5 7301704
    PiotrZabek
    Poziom 14  
    A jak bym przelutował do portu C wyswietlacz LCD to coś to zmienić może jak myślicie?
  • REKLAMA
  • #6 7301741
    mirekk36
    Poziom 42  
    Prędzej spróbuj podłączyć do innego portu niż LCD sam odbiornik IR. Bo masz go na PD1 zdaje się a pozostałe piny tego portu są dla LCD.

    Albo zrób sobie programowy PWM w oparciu o jeden Timer to drugi będziesz miał jeszcze wolny do innych celów ;)
  • #7 9800686
    HUssar88
    Poziom 2  
    Przepraszam że odkopuję temat ale miałem identyczny problem który po długich zmaganiach udało mi się rozwiązać, więc chciałem się z nim podzielić. Rozwiązaniem jest ręczne ustawienie rejestrów specjalnych odpowiadających za konfigurację PWM. Tak ja korrus666 napisał Bascom używa pewnie tych samych rejestrów do obsługi LCD i PWM z Timer2.

    Usuń linijke:
    Config Timer2 = Pwm , Async = On , Pwm = On , Compare Pwm = Clear Up , Prescale = 1

    a w zamian wstaw
    Tccr2 = &B01101001 

    Powoduje on ustawienie trybu fast-PWM z Prescaler=1. Wypełnienie sterowane wartością ocr2. Dokładne znaczenie bitów znajdziesz w dokumentacji na stronie 114
REKLAMA