PCF8583 i przerwanie

Dyskusje ogólne na temat "cyfrówki" czyli wszystko o TTL/CMOS, językach VHDL i VERILOG, bramkach, rejestrach, przerzutnikach... Dobre miejsce na pytania odnośnie uniwersalnych programatorów (np. Willem) a także podłączania własnych peryferiów do komputera PC.
ODPOWIEDZ
Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

PCF8583 i przerwanie

Post autor: mr_x » 12 kwie 2012, 3:58

Do tej pory używałem układu PCF8583 w roli samego zegara i wszystko było ok. Ostatnio postanowiłem dobudować alarm i tu się zaczęły schody. Mianowicie byłem przekonany, że po uaktywnieniu alarmu przerwania będą nadal generowane co sekundę, a okazuje się, że nie i teraz przerwanie generowane jest w momencie nadejścia alarmu. Czy może da się jakoś zmusić ten układ, by pomimo uaktywnienia alarmu (ustawiony bit 2 w rejestrze kontrolnym) nadal były generowane przerwania co sekundę? Jeśli nie, będę musiał zmienić zupełnie ideę zegara, która do tej pory działała właśnie na odczycie czasu w cosekundowych przerwaniach.

Awatar użytkownika
dondu
Użytkownik
Posty: 211
Rejestracja: 24 maja 2005, 9:47
Lokalizacja: Śląskie
Kontakt:

Post autor: dondu » 12 kwie 2012, 7:34

Pierwszą czynnością Twojego programu po wywołaniu alarmu powinno być ... ustawienie nowego alarmu :)

Zobacz także uwagę do Figure 12:
(1) If the alarm enable bit of the control and status register is reset (logic 0), a 1 Hz signal is observed on the interrupt pin INT.
co jest opisane:
7.9 Interrupt output

The conditions for activating the output INT (active LOW) are determined by appropriate
programming of the alarm control register. These conditions are clock alarm, timer alarm,
timer overflow, and event counter alarm. An interrupt occurs when the alarm flag or the
timer flag is set, and the corresponding interrupt is enabled. In all events, the interrupt is
cleared only by software resetting of the flag which initiated the interrupt.

In the clock mode, if the alarm enable is not activated (alarm enable bit of the control and status register is logic 0), the interrupt output toggles at 1 Hz with a 50 % duty cycle (may be used for calibration). This is the default power-on state of the device. The OFF voltage of the interrupt output may exceed the supply voltage,

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 12 kwie 2012, 7:44

To nie zmienia faktu, że przerwania są generowane w zależności od trybu pracy. Bez alarmu na wyjściu INT są impulsy 1Hz, z alarmem nie ma ich w ogóle, jedyna opcja przerwania to pojawienie się alarmu, co znalazłem w sumie po dogłębnej analizie datasheet
In the clock mode, if the alarm enable is not activated (alarm enable bit of the control and
status register is logic 0), the interrupt output toggles at 1 Hz with a 50 % duty cycle [...]
Cóż, będę musiał w takim razie sprawdzać godzinę w inny sposób, ale już na pewno nie w przerwaniu INT.

EDIT
Ubiegłeś mnie z tym cytatem :)

Awatar użytkownika
dondu
Użytkownik
Posty: 211
Rejestracja: 24 maja 2005, 9:47
Lokalizacja: Śląskie
Kontakt:

Post autor: dondu » 12 kwie 2012, 7:52

Nie wiem jaką funkcjonalność potrzebujesz, ale jeżeli to ma być na zasadzie:
1. czekaj na określoną godzinę i wywołaj alarm,
2. po wywołaniu alarmu generuj przerwania co 1 sekundę,
to wystarczy (chyba) w pierwszym przerwaniu (od ustawionej godziny) wyłączyć alarm by mieć przerwania co 1 sekundę.

Poza tym zawsze możesz zastosować to co napisałem na początku pierwszego postu.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 12 kwie 2012, 8:02

Mnie przerwania co sekundę były potrzebne, bo poza alarmem w ten sposób odczytywałem godzinę i ją wyświetlałem (łącznie z sekundami). Ale teraz zrobię to inaczej, bo przerwania już nie zdadzą egzaminu.

simrowit
-
Posty: 29
Rejestracja: 11 kwie 2012, 20:41
Lokalizacja: Żywiec

Post autor: simrowit » 12 kwie 2012, 11:41

Dokładnie, odczyt z PCF w pętli programowej, byle odczyt był częściej jak 1 raz na sekundę, a wówczas wyświetlanie godzin, minut, sekund będzie nadal płynne. Do samego odczytu nie trzeba angażować przerwań.

ODPOWIEDZ