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

Regulator fazy, wyświetlacz LED, [Attiny2313][BASCOM]

dreslak 02 Lut 2011 09:38 1224 0
REKLAMA
  • #1 9090954
    dreslak
    Poziom 17  
    Witam
    Przyszedł czas wolny więc zabrałem się za zgłębienie nauki Bascoma, celem było nauczenie się Tablic. Jako przykładowe i zarazem przydatne mi urządzenie chciałem złożyć regulator fazy z podwójnym wyświetlaczem siedmiosegmentowym LED.
    Schemat jako taki na razie nie powstał, wszystko jest na płytce stykowej. Udało mi się "ogarnąć" wyświetlacz, lecz regulacja fazowa kuleje na obie nogi. Jako odbiornik podłączyłem zwykłą żarówkę 100W. Detekcja zera odbywa się na dwóch cny17 i sprawdzając diodą led ( nie mam innej możliwości) to działa dioda odłączona w jednym kierunku świeci jaśniej w drugim ledwo widać żę świeci. Układem wykonawczym jest moc3051 i bt138. Układ wykonawczy też działa poprawnie. Te dwa elementy żywcem skopiowałem z mojego poprzedniego regulatora na attiny13.
    Tak jak pisałem nie działa mi regulacja fazowa, żarówka po podłączeniu zachowuje się jak chce albo świeci w 100% albo w0 % czasami po próbie regulacji dziwnie zaczyna migać i nie da się dalej nic regulować, procesor się jakby "zawiesza". Poniżej przedstawiam cały program:
    '************* Konfiguracja uC *****************
    '***********************************************
    $regfile = "attiny2313.dat"
    $crystal = 16000000
    
    Config Portb = &B11111111 : Portb = &B00000000
    Config Pind.0 = Input
    Config Pind.1 = Input
    
    Portd.0 = 1
    Portd.1 = 1
    
    Config Portd.3 = Output
    Config Portd.4 = Output
    Config Portd.5 = Output
    
    Sj Alias Portd.4
    Sd Alias Portd.5
    
    
    
    Dim W As Byte
    Dim D As Byte
    Dim J As Byte
    Dim X As Byte
    Dim Licz As Long
    Dim Flaga As Bit
    
    
    
    Config Timer1 = Timer , Prescale = 1024
    Enable Timer1
    Stop Timer1
    Enable Interrupts
    On Timer1 Timp
    
    Config Int0 = Rising
    Enable Int0
    Enable Interrupts
    On Int0 Zero
    
    
    
    
    Licz = 0
    
    
    W = 50
    
    'Pętla główna
    
    Do
    
    If Pind.0 = 0 Or Pind.1 = 0 Then
       Licz = Licz + 1
          If Licz = 1000 Then
          Flaga = 1
          End If
    
          If W = 0 And Pind.0 = 0 And Flaga = 1 Then
          W = 99
          End If
    
          If Pind.1 = 0 And Flaga = 1 Then
          W = W + 1
          Flaga = 0
          End If
    
          If Pind.0 = 0 And Flaga = 1 Then
          W = W - 1
          Flaga = 0
          End If
    
          If W = 101 Then
          W = 0
          End If
    
    
    
          If Licz = 1000 Then
          Licz = 0
          End If
    
    
    End If
    
    
    Gosub Wyswietlanie
    
    
    Loop
    
    
    Wyswietlanie:
    
    
    
    
    J = W Mod 10
    Sj = 0
    Portb = Lookup(j , Tabela)
    Waitus 10
    Sj = 1
    
    D = W / 10
    Sd = 0
    Portb = Lookup(d , Tabela)
    Waitus 10
    Sd = 1
    
    Return
    
    'przerwanie timer 0 o nazwie Timp
    Timp:
      Portd.3 = 1
      Stop Timer1
      Return
    'przerwanie int0 o nazwie Zero
    Zero:
      Portd.3 = 0
      X = Lookup(w , Moc)
      Load Timer1 , X
      Start Timer1
    
    
    
    
    
    
    
    
    
    
    
    ' tabela cyfr na wyswietlaczu LED
    Tabela:
       Data 111 , 9 , 115 , 59 , 29 , 62 , 126 , 11 , 127 , 63
       '      0    1    2    3    4    5    6     7    8    9
    'Podzial mocy na 100 kroków
    Moc:
       Data 146 , 142 , 139 , 136 , 134 , 132 , 130 , 128 , 126 , 124
       Data 123 , 121 , 120 , 118 , 117 , 115 , 114 , 113 , 111 , 110
       Data 109 , 108 , 106 , 105 , 104 , 103 , 102 , 101 , 100 , 99
       Data 98 , 96 , 95 , 94 , 93 , 92 , 91 , 90 , 89 , 88
       Data 87 , 86 , 85 , 84 , 83 , 82 , 81 , 80 , 79 , 78
       Data 77 , 76 , 75 , 74 , 73 , 72 , 71 , 70 , 69 , 68
       Data 67 , 66 , 65 , 64 , 63 , 62 , 61 , 60 , 59 , 58
       Data 57 , 55 , 54 , 53 , 52 , 51 , 50 , 49 , 47 , 46
       Data 45 , 44 , 42 , 41 , 40 , 38 , 37 , 35 , 34 , 32
       Data 30 , 29 , 27 , 25 , 22 , 20 , 17 , 14 , 10 , 0


    proszę o szczególne zwrócenie uwagi na tabele, ponieważ używam ich pierwszy raz.

    Pozdrawiam
  • REKLAMA
REKLAMA