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

Zegar AVR/PCF

Redok 14 Maj 2004 21:06 2448 3
  • #1 14 Maj 2004 21:06
    Redok
    Poziom 13  

    JAk by ktos mial schemat zegarka na AVR wraz z programen...i by udostepnił to bym byl bardzo wdzieczny!!!!!Wielkie dzieki z gory!!1

    0 3
  • #2 14 Maj 2004 22:05
    koval_s
    Poziom 17  

    Podaj więcej szczegułów co do zegarka, ja używam DS1307 i mam go oprogramowanego

    0
  • #3 14 Maj 2004 22:30
    adi-niunio
    Poziom 22  

    podziękuj redakcjii edw bo listingi są ich.

    zakłądam ze urzywasz bascom avr

    inne listingi do pobrania ze strony edw są to programy testowe do oślej łączki z kursu avr


    'C018b Prosty zegar z budzikiem
    Dim Sekundy As Byte , Minuty As Byte , Godziny As Byte , Uniwers As Byte
    Dim Sekjed As Byte , Sekdzies As Byte , Minjed As Byte , Mindzies As Byte
    Dim Godzjed As Byte , Godzdzies As Byte , Mux As Byte , Migaj As Bit , Maxi As Byte
    Dim Godzinyb As Byte , Minutyb As Byte , Trybustawbudzika As Bit , Wlaczeniebudzika As Bit
    Dim Przyciski As Byte , Minut As Byte , Godz As Byte , Klawisz As Byte , Pomoc As Bit
    Dim Dzwiek As Bit , Mux1 As Byte , Blokada As Byte , Blok1 As Bit , Blok As Bit
    Const Powrot = 3 ' czas automatycznego powrotu z trybu ustawiania budzenia
    Config Portb = 255 : Portb = 255 : Config Portd = &B1111100 : Portd = &B1111111
    Config Timer0 = Timer , Prescale = 64 : Config Timer1 = Timer , Prescale = 64
    Enable Interrupts : Enable Timer0 : Enable Timer1 'odblokowanie przerwań
    On Timer0 Co4ms : On Timer1 Co1s 'po przepełnieniu liczników skocz
    Maxi = 100 : Blokada = 10 : Klawisz = 1 : Wlaczeniebudzika = 1 'wartości początkowe
    Godziny = 22 : Minuty = 18 : Godzinyb = 22 : Minutyb = 19 'po minucie pracy włączy alarm

    Do : Loop : End 'to jest główny program - pusta nieskończona pętla

    Co1s: 'co 1 sekundę
    Load Timer1 , 62500 : Incr Sekundy : Toggle Migaj 'standardowe odliczanie 1 sekundy
    If Minuty = Minutyb And Godziny = Godzinyb Then 'przez minutę w porze budzenia
    If Wlaczeniebudzika = 1 Then 'gdy budzik ma dzwonić
    Wlaczeniebudzika = 0 'jednorazowe budzenie
    Dzwiek = 1 'włączenie alarmu
    Blok = 1 'żeby kasowanie alarmu nie zmieniało wskazań zegara
    Blokada = 10 'przyciski zostaną zablokowane na 10s,
    End If 'przez wpisanie "nadmiernego" opóźnienia do zmiennej Uniwers
    Else
    Dzwiek = 0 'zawsze, gdy nie jest pora budzenia
    Blok = 0 'wyłącz dźwięk, zeruj flagę pomocniczą blokady
    End If
    ' przez czas 10 sekund po każdym ręcznym wyłączeniu alarmu przyciski mają być zablokowane
    ' problem w tym, że ten czas 10s może wyjść poza minutę alarmu, dlatego
    ' poniższa procedura nie może być zawarta w poprzedniej:
    If Blok1 = 1 Then 'zablokowanie możliwości zmian czasu




    Uniwers = 255 'przyciski w ogóle nie reagują bo 255*4,096ms= 1,26sekundy
    Decr Blokada ' wcześniej było: Blokada=10
    If Blokada = 0 Then ' więc po 10 sekundach
    Blok = 0 'znów normalna praca przycisków
    Blok1 = 0 'bo za sekundę zostanie ustawiona wartosć Uniwers=40
    End If ' a nie Uniwers=255
    Else 'w czasie, gdy klawisze nie są zablokowane
    Uniwers = 40 'ustawia standardowy czas opóźnienia reakcji przycisku
    If Przyciski = 0 Then 'jeśli naciśnięte oba przyciski S1, S2
    If Trybustawbudzika = 0 Then ' w trybie wskazywania czasu bieżącego
    If Pomoc = 1 Then Trybustawbudzika = 1 'po sekundzie zwłoki przechodzi w tryb
    Pomoc = 1 ' ustawiania budzika
    Else 'w trybie ustawiania czasu budzenia
    Toggle Wlaczeniebudzika 'załącz/wyłącz budzenie
    End If ' co będzie sygnalizowane potem zaświeceniem prawej kropki
    Else
    Pomoc = 0 'gdy nie są przciśnięte S1+S2, zeruje
    End If ' bit pomocniczy opóźnienia o sekundę reakcji sa S1+S2
    End If
    'poniżej procedura automatycznego wychodzenie z trybu ustawiania budzika
    Decr Klawisz 'zmniejsz zawartość licznika Klawisz od Powrot do zera
    If Klawisz = 0 Then Trybustawbudzika = 0 'wychodzi z trybu ustawiania budzika
    Return 'koniec procedury Co1s

    Co4ms: 'obsługa przerwania od T/C0 co 4,096ms
    If Blok = 1 And Dzwiek = 0 Then '4ms po każdym ręcznym wyłączeniu alarmu
    Blok1 = 1 ' blokowana jest możliwość zmian czasu
    Uniwers = 255 'przez wpisanie "nadmiernego" opóźnienia
    End If 'i tak będzie przez 10s - patrz wyżej

    Przyciski = Pind And 3
    Select Case Przyciski
    Case 0: 'naciśnięte oba S1, S2
    Klawisz = Powrot 'każde naciśnięcie dowolnego przycisku odświeża wartość Klawisz
    Dzwiek = 0 'inne procedury zrealizowane w procedurze Co1s

    Case 1: 'naciśnięty tylko S2 - minuty
    Decr Uniwers
    Klawisz = Powrot
    Dzwiek = 0
    If Uniwers = 0 Then
    Uniwers = Maxi : Maxi = Maxi - 8 : If Maxi < 8 Then Maxi = 8 'coraz szybciej
    If Trybustawbudzika = 1 Then 'w trybie ustawiania budzika
    Incr Minutyb 'zwiększ minuty budzenia
    Else ' w trybie zegara
    Incr Minuty : Sekundy = 0 'zwiększ licznik minut i wyzeruj sekundy
    End If
    End If
    Case 2: 'naciśnięty tylko S1 - godziny
    Decr Uniwers
    Klawisz = Powrot
    Dzwiek = 0
    If Uniwers = 0 Then
    Uniwers = Maxi : Maxi = Maxi - 8 : If Maxi < 8 Then Maxi = 8 'coraz szybciej
    If Trybustawbudzika = 1 Then 'w trybie ustawiania budzika
    Incr Godzinyb 'zwiększ godziny budzenia
    Else ' w trybie zegara
    Incr Godziny 'zwiększ licznik godzin
    End If
    End If
    Case 3: ' w spoczynku
    Maxi = 100
    End Select

    ' co 4ms sprawdzamy i korygujemy stany liczników
    If Sekundy = 60 Then 'skróc cykl licznika sekund: 0...59 , itd...
    Sekundy = 0 : Incr Minuty
    End If 'tym razem nie zagnieżdzamy procedur sprawdzania,
    If Minuty = 60 Then ' - zagnieżdżenie spowodowałoby błędy podczas
    Minuty = 0 : Incr Godziny ' ustawiania zegara
    End If '
    If Godziny = 24 Then '
    Godziny = 0
    End If
    If Minutyb = 60 Then ' - zagnieżdżenie spowodowałoby błędy podczas
    Minutyb = 0 : Incr Godzinyb ' ustawiania zegara
    End If '
    If Godzinyb = 24 Then '
    Godzinyb = 0
    End If

    Incr Mux 'obsługa wyświetlaczy jest teraz bardziej skomplikowana:
    If Trybustawbudzika = 1 Then 'w trybie budzenia
    Minut = Minutyb 'do zmiennych pomocniczych Minut i Godz
    Godz = Godzinyb 'wpisujemy rzecz jasna czas budzenia
    Mux = Mux And &B111 'w efekcie liczy 0...7
    Else 'przy normalnej pracy
    Minut = Minuty 'będzie wyświetlony czas bieżący
    Godz = Godziny
    Mux = Mux And &B11 'w efekcie liczy 0...3
    End If
    'teraz zamieniamy liczby dwójkowe na BCD
    Mindzies = Makebcd(minut) 'zamieniamy liczbę dwójkową na BCD
    Minjed = Mindzies And 15 'przez polecenie AND i maskę &B00001111 = 15
    'uzyskujemy tylko cztery młodsze bity, czyli jednostki minut
    Shift Mindzies , Right , 4 'przesuwając w prawo usuwany 4 młodsze bity
    'pozostają dziesiątki minut w czterech młodszych bitach
    'a w czterech starszych są zera - tak przecież działa polecenie SHIFT
    Godzdzies = Makebcd(godz) 'zamieniamy liczbę dwójkową na BCD
    Godzjed = Godzdzies And 15 'uzyskujemy tylko cztery młodsze bity - jednostki
    Shift Godzdzies , Right , 4 'przesuwając w prawo usuwany 4 młodsze bity
    'teraz wyświetlamy jedną cyfrę na wyświetlaczu:
    Portd = &B1111111 'wygaś wszystko
    Select Case Mux ' obsługa wyświetlacza
    Case 0: 'wyświetl zawartość licznika jednostek minut
    Portb = Lookup(minjed , Tabela) : Portd.3 = 0 : Portb.7 = Not Wlaczeniebudzika
    Case 1: 'wyświetl zawartość licznika dziesiątek minut
    Portb = Lookup(mindzies , Tabela) : Portd.4 = 0
    Case 2: 'wyświetl zawartość licznika jednostek godzin
    Portb = Lookup(godzjed , Tabela) : Portd.5 = 0 : Portb.7 = Migaj 'ew. włącz punkt dziesiętny
    Case 3: 'wyświetl zawartość licznika dziesiatek godzin
    Portb = Lookup(godzdzies , Tabela) : Portd.6 = 0
    End Select

    If Dzwiek = 1 Then Portd.2 = Migaj 'i daje przerywany sygnał dźwiękowy

    Return 'koniec obsługi przerwania od T/C0 co 4,096ms

    Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144

    0
  • #4 14 Maj 2004 22:56
    Redok
    Poziom 13  

    a jakis schemat do tego???chodzi mi o zegarek na pCF-ce

    0