PCF8563 év és a nap lekérdezése

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
madison23
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2009. október 25. vasárnap, 6:00

PCF8563 év és a nap lekérdezése

Hozzászólás Szerző: madison23 »

Üdv!

PCF8563 lekérdezésekor ha a nap változik az év is nő. Hogyan kell lekérdezni helyesen?

prg. részlet:
Dim Second As Byte , Minute As Byte , Hour As Byte , Day As Byte , Month As Byte , Year As Byte
....
Gettime:
For I = 1 To 7
Temp = I + 1
I2cstart
I2cwbyte &HA2
I2cwbyte Temp
I2cstart
I2cwbyte &HA3
I2crbyte Tm(i) , Nack
Next
I2cstop

Print "20 " ; Bin(tm(6)) ; " " ; Hex(tm(6)) ; "." ; Hex(tm(5)) ; "." ; Hex(tm(4)) ; ".." ; Hex(tm(3)) ; ":" ; Hex(tm(2)) ; ":" ; Hex(tm(1));
Return
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

ÓraIC-k használatának 2. programmintája?

A programkódból ha lehet a teljeset kérnénk....
Ez így vázlat maximum.....
Avatar
madison23
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2009. október 25. vasárnap, 6:00

Hozzászólás Szerző: madison23 »

A hiba:

2010.03.31 23:59:59
2011.04.01 00:00:00

A kért forrás:

$crystal = 16000000 'Sebesseg
$regfile = "M168def.dat" 'Chip
$baud = 9600
$hwstack = 254
$swstack = 254
$framesize = 254

'I2C
Config I2cdelay = 10 ' default slow mode:5
Config Sda = Portc.4
Config Scl = Portc.5


Dim Menu As Byte

'DateTime
Dim Temp As Byte , I As Byte , Tm(6) As Byte , Answer As String * 1
Dim Second As Byte , Minute As Byte , Hour As Byte , Day As Byte , Month As Byte , Year As Byte

Gosub Gettime

Do
Print
Cls
Print " 1 - Dátum és idő beállítás"
Print " 2 - Dátum és idő lekérdezés"

Input "Menü sorszám: " , Menu
Print
Select Case Menu
Case 1 : Gosub Settime
Case 2 : Gosub Gettime
End Select
Loop
End


Settime:
Input "Év utolsó két számjegye: " , Year
Input "Hónap:" , Month
Input "Nap: " , Day
Input "Óra: " , Hour
Input "Perc: " , Minute
Input "Másodperc: " , Second

Tm(1) = Makebcd(second) 'seconds
Tm(2) = Makebcd(minute) 'minutes
Tm(3) = Makebcd(hour) 'hours
Tm(4) = Makebcd(day) '''days
Tm(5) = Makebcd(month) 'months
Tm(6) = Makebcd(year) '' 'year

I2cstart 'generate start
I2cwbyte &HA2 'write address, PCF: &HA0
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstart 'repeated start
I2cwbyte &HA2 'write mode , PCF: &HA0
I2cwbyte 2 'select seconds Register
For I = 1 To 7
I2cwbyte Tm(i)
Next 'write time
I2cstop
Return


Gettime:
For I = 1 To 7
Temp = I + 1
I2cstart
I2cwbyte &HA2 'write addres of PCF8583 , PCF: &HA0
I2cwbyte Temp 'select register
I2cstart 'repeated start
I2cwbyte &HA3 'write address for reading info , PCF: &HA1
I2crbyte Tm(i) , Nack 'read data
Next
I2cstop

Print "20" ; Hex(tm(6)) ; "." ; Hex(tm(5)) ; "." ; Hex(tm(4)) ; " " ; Hex(tm(3)) ; ":" ; Hex(tm(2)) ; ":" ; Hex(tm(1));
Return
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A kiolvasás nem tetszik nekem. A Nack/ack változóval mondom meg h kell e még olvasnom...

Miert nem kulon valtozokba rakod a kiolvasott erteket?
kulon ev/honap/nap/ora/perc/sec.
NE tombbe rakd bele....
Így a hiba kiszúrható...


Kód: Egész kijelölése

Gettime: 
I2cstart 
I2cwbyte &HA2 'write addres of PCF8583 , PCF: &HA0 
I2cwbyte 2 'select register 
I2cstart 'repeated start 
I2cwbyte &HA3 'write address for reading info , PCF: &HA1 
For I = 1 To 6
I2crbyte Tm(i) , ack 'read data 
Next 
i2crbyte tm(7), nack 'nem kell tobb adat!
I2cstop 
Avatar
madison23
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2009. október 25. vasárnap, 6:00

PCF8583

Hozzászólás Szerző: madison23 »

Bocs, PCF8583-ról beszélünk.
Sajnos egyik ajánlás alapján sem működik, vagyis hónapváltásnál az év is ugrik, hiába vettem ki a tömbből.
Az eredeti programban csak bekérték az évszám végét (10), és print-nél berakták a beégetett "20" után (2010).
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Na most 8583 vagy 8563 ? :)
A 2 chip kezelese eltero!
Avatar
madison23
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2009. október 25. vasárnap, 6:00

Hozzászólás Szerző: madison23 »

helyesen: 8583
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

         Const clkaddr=&HA2
         Dim .... (variables)

         Print "{027}[2JTime status:"
         Do
            I2cstart                                           'generate start
            I2cwbyte Clkaddr                                   'write addres of PCF8583
            I2cwbyte 2                                         'select second register
            I2cstart                                           'generate repeated start
            L_temp1b = Clkaddr + 1
            I2cwbyte L_temp1b                               'write address for reading info
            I2crbyte Clk_s , Ack                            '&h02 read seconds (00...59)
            If Clk_s.7 = 1 Then
               Csipog1                                      'Csak teszt!
               Goto Ujraolvas                               'nem megbizhato az adat (VL reg)
            End If
            Clk_s.7 = 0

            I2crbyte Clk_m , Ack                            '&h03 read minutes (00...59)
            Clk_m.7 = 0                                     '7. bit torlese

            I2crbyte Clk_h , Ack                            '&h04 read hours (00...23)
            Clk_h.7 = 0
            Clk_h.6 = 0

            I2crbyte Clk_d , Ack                            '&h05 read days (01....31)
            Clk_d.7 = 0
            Clk_d.6 = 0
            I2crbyte L_temp1b , Ack                         '&H06 weekday (nem haszn.) het napjai (0...6)
            I2crbyte Clk_wm , Ack                           '&h07 month/centaury (7.bit: cent. 1-20xx, 0-19xx)
            Clk_cent = Clk_wm.7
            Clk_wm.7 = 0
            Clk_wm.6 = 0
            Clk_wm.5 = 0
            I2crbyte Clk_y , Nack                           '&h08 Year
            I2cstop                                         'generate stop
            Print "{027}[2;1f";                             ' VT100 emulation set pos to 2,2
            Print Bcd(clk_h) ; ":" ; Bcd(clk_m) ; ":" ; Bcd(clk_s)
            Print "" ; Bcd(clk_d) ; "." ; Bcd(clk_wm) ; "." ;
            If Clk_cent = 1 Then
               Print "20";
               Else
               Print "19";
            End If
            Print Bcd(clk_y) ; "."
            Print "Err:" ; Err
            Waitms 50
           Ujraolvas:
         Loop Until Inkey() = 27 

Válasz küldése