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

Stoper z oślej łączki nie działa poprawnie

młody88 18 Sty 2012 01:43 1405 3
  • #1 18 Sty 2012 01:43
    młody88
    Poziom 19  

    Witam
    jestem początkujący w programowaniu i mam taki problem, że po załadowaniu pliku
    na przykład prosty stoper:


    Code:
    [syntax=basic4gl][/syntax]'C013a     Bardzo prosty zegar bez możliwości ustawiania
    
    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
    Config Portb = 255 : Portb = &B255 : Config Portd = &B1111100 : Portd = &B1111111
    Config Timer0 = Timer , Prescale = 64 : Config Timer1 = Timer , Prescale = 64
    Enable Interrupts : Enable Timer0 : Enable Timer1
    On Timer0 Co4ms             'po przepełnieniu licznika T/C0 skocz do etykiety o nazwie Co4ms
    On Timer1 Co1s              'po przepełnieniu licznika T/C1 skocz do etykiety o nazwie Co1s
    Sekjed = 6 : Sekdzies = 5 : Minjed = 9 : Mindzies = 5 : Godzjed = 3 : Godzdzies = 2

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

    Co4ms:                      ' obsługa wyświetlaczy co 4,096ms
    Incr Mux : If Mux = 4 Then Mux = 0 : Portd = &B1111111
    Select Case Mux             ' obsługa wyświetlacza
    Case 0:                     'wyświetl zawartość licznika jednostek minut
       Portb = Lookup(minjed , Tabela) : Portd.3 = 0
    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
    Case 3:                     'wyświetl zawartość licznika dziesiatek godzin
       Portb = Lookup(godzdzies , Tabela) : Portd.6 = 0
    End Select : Return         'koniec obsługi przerwania od T/C0

    Co1s:                       'co 1 sekundę zliczanie czasu
    Timer1 = 3036               'załaduj do Timera1, żeby zliczył 62500 (=65535-3036)impulsów =1s
    Incr Sekjed : Toggle Migaj  'dodatkowo z częsotliwością 0,5Hz będzie migać środkowa kropka
    If Sekjed = 10 Then         'skróc cykl licznika Sekjed do 0...9
       Sekjed = 0               '




       Incr Sekdzies            'co 0,1s zwiększ stan licznika dziesiatych części sekundy
       If Sekdzies = 6 Then     'ten licznik liczy 0...5
          Sekdzies = 0          'bo minuta ma 60 sekund
          Incr Minjed           'co 1 minutę
          If Minjed = 10 Then   'liczy 0...9
             Minjed = 0
             Incr Mindzies      'zwiększ stan licznika dziesiatek sekund
             If Mindzies = 6 Then       'liczy do 6 bo minuta ma 60 sekund
                Mindzies = 0
                Incr Godzjed    'co 60 minut zwiększ stan licznika godzin
                If Godzjed = 10 Then
                   Godzjed = 0  '0...9 godzin
                   Incr Godzdzies       'co 10 godzin
    End If : End If : End If : End If : End If
    'co sekundę sprawdzamy, czy akurat nie jest północ i ew. skracamy cykl
    If Godzdzies = 2 And Godzjed = 4 Then
       Godzdzies = 0 : Godzjed = 0
    End If : Return             'koniec procedury obsługi przerwania od T/C1

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


    wszystko działa ok poza częstotliwością działania zegara i tu właśnie zgubiłem się jak dziecko we mgle.

    Mój stoper działa zdecydowanie za szybko !!

    Pierwotnie programowałem układ na podstawie Atmega8 i wszystkie programy działały bez problemu aż doszedłem do stopera który działa za szybko myślałem że to wina nieodpowiedniego procka więc dziś kupiłem attiny2313 rzekomo bliźniaczy do użytego w kursie M.O.Ł. procka 90s2313 przebudowałem układ pod attiny2313 a problem nadal pozostaje.

    Kolejny problem to kwarc który zastosowałem 4MHz taki jak w płytce z kursu po co on w ogóle jest skoro po odłączeniu go od układu wszystko działa bez zmian

    Układ mam złożony na płytce stykowej

    Jeżeli ktoś będzie w stanie rozjaśnić mi temat będę wdzięczny

    0 3
  • Deimic One - Szkolenia
  • Pomocny post
    #2 18 Sty 2012 08:59
    korrus666
    Poziom 40  

    A wystarczy poczytać notę katalogową żeby się dowiedzieć czemu procesor działa bez rezonatora kwarcowego. Atmega8 jak i Attiny2313 posiadają wewnętrzny oscylator który pozwala na pracę bez zewnętrznego rezonatora. To z jaką częstotliwością działa procesor ustawia się w tzw fusebitach.

    0
  • Deimic One - Szkolenia
  • #3 18 Sty 2012 11:35
    młody88
    Poziom 19  

    ok a czy jest możliwość ustawienia aby mikro kontroler pobierał częstotliwość z zewnętrznego rezonatora??
    Jak to zrobić??

    0