Elektroda.pl
Elektroda.pl
X
Deimic Smart Home
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Mikroprocesorowy sterownik lampek choinkowych

Nec_ 17 Lis 2008 21:08 4829 2
  • #1 17 Lis 2008 21:08
    Nec_
    Poziom 11  

    Witam

    Mam problem z sterownikiem do lampek choinkowych, układ powstał w oparciu o kit AVT2770. Jest sterowany uKontrolerem AT89C2051. Problem w tym. że P1.0 uKontrolera powinien sterować optotriakiem (podawać stan niski) jednak nie steruje. Przy wyciągnietym uK z podstawki i zwarciu końcówki P1.0 do masy lampki się zapalają. Program napisany w Bacomie ściągnąłem z ELPORTALU, uK zaprogramowany prawidłowo, czy któryś z kolegów składał ten kit i mógłby potwierdzić jego działanie ? Proszę o pomoc.

    Schemat układu
    Mikroprocesorowy sterownik lampek choinkowych

    I listing programu

    Code:

    Dim Tryb As Byte                                              'zmienna od wyboru trybu
    Dim Godziny As Byte                                           'zmienna od wyboru godzin
    Dim G As Byte                                                 'zmienna do godzin
    Dim Y As Byte                                                 'zmienna pomocnicza do godzin i do trybu
    Dim T As Byte                                                 'zmienna do wyboru trybu
    Dim M As Byte                                                 'zmienna od sprawdzania czy jest jasno
    Dim J As Byte                                                 'zmienna od sprawdzania czy jest ciemno
    Dim Pro As Bit                                                'glowna zmienna wchodzenia w program
    Dim Cas As Byte                                               'do wyboru petli case
    Dim L As Bit                                                  'zmiena negacji lampek w trybie drugim.negacja portu




    Dim A As Bit                                                  'zmiena do tybu drugiego, do negacji portu.przypisanie wartosci portu
    Dim S As Byte                                                 'zmienna do wyliczania czasu
    Dim W As Byte
    Dim P As Bit                                                  'zmienna pomocnicza sprawdzania oswietlenia
    Dim K As Bit
    Dim X As Byte                                                 'pierwsze uruchomienie czy ciemno

     T = 1                                                        'ustawienie trybu1 podczas uruchomienia
     X = 3
     Y = 1                                                        'zmienna pomocnicza do zliczania przy_czas
     G = 1                                                        'ustawienie 1godziny podczas uruchomienia
     S = 1                                                        'tryb trzeci zmienna wyboru czas uswiecenia
     P = 0
     K = 1
     M = 0
     J = 0
       Set P1.0                                                   'wyjscie ukladu. sterowanie optotriakiem-za pomoca stanu niskiego aktywnego
       A = P1.0
     Czujnik Alias P3.2
     Do
      Set P3.0                                                    'ustawienie wejscia zmiany godzin pracy
      Godziny = P3.0
      Set P3.1                                                    'ustawienie wejscia zmiany trybu
      Tryb = P3.1
      If Godziny = 0 Then
      Waitms 25                                                   'eliminacja drgan styków

     If Godziny = 0 Then                                          'jezeli na cisnieto przycisk to wykonaj warunek
     G = G + Y                                                    'dodaj do zmiennej g wartosc jeden
      Reset P1.0                                                  'zapal lampki
      Waitms 255                                                  'czekaj
      Set P1.0                                                    'zgas lampki
       If G = 11 Then                                             'jezeli spelniony warunek-przycisk nacisnieto 11 razy
       G = 1                                                      'zeruj zmienna g.blokada zliczania powyzej zakresu
       Waitms 255                                                 'przypisanie do zmiennej g jednej godziny
       Reset P1.0                                                 'Wizualiazacja przekroczenia zakresu godzin.zapal lampki
       Waitms 255                                                 'czekaj
       Set P1.0                                                   'zgas lampki
       Reset P1.0
       Waitms 255
       Set P1.0
       End If
     End If
     End If
         
     If Tryb = 0 Then
          Waitms 25                                               'eliminacja drgan stykow
          If Tryb = 0 Then                                        'jezeli nacisnieto przycisk tryb to wykonaj warunek
          T = T + Y                                               'dodaj do zmiennej t wartosc jeden
             Reset P1.0
             Waitms 255
             Set P1.0
             If T = 4 Then                                        'jezeli nacisnieto przycisk tryb 4 razy to
             T = 1                                                'zeruj zmienna tryb
             Waitms 255                                           'ustaw automatycznie w tryb 1
             Reset P1.0
             Waitms 255
             Set P1.0
             Reset P1.0
             Waitms 255
             Set P1.0
             End If
          End If
          End If

    If P = 1 Then                                                 'jezeli spelniony jest warunek wejdz w glowny podprogram sprawdzania
      Gosub Jasno                                                 'sekwencji oświetlenia
    End If

    If X = 2 Then                                                 'jezeli spelniony warunek wlacz glowna petle i zeruj zmienne pomocnicze
       P = 0
       M = 0
       X = 0
       J = 0
       Pro = 1
    End If

      If K = 1 Then
       If Czujnik = 0 Then
       Wait 2
       End If
      If Czujnik = 0 Then
       Pro = 1
       K = 0
       End If
      End If
     

    If Pro = 1 Then
      'wykonanie glownego programu odmierzania czasu i wyboru trybu pracy
     Select Case G
     Case 1:
          For W = 1 To 14                                         '14 razy wykonaj ponizsza petle czasowa
          For Cas = 1 To 255                                      ' 255petla odmierzania czasu-tu jedna godzina
          Select Case T                                           'instrukcja wyboru trybu pracy
          Case 1 : Gosub Tryb1                                    'tryb1
          Case 2 : Gosub Tryb2                                    'tryb 2
          Case 3 : Gosub Tryb3                                    'tryb3
          End Select                                              'wyjscie z wyboru trybu
          Wait 1                                                  'czekaj jedna sekunde.do odmierzania czasu
          Next Cas
          Next W                                                  'wyjscie z petli czasowej
     Case 2:
          For W = 1 To 28
          For Cas = 1 To 255
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 3:
          For W = 1 To 42
          For Cas = 1 To 255
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 4:
          For W = 1 To 56
          For Cas = 1 To 255
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 5:
          For W = 1 To 70
          For Cas = 1 To 255
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 6:
          For W = 1 To 84
          For Cas = 1 To 255
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 7:
          For W = 1 To 100
          For Cas = 1 To 25200
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 8:
          For W = 1 To 112
          For Cas = 1 To 28800
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 9:
          For W = 1 To 127
          For Cas = 1 To 32400
          Select Case T
          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     Case 10:
          For W = 1 To 141
          For Cas = 1 To 36000
          Select Case T

          Case 1 : Gosub Tryb1
          Case 2 : Gosub Tryb2
          Case 3 : Gosub Tryb3
          End Select
          Wait 1
          Next Cas
          Next W
     End Select                                                   'wyjscie z trybu wyboru godzin
     Set P1.0
     Wait 3
     Pro = 0                                                      'zatrzymanie warunku wejscia w glowna petle.wejscie mozliwe dopiero po spelnieniu warunkow
     P = 1                                                        'ustaw zmienna sprawdzania sekwencji oswietleniowej
          End If
      X = 0                                                       'zeruj zmienna blokuje niekotrolowany przysrost zmiennej
      Loop


         Tryb1:                                                   'podprogram trybu pierwszego
       Reset P1.0                                                 'lampki caly czas zapalone
       Return
       Tryb2:
       L = Not A                                                  'podprogram trybu drugiego
        P1 = L                                                    'neguj i wyslij do portu p1 wartosc zmiennej a
       A = L                                                      'przypisz zmiennej a wartosc l-z negacji
       Return
       Tryb3:                                                     'podprogram trybu trzeciego
       If S < 5 Then                                              'jezeli zmienna s mniejsza od 5 to pal lampke przez 5 sekund
       Reset P1.0
       End If
          If S > 5 And S < 12 Then                                'jezeli zmienna s wieksza od 5  i mniejsza  od 12 to
          L = Not A                                               'migaj.neguj zmienna a do czasu spelnienia warunku
          P1 = L
          A = L
          End If
       If S = 11 Then                                             'jezeli zmienna s=11 to wyzeruj ja i od nowa
       S = 0
       End If
       S = S + Y                                                  'wyliczanie zmiennej s
       Return


    Jasno:                                                        'glowny podprogram sprawdzania sekwencji oswietleniowej
       If Czujnik = 1 Then                                        'jezeli jest jasno czekaj i ustaw zmienna j
        For W = 1 To 2                                            'zmienna ta stwierdza ze bylo jasno
        Wait 255                                                  'odmierzanie czasu sluzy do eliminacji przypadkowego oswietlenia
        Next W
       If Czujnik = 1 Then
          J = 1
         End If
       End If
     If Czujnik = 0 Then                                          'jezeli jest ciemno skocz do podprogramu ciemno
     Wait 1
     If Czujnik = 0 Then
       Gosub Ciemno
     End If
     End If
    Return
    Ciemno:                                                       'jezeli bylo jasno i jest teraz ciemno wykonaj glowny program
       If Czujnik = 0 Then
       M = 1
       X = M + J
       J = 0
       End If
    Return

     End


    Następnym razem, listingi programów proszę umieszczać między znacznikami [code]
    [zumek]


    EDIT:
    Problem już rozwiązałem, okazało się że to kolejny kit AVT posiadający błędy. Na schemacie ideowym i spisie elementów podano kwarc 11MHz, program został napisany w Bascomie, którego kompilator nie ma możliwości wybrania wartości takiego kwarcu, jest tylko 11,059Mhz (Bascom 8051 Demo).
    Po wymianie kwarcu na 12MHz ponownym skompilowaniu dla tej wartości i zaprogramowaniu układ działa :)

    0 2
  • Deimic Smart Home
  • #2 18 Lis 2008 21:07
    zumek
    Poziom 39  

    Nec_ napisał:
    ... kompilator nie ma możliwości wybrania wartości takiego kwarcu, jest tylko 11,059Mhz (Bascom 8051 Demo).

    A o dyrektywie $crystal = , to kolega nie słyszał :?:
    Nec_ napisał:

    Po wymianie kwarcu na 12MHz ponownym skompilowaniu dla tej wartości i zaprogramowaniu układ działa :)

    No to się niepotrzebnie wykosztowałeś :-P

    0
  • Deimic Smart Home
  • #3 18 Lis 2008 21:27
    Nec_
    Poziom 11  

    Ano nie słyszał, nie znam Bascoma, pierwszy raz miałem do czynienia, układ wybrałem bo Święta idą i był mi potrzebny do choinki na dworze :D

    Może i wykosztował ale jaka satysfakcja jak to miga :P

    0