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

Czasowy sterownik przekaźnika-program nie działa[BASCOM]

lyszczurfs 05 Sty 2012 22:46 2129 4
  • #1 10354222
    lyszczurfs
    Poziom 10  
    Witam. Jestem początkujący w dziedzinie mikrokontrolerów. Chciałem zrobić czasowy sterownik przekaźnika. Z podłączeniem elementów nie miałem problemów. Jednak program nie spełnia moich oczekiwań. Urządzenie ma włączać tranzystor sprzężony z przekaźnikiem o danej godzinie. Pod mikrokontroler podłączony jest rezonator zegarowy wraz z kondensatorami pod piny TOSC1&2. Fusy też ustawione na rezonator zewnętrzny. Oto kod który jest króciutki ponieważ zależy mi na zrozumieniu samej ideii sterowania w ten sposób:

    
    $regfile = "m8def.dat"                                      'dyrektywa dla atmega8
    $crystal = 8000000                                          'określona częstotliwość
    
    Config Clock = Soft                                         'konfiguracja RTC
    
    Time$ = "20:58:00"                                          'ustawienie bieżącego czasu
    
    
    Config Portd.0 = Output
    
    Przek1 Alias Portd.0
    
    Do
    If _hour = "21" And _min = "00" And _sec = "00" Then
    Przek1 = 1
    End If
    
    Loop
    End
    
  • #2 10354524
    ^Rachel
    Poziom 21  
    Mówisz że podłączyłeś rezonator pod te piny, jaki ? 32 kHz ? czy 8MHz?
  • #3 10355559
    lyszczurfs
    Poziom 10  
    Tak podłączyłem rezonator KWARCOWY 32.768kHz wraz z ceramikami 22pF.
  • Pomocny post
    #4 10356346
    Zbyszek_64
    Poziom 24  
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Na początek możesz poeksperymetować kodem ,który zamieszczam poniżej.
    Na podstawie tego kodu mam pracujące urządzenie.Dodatkowo uzupełniłem kod o ustawienie godzin , mimut i dni. Program załącza niezależnie 4 wyjścia.Pozdrawiam
    Fusebit A997 ustawiony na oscylator wewnętrzny 8Mhz , 0100
    
    $regfile = "m8def.dat"                                      ' DYREKTYWY DLA KOMPILATORA
    $crystal = 8000000                                          'OSCYLATOR 8MHZ
    Config Lcd = 16 * 2                                         'KONFIGURACJA TYPU WYSWIETLACZA
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.6 , E = Portd.1 , Rs = Portd.0       'LCD
    Config Clock = Soft                                         'KONFIGURACJA ZEGARA RTC
    Config Date = Dmy , Separator = .                           'KONFIGURACJA SPOSOBU FORMATOWANIA DATY
    Config Pinc.3 = Output                                      'LINIA PC3 JAKO WYJŚCIE
    Set Portc.3                                                 'DOŁĄCZENIE DO LINI PC3 REZYSTORA PODCIĄGAJĄCEGO
    Config Pinc.2 = Output                                      'LINIA PC2 JAKO WYJŚCIE
    Set Portc.2                                                 'J.W
    Config Pinc.1 = Output                                      'LINIA PC1 JAKO WYJŚCIE
    Set Portc.1                                                 'J.W
    Config Pinc.0 = Output                                      'LINIA PC0 JAKO WYJŚCIE
    Set Portc.0                                                 'JW
    Config Pinb.4 = Input                                       'LINIA PB4 JAKO WEJŚCIE
    Config Pinb.2 = Input                                       'LINIA PB2 JAKO WEJŚCIE
    Config Pinb.1 = Input
    
    Config Pinb.0 = Input                                       'wolna linia
    Config Pind.7 = Input                                       'wolna linia
    Config Pinc.5 = Input                                       'wolna linia
    Config Pinc.4 = Input                                       'wolna linia
    Config Pind.5 = Input                                       'wolna linia
    
    
     S1 Alias Pinb.4                                            'przypisanie nazwie Pinb.4 nazwy S1
     S2 Alias Pinb.2                                            ' przypisanie nazwie Pinb.2 nazwy S2
     S3 Alias Pinb.1
    
    
     Set Portb.4                                                'dołączenie do linii PB4 rezystora podciągającego
     Set Portb.2                                                'dołączenie do linii PB2 rezystora podciągającego
     Set Portb.1
     Set Portb.3
     Set Portb.0
     Set Portb.7
     Set Portb.5
     Set Portb.4
     Set Portb.5
    
     Enable Interrupts                                          'zezwalaj na przerwania
     Date$ = "01.00.00"                                         'OD TEJ DATY LICZY WPRZÓD
     Time$ = "23.59.00"                                         'POCZĄTKOWY CZAS PO WŁĄCZENIU STEROWNIKA
      Cls
    Cursor Off
    Lcd "PROJEKT-XI2010"
    Lowerline
    Lcd "ZBYSZEK"
    Wait 3
    Cls
    
     Do                                                         'PĘTLA GŁÓWNA
    
    
    
    
     If S1 = 0 Then                                             ' zmiana minut
     Incr _min
     If _min = 60 Then
     _min = 0
     End If
     End If
    
     If S2 = 0 Then                                             'zmiana godzin
     Incr _hour
     If _hour = 24 Then
     _hour = 0
     End If
     End If
    
     If S3 = 0 Then                                             'zmiana dni
     Incr _day
     If _day = 31 Then
     _day = 0
     End If
     End If
     Cls                                                        'CZYŚĆ LCD
    
    
    
     Lcd Time$                                                  'POBIERZ AKTUALNY CZAS
     Locate 1 , 10                                              'W PIERWSZEJ LINII NA 10 MIEJSCU NAPISZ..
     Lcd "GODZINA"
     Lowerline                                                  'W DRUGIEJ LINII
     Lcd Date$                                                  'POBIERZ AKTUALNĄ DATĘ
    
     If Portc.0 = 0 Then                                        'JEŚLI PORTC.0 JEST NA NISKIM POZIOMIE
     Lowerline                                                  'W DRUGIEJ LINII
     Locate 2 , 10                                              'NA 10 MIEJSCU
     Lcd "PK1"                                                  'NAPISZ PK1
     End If                                                     'KONIEC PROCEDURY
    
     If Portc.1 = 0 Then
     Lowerline
     Locate 2 , 10
     Lcd "PK2"                                                  'NAPISZ..
     End If
    
    
     If Portc.2 = 0 Then
     Lowerline
     Locate 2 , 10
     Lcd "PK3"                                                  'NAPISZ..
     End If
    
     If Portc.3 = 0 Then
     Lowerline
     Locate 2 , 10
     Lcd "PK4"                                                  'NAPISZ..
     End If
    
     Waitms 100                                                 'ODCZEKAJ CHWILĘ
    
    
    
    
    
    
    
     If _hour = 0 Then                                          'PO WŁĄCZECZENIU STEROWNIKA O 0 GODZ
     If _min = 0 Then                                           '0 MINUCIE
     If _sec = 0 Then                                           '0 SEKUNDZIE
     Reset Portc.0                                              'WŁĄCZ PORTC.3
     Else                                                       'W PRZECIWNYM RAZIE
     If Pinc.3 = 0 Then                                         'JEŻELI PORTC3 MA NISKI POZIOM TO:
     If _hour = 0 Then
     If _min = 0 Then                                           'PO 3 SEKUNDZIE
     If _sec = 3 Then
     Set Portc.0                                                 'WYŁĄCZ PORTC.1
     End If
     End If
     End If                                                       'ZAKOŃCZENIE WARUNKÓW
     End If
     End If
     End If
     End If
    
    
    
     If _hour = 0 Then
     If _min = 1 Then
     If _sec = 0 Then
     Reset Portc.1
     Else
     If Pinc.1 = 0 Then
     If _hour = 0 Then
     If _min = 1 Then
     If _sec = 30 Then
     Set Portc.1
     End If
     End If
     End If
     End If
     End If
     End If
     End If
     If _hour = 1 Then                                          'PO 0 GODZINIE
     If _min = 2 Then                                           'PO 1MINUCIE
    
     If _hour = 0 Then                                          'PO WŁĄCZECZENIU STEROWNIKA O 0 GODZ.
     If _min = 2 Then                                           '1 MINUCIE
     If _sec = 0 Then                                           '0 SEKUNDZIE
     Reset Portc.2                                              'WŁĄCZ PORTC.1
     Else                                                       'W PRZECIWNYM RAZIE
     If Pinc.2 = 0 Then                                         'JEŻELI PORTC.1 MA NISKI POZIOM TO:
     If _sec = 30 Then                                          'PO 30 SEKUNDZIE
     Set Portc.2                                                'WYŁĄCZ PORTC.1
     End If                                                     'ZAKOŃCZENIE WARUNKÓW IF
     End If
     End If
     End If
     End If
     End If
     End If
    
    
    
     If _hour = 0 Then
     If _min = 3 Then
     If _sec = 0 Then
     Reset Portc.3
     Else
     If Pinc.3 = 0 Then
     If _hour = 0 Then
     If _min = 3 Then
     If _sec = 33 Then
     Set Portc.3
     End If
     End If
     End If
     End If
     End If
     End If
     End If
    
    
    
    
     Loop
     End
  • #5 10357168
    lyszczurfs
    Poziom 10  
    Dziękuje za pomoc Zbyszek_64. Problem leżał po stronie nie dopisania linijki kodu:
    Enable Interrupts 'obsługa przerwań 

    Przed chwilą znalazłem to w książce pana M.Wiązani i przeanalizowałem z powyższym kodem.
REKLAMA