Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[attiny2313][bascom]Sterowanie fazowe + RC5 , program się zawiesza

pawl091 05 Aug 2011 23:58 2692 2
  • #1
    pawl091
    Level 9  
    Witam.
    Jest to mój pierwszy post na forum elektrody więc witam serdecznie wszystkich forumowiczów i proszę o wyrozumiałość :D .

    Mam problem z swoim projektem, a mianowicie ze ściemniaczem światła sterowanego pilotem, który nadaje w RC5.
    Problem polega na tym ze program działa ale tylko przez chwilkę a później działa tylko jego część.
    Wygląda to tak, że gdy włączam układ to wszystko działa ale tylko przez około 20 sekund. W tym czasie mogę rozjaśniać i ściemniać jeden kanał i włączać i wyłączać drugi ( co jest ideą tego układu ). Później program się zawiesza i mogę tylko włączać i wyłączać drugi kanał a kanał pierwszy jest rozjaśniony na maxsa i nie reaguje na przyciski ( choć raz zdarzyło się ze się odwiesił na następną chwile ).
    Dodam ze sama regulacja fazowa działa wyśmienicie, jednak gdy dodam w programie komendę "GetRC5" dzieją się właśnie takie rzeczy:cry:

    Załączam schemat układu
    [attiny2313][bascom]Sterowanie fazowe + RC5 , program się zawiesza

    Orłem w bascomie nie jestem ale udało mi się napisać takie coś
    
    $regfile = "attiny2313.dat".dat
    $crystal = 8000000
    $baud = 19200
    
    Config Pind.6 = Output                                      'triak ON / OFF
    
    Config Pinb.0 = Output                                      'triak płynnej regulacji
    
    Config Rc5 = Pind.5
    
    Config Int0 = Rising
    On Int0 Przejscie
    
    Set Portd.2
    
    Config Timer1 = Timer , Prescale = 64
    On Timer1 Triakon
    
    Dim Adres As Byte , Komenda As Byte , Togglebit As Bit
    
    Dim Poziom As Byte
    
    Dim Q As Word
    
    Triak Alias Portb.0
    
    Enable Interrupts
    
    Reset Portd.6
    
    Poziom = 0
    
    Enable Int0
    
    Wait 1
    
    Do
    
       Getrc5(adres , Komenda)
       Togglebit = Komenda.7
       Komenda = Komenda And &B01111111
    
          If Komenda = 1 And Poziom <> 63 Then
          Incr Poziom
          End If
    
          If Komenda = 2 And Poziom <> 0 Then
          Decr Poziom
          End If
    
          If Komenda = 4 Then
          Poziom = 63
          End If
    
          If Komenda = 5 Then
          Poziom = 0
          End If
    
          If Komenda = 7 Then
          Set Portd.6
          End If
    
          If Komenda = 8 Then
          Reset Portd.6
          End If
    
    Loop
    End
    
    Triakon:
    
       Set Triak
       Disable Timer1
    
    Return
    
    Przejscie:
    
       Reset Triak
       Q = Lookup(poziom , Tablica)
       Load Timer1 , Q
       Enable Timer1
    
    Return
    
    Tablica:
    Data 1150% , 1109% , 1076% , 1049% , 1025% , 1002% , 982% , 962% , 944% , 927% , 910% , 894% , 878% , 863%
    Data 848% , 833% , 819% , 805% , 791% , 778% , 765% , 751% , 738% , 726% , 713% , 700% , 687% , 675%
    Data 662% , 650% , 637% , 625% , 613% , 600% , 588% , 575% , 563% , 550% , 537% , 524% , 512% , 499%
    Data 485% , 472% , 459% , 445% , 431% , 417% , 402% , 387% , 372% , 356% , 340% , 232% , 306% , 288%
    Data 268% , 248% , 225% , 201% , 174% , 141% , 100% , 1%
    


    W kodzie przed instrukcją "Do" znajduje się opóźnienie 1 sek gdyż bez tego opóźnienia program startuje od razu zawieszony:cry:

    Co może być przyczyną takiego działania:?:
    Może przepełniający się stos ?

    Proszę o pomoc , bardzo mi zależy na tym ściemniaczu.
  • #2
    piotrva
    VIP Meritorious for electroda.pl
    $regfile = "attiny2313.dat".dat
    ? tu coś nie tak ;-) Ale to chyba nie powód błędów...
    Hmm, jak tak patrzę to trochę zastanawiają mnie komendy:
    
    Disable Timer1 
    Enable Timer1
    

    w przerwaniach...
    Nie analizuję tu całej zasady działania, ale czy nie powinieneś tu używać raczej komend start i stop Timer1 ? Bo wiem na pewno, że tego typu kontrola systemu przerwań w samym przerwaniu często powoduje problemy i zawieszenie się układów przy drobnych błędach logicznych...
  • #3
    pawl091
    Level 9  
    Strzał w dziesiątkę :D
    Wszystko hula bez problemów .

    Dzięki za szybką odpowiedź ;)
    Zamykam temat.