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

[ATMEGA][Bascom] Problem z timerem PCF8583

wicy 04 Maj 2009 18:32 2327 4
  • #1 6489125
    wicy
    Poziom 22  
    Mam problem ze zliczaniem czasu przez timer w układzie PCF8583.
    Na starcie programu ustawiam timer:
    
       I2cstart
       I2cwbyte 162
       I2cwbyte 0                                               'rejestr kontrolny
       I2cwbyte &B00000100                               'alarm aktywny
       I2cstop
    
       I2cstart
       I2cwbyte 162
       I2cwbyte 8                                               'rejestr kontrolny timera
       I2cwbyte &B01000010                               'zapis rejestru alarmu
       'odmierzanie sekund
       ' włączony alarm timera
       I2cstop
    
       I2cstart
       I2cwbyte 162
       I2cwbyte 15                 'rejestr timera
       I2cwbyte 10                 '10 sek do odmierzenia
       I2cstop
    
       I2cstart
       I2cwbyte 162
       I2cwbyte 7                                               'rejestr timera
       I2cwbyte 0                                               'zerowanie rejestru
       I2cstop
    

    W pętli głównej sprawdzam na okrągło bit 0 rejestru 0 układu ( sprawdzam flagę alarmu timera).
    Flaga ustawia się po 99 sekundach, czyli po pełnym przekręceniu licznika w rejestrze x07, czyli układ nie reaguje na zmienną wpisaną do rejestru x0F.
    Chyba że coś robię nie tak, ale co?
  • #3 6491587
    wicy
    Poziom 22  
    Przejrzałem już chyba wszystko na sieci (łącznie z notą oczywiście) i wszędzie podają taki sposób ustawiania timera:
    adres 0 <- 4 (lustawiony bit 3 włącza timer)
    adres 7 <- 0 (zerowanie na wszelki wypadek licznika - tu układ zlicza)
    adres 8 <- B01000010 (konfiguracja timera)
    adres 15 <- 10 (zapis odmierzanych 10ciu sekund)

    Udało mi się zliczyć 10 sek zapisując je bezpośrednio pod adres 7 w postaci 90 (oczywiście w BCD B10010000), ale przecież
    licznik timera powinien pod adresem 7 zliczać do czasu gdy adres 7 będzie równy adres 15. Tak się nie dzieje niestety. Jakby układ nie porównywał tych adresów :(
    Czyżbym źle ustawił adres 8 (konfigurację timera)??
  • Pomocny post
    #4 6492428
    crazy_phisic
    VIP Zasłużony dla elektroda
    wicy napisał:
    ....
    W pętli głównej sprawdzam na okrągło bit 0 rejestru 0 układu ( sprawdzam flagę alarmu timera).
    ....


    "Additionally, a timer alarm can be programmed by setting
    the timer alarm enable (bit6 of the alarm control register).
    When the value of the timer equals a pre-programmed
    value in the alarm timer register (location0F), the alarm
    flag is set ( bit1 of the control/status register). The inverted
    value of the alarm flag can be transferred to the external
    interrupt by enabling the alarm interrupt (bit6 of the alarm
    control register)."

    Może tutaj tkwi błąd ;)
  • #5 6494190
    wicy
    Poziom 22  
    Oczywiście że tak!
    A tyle razy czytałem pdf'a....

    Drugi błąd tkwi w zapisie 10sek do adresu 15. Pamiętałem wszędzie o BCD zapominając, że powinno być nie 10 a 16 (B00010000).

    Czyli reasumując:

    zapis ustawień timera
    adres 0 <- 4 (ustawiony bit 3 włącza timer)
    adres 7 <- 0 (zerowanie na wszelki wypadek licznika - tu układ zlicza sobie impulsy)
    adres 8 <- B11001010 (konfiguracja timera, bity0..3 ustawienie rozdzielczości na sekundy, 011-minuty)
    adres 15 <- B00010000 (zapis odmierzanych 10ciu sekund w kodzie BCD)

    Oczekiwanie na zdarzenie - na przerwanie lub sprawdzenie bitu1 rejestru 0.
REKLAMA