Bonjour à tous
je voudrais pour une application un peu speciale utiliser un Pcf 8583 avec un pic 16f 876
Le pcf 8583 est une horloge I2c , avec gestion de l'alarme.
Pour ma part je n'ai pas besoin de l'alarme , mais j'ai des problemes quand à la mise au point du programme. 3boutons me sont necessaires quand a la mise a l'heure de l'horloge
voici ci dessous mon prog
device = 16f876
xtal = 4
bootloader=on
LCD_DTPIN =portb.4
LCD_RSPIN =portb.3
LCD_ENPIN= portb.2
LCD_INTERFACE= 4
LCD_LINE =2
Lcd _Type=0
DECLARE SDA_PIN PORTC.0
DECLARE SCL_PIN PORTC.1
'***variables***************** ****************************** *** ***************
delayms 200 'stabilisation LCD
cls
dim bcd_to_bin 'variable utilisées
dim low_bits
dim high_bits
dim pcf 'adresse du 8583
Dim second as byte
Dim minute as byte
Dim hour as byte
dim setup as byte
symbol clkout=%10100000 'reception données
symbol clkin=%10100001 'emission données
Symbol button1 = portb.1
Symbol button2 = portb.0
Symbol button3 = portc.2
pcf = 0
setup = 0
second = 0
minute = 0
hour = 0
cls
delayms 200
C_upd:
'***affichage***************** ***************
busin %10100001,2,[second,minute,heure]
pcf= 2:gosub read_time 'lecture secondes
second=bcd_to_bin 'convertion binaire
pcf= 3:gosub read_time 'lecture minute
minute=bcd_to_bin 'convertion binaire
pcf = 4:gosub read_time 'lecture heure
hour=bcd_to_bin 'convertion binaire
print at 1,5, dec2 hour,":",dec2 minute,":",dec2 second
'*** depart
if button1 = 0 then inc setup
if setup = 1 then goto set_min
if setup = 2 then goto set_hour
if setup > 2 then
print at 2,1," "
setup = 0
endif
goto C_upd
'***************************** ******************** ******************************
set_min:
print at 2,5,"Set Min "
if button2 =0 then
busin clkin,3,[bcd_to_bin]
gosub conv_to_bin '
inc bcd_to_bin
if bcd_to_bin > 59 then bcd_to_bin = 0
delayms 100
gosub convert_to_bcd
busout clkout,3,[bcd_to_bin]
delayms 10
endif
goto c_upd
'***************************** ******************** ******************************
set_hour:
print at 2,5,"Set Hour"
if button2 =0 then
busin clkin,4,[bcd_to_bin]
gosub conv_to_bin
inc bcd_to_bin
if bcd_to_bin > 23 then bcd_to_bin = 0
delayms 100
gosub convert_to_bcd
busout clkout,4,[bcd_to_bin]
delayms 10
endif
goto c_upd
'*** '***************************** ******************** ******************************
read_time:
busin clkin,pcf,[bcd_to_bin]
gosub conv_to_bin
return
'***************************** ******************** ******************************
conv_to_bin:
select bcd_to_bin
case 16 to 25
bcd_to_bin=bcd_to_bin-6
case 32 to 41
bcd_to_bin=bcd_to_bin-12
case 48 to 57
bcd_to_bin=bcd_to_bin-18
case 64 to 73
bcd_to_bin=bcd_to_bin-24
case 80 to 89
bcd_to_bin=bcd_to_bin-30
case 96 to 105
bcd_to_bin=bcd_to_bin-36
case 112 to 121
bcd_to_bin=bcd_to_bin-42
case 128 to 137
bcd_to_bin=bcd_to_bin-48
case 144 to 153
bcd_to_bin=bcd_to_bin-54
endselect
return
'***************************** ******************** ******************************
low_bits=bcd_to_bin//10
high_bits=bcd_to_bin/10
bcd_to_bin=high_bits*16 'convertion msb ten BCD
bcd_to_bin=bcd_to_bin+low_bits 'add BCD msb et lsb
return
Lors de la mise sous tension, l'afficheur m'indique
08:08:08
si j'appui sur le bouton 1 l'affichage s'efface et j'ai "set hou" mais peu visible (comme s'il etait effcé et affiché en permanence.
l'action sur les autres bp n'ont pas d'effet
l'horloge ne s'incremente pas alors que le Pcf à l'air de bien marcher, car j'ai le quartz qui oscille bien et des oscillations sur les broches Sda et clock
Cela fait quelques jours que j'y suis dessus et je demande votre aide.
Ce programme n'est pas entierement de mon cru, j'en ai pompé une partie dans un bouquin.
merci à tous pour votre aide et a+
-----