Ukedag alarm i PCF8583

O

otuzsubat

Guest
Jeg vil bruke hverdag alarm i PCF8583.For eksempel, jeg ønsker at den produserer et avbrudd på hver mandag 13:30.Min koden nedenfor.Kan du si meg hvor er det feil?

int int2bcd (int dec) (
return ((dec/10) <<4) (dec% 10);
)

void rtc_set () (
i2c_start ();
i2c_write (0xA2); / / sender enheten adresse
i2c_write (0x00); / / sende adressen byte

i2c_write (0x80); / / Stopp RTC telling
/************* Skriv faktiske tiden ****************/
i2c_write (0x00); / / hundredel av andre
i2c_write (0x00); / / Sekunder
i2c_write (RTC [3 ]);// Minutes (i BCD format)
i2c_write (RTC [2 ]);// timer (i BCD format, 24hour format)
i2c_write (RTC [0 ]);// År / Dato (i BCD format)
i2c_write (RTC [1 ]);// Ukedag / måned (i BCD format)
i2c_write (0x00); / / Disable Tidsur
/************* Skriv alarmtidspunktet ****************/
i2c_write (0xA0); / / Alarm Flag, Interrupt, No tidtaker alarm, Ukedag alarm
i2c_write (0x00); / / Alarm hundredel av andre
i2c_write (0x00); / / Alarm Sekunder
i2c_write (int2bcd (alarm.minute ));// Alarm Minutes
i2c_write (int2bcd (alarm.hour ));// Alarm Timer
i2c_write (0x00); / / Alarm Dato
i2c_write ((0x01 <<(alarm.day-1 )));// Alarm Ukedag
i2c_stop ();
delay_ms (5);

i2c_start ();// starter overføringen
i2c_write (0x00); / / sender enheten adresse
i2c_write (0x00); / / Send adressen byte
i2c_write (0x04); / / Start RTC telling
i2c_stop ();
delay_ms (5);
)

 
Først av alt må jeg si at jeg ikke bruker PCF8583.

Men når jeg ser på koden din:
i2c_start ();// starter overføringen); //send device address

i2c_write (0x00);
/ / sender enheten adresse
i2c_write (0x00); / / Send adressen byte
i2c_write (0x04); / / Start RTC telling
i2c_stop ();
delay_ms (5);

Jeg tror du bør bruke 0xA2 som enheten postadresse som du brukte i den forrige kommandoen.

håper dette hjelper

 
Ta en titt på: http://www.fernando-heitor.de/pic/projekte/pcf8583/index.htm

Vil gi deg full eksempler Time, alarm, hendelser ved hjelp PCF8583.SAR

 
Cman; Jeg gjorde en skrive feil og rettet opp det.

SAR; It's nice site.Men det er ikke noe eksempel på bruk av ukedag alarm.

Jeg har skrevet mitt problem til Philips.Jeg håper de vil hjelpe meg.Fordi det ikke er nok informasjon i dataarkvisning.
Dessuten prøver
jeg forskjellige koder for å bruke hverdag alarm.Når jeg lykkes, vil jeg skrive inn koden her.

 
Før var jeg taste alarm og tid verdiene ved keypad.To at RTC fungerer, skrev jeg et enkelt program.
I dette programmet først, jeg skrev 23:59:55:00 mandag (Jeg antar at 000 er man, 001 tirsdag .. 110 søndag) til RTC.
Deretter skrev jeg 00:00:05:00 tirsdag som alarmtidspunktet.Når jeg drevet opp PIC det produsert et avbrudd.
I stedet for å bruke eksterne avbryte, kan du også bruke lesing alarm flagget som er 1.bit av kontroll register.
Ikke glem clearing alarm flagg etter avbruddsordrelinje produsert og koble til en pull-up motstander til avbruddsordrelinje utdataene for RTC.
Fordi det er et åpent solfangeren utgang.
#
include <18F452.h>
#
include <string.h>
#
include <stdlib.h>
# sikringer HS, beskytte, NOWDT, NOBROWNOUT, PUT, NOLVP
# bruke forsinkelse (klokke = 20000000)
# bruke I2C (master, SDA = PIN_C4, scl = PIN_C3, SLOW)
#
include <lcd.c>
short int ex_interrupt = 0;
# INT_EXT
void EXT_ISR () (
ex_interrupt = 1;
)
void main () (
byte temp = 0;
enable_interrupts (GLOBAL);
ext_int_edge (H_TO_L);
set_tris_b (0x03);
set_tris_c (0xC0);
set_tris_d (0x08);

i2c_start ();
i2c_write (0xA2); / / sender enheten adresse
i2c_write (0x00); / / sende adressen byte
/ / Skriv til RTC 23:59:55:00 mandag
/ / alarmtiden er 00:00:05:00 tirsdag
i2c_write (0x80); / / Control Register, Stop telling
i2c_write (0x00); / / hund.av sekunder
i2c_write (0x55); / / Sekunder
i2c_write (0x59); / / Minutes
i2c_write (0x23); / / Timer
i2c_write (0x01); / / Year_Date
i2c_write (0x01); / / Weekday_Month
i2c_write (0x00); / / Tidsur
i2c_write (0xA0); / / Alarm Control Registrer
i2c_write (0x00); / / Alarm hund.av sekunder
i2c_write (0x05); / / Alarm Sekunder
i2c_write (0x00); / / Alarm Minutes
i2c_write (0x00); / / Alarm Timer
i2c_write (0x00); / / Alarm Dato har ingen effekt på ukedag alarm
i2c_write (0x02); / / Alarm Ukedag
i2c_stop ();
delay_ms (5);

i2c_start ();// begynne å telle på nytt
i2c_write (0xA2); / / sender enheten adresse
i2c_write (0x00); / / sende adressen byte
i2c_write (0x04);
i2c_stop ();
delay_ms (5);

/ / Du kan laste ny alarm verdier til alarmen registrerer uten stopp telling
i2c_start ();
i2c_write (0xA2); / / sender enheten adresse
i2c_write (0x08); / / sende adressen byte
i2c_write (0xA0); / / Alarm Control Registrer
i2c_write (0x00); / / Alarm hund.av sekunder
i2c_write (0x05); / / Alarm Sekunder
i2c_write (0x00); / / Alarm Minutes
i2c_write (0x00); / / Alarm Timer
i2c_write (0x00); / / Alarm Dato har ingen effekt på ukedag alarm
i2c_write (0x02); / / Alarm Ukedag
i2c_stop ();

lcd_init ();
lcd_gotoxy (1,1);
delay_ms (10);
enable_interrupts (INT_EXT); / / Eksterne avbruddsordrelinje må aktivere etter RTC er satt.
mens (1) (
i2c_start ();// Reading alarm flagg
i2c_write (0xA2); / / sender enheten adresse
i2c_write (0x00); / / send RTC adresse byte
i2c_start ();// igjen starte overføring for lesing av data
i2c_write (0xA3); / / lesing adresse
temp = i2c_read (0);
i2c_stop ();
if (bit_test (temp, 1)) (
lcd_putc ( "Flag \ n");
)
if (ex_interrupt) (
lcd_putc ( "Interrupt \ n");
)
if (bit_test (temp, 1) | | ex_interrupt) (
harici_interrupt = 0;
lcd_putc ( "Alarm Ringetype");
i2c_start ();// Etter avbruddsordrelinje må du nullstille alarmen flagg
i2c_write (0xA2); / / enhet adresse
i2c_write (0x00); / / adresse byte
i2c_write (0x04); / / kontroll register
i2c_stop ();
delay_ms (60000);
)
)
)

 

Welcome to EDABoard.com

Sponsor

Back
Top