ÓraIC-k használata

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

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

Nekem így megy ki a soros portra.

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

Print Bcd(ora) ; ":" ; Bcd(perc) ; ":" ; Bcd(masodperc)
Avatar
Djdry
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2010. március 16. kedd, 6:00

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

Persze, mert nektek hexa értékként kapjátok a bcd-t, ti azt konvizzátok, én is csak más módon. Nekem pl ha H'12' akkot az rs232-n H'31' és H'32' megy ki ami terminálban is 12 ként jelenik meg!
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

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

Üdv! Szereztem én egy DS1307 RTC-t. Bascomban könnyű azt kezelni? Használta már valaki? Van valami furfang? :) Egy projektembe kerül majd beépítésre, közben épp a nyákot tervezem. Köszi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

-> bascom samples.

Timer & date :)
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

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

Üdv!

Szeretnék megkérdezni, hogy ha van egy ilyen kód, hogy

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

Writebyte = &B00100000
az nem ugyanaz mint a

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

X=32
..
..
..
..
..

Writebyte = Bin(x)

és ebbe a programba részletbe írja bele

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

Sub 1302_írás

 Config Portd.5 = Output

 Serialclock = 1
 Serialin_ou = 0
 Ds1302 = 1
 Reset Serialclock
 Reset Ds1302
 Waitus 5
 Set Ds1302
 Waitus 5
 Shiftout Serialin_ou , Serialclock , Writecommand , 3
 Shiftout Serialin_ou , Serialclock , Writebyte , 3
 Reset Serialclock
 Waitus 5
 Reset Ds1302
 Waitus 5

 End Sub
Köszönöm
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az értékmegadás lehet többféle:
- számként
- &B........ binárisként
- &H...... Hexaként

A valami=bin(szám) esetén a valami az STRINGSOROZAT!
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

Mondjatok már valami jó rtc-t ami a következő követelményeknek megfelel:

-3.3V megy
-van bat csatlakozó és azt tölti is.
-belső kristály (ilyen minden DS13xxC csak nem igazán lehet kapni
én meg nem szertnék rendelni drága pénzekért)
-Spi v.I2c
-SOIC8,SO8 (bármi ami smd 8 láb.
-egyszerű kezelhetőség..(nem szeretnék nagyon vadulni mer láttam már
pár adatlapot erre nekem csak egy sima kiolvasom dátum/idő meg talán
néha néha beállít-ra kell)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Lassan 1-2 info (PCF8563T vagy 8583T (a SOIC-8 méretű)):


-3.3V megy

igen.


-van bat csatlakozó és azt tölti is.

1 db külső ellenállás+1 dióda (esetleg 1 SOT23 diódapár)


-belső kristály (ilyen minden DS13xxC csak nem igazán lehet kapni
én meg nem szertnék rendelni drága pénzekért)

Erre külső kell.

-Spi v.I2c
I2C

-SOIC8,SO8 (bármi ami smd 8 láb.
Az.

-egyszerű kezelhetőség..(nem szeretnék nagyon vadulni mer láttam már
pár adatlapot erre nekem csak egy sima kiolvasom dátum/idő meg talán
néha néha beállít-ra kell)


Erre van kész program + Vbatt detektálás is.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ill a Ricoh fele nézz körbe, de azok nem lesznek a fentiek alapján olcsók/SOIC8-asok.
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

Kértem egy free sample DS1339C#-33 at.
Végülis nem olyan sürgős meg úgyis csak a szoláriumomba kell
egyetlen egy darab. :D
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

DS1302 megoldás

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

Helló!

Régebben gondom volt a DS1302 serial buszos óra IC-vel.
Nemigen jutottunk akkor megoldásra, de most egy 3.3V elemről járó órát tervezek és ez a chip a ds1307-el ellentétben megy már 2v-ről is.

Találtam tegnap egy példa kódot hozzá, átírtam TAVIR Tinyboard-hoz, és remekül működik.

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

'================================================
'= DS1302 SERIAL CLOCK BASCOM PÉLDA             =
'=                                              =
'= AZ ALAPJÁT EGY JAPÁN OLDALON TALÁLTAM,       =
'= (http://blog.daum.net/leewonil/8075398)      =
'= ÁTÍRTAM TINY2313-AS TAVIR TINYBOARDRA        =
'=                                              =
'= FELHASZNÁLÁS ELŐNYEI:                        =
'= - ÁR KB BRUTTÓ 480 FT                        =
'= - 2-5.5v-IG MŰKÖDIK (DS1307 CSAK 5-RŐL)      =
'=                                              =
'= FELHASZNÁLÁS HÁTRÁNYAI:                      =
'= - SPI BUSZ MIATT 3 ADATLÁB KELL NEKI         =
'=   I2C BUSZOS DS1307-HEZ CSAK KETTŐ           =
'=                                              =
'= 2010.11.20 - DOGMAN                          =
'================================================
'
'- Real-Time Clock Counts Seconds, Minutes,
'  Hours, Date of the Month, Month, Day of the
'  Week, and Year with Leap-Year
'  Compensation Valid Up to 2100
'- 31 x 8 RAM for Scratchpad Data Storage
'- Serial I/O for Minimum Pin Count
'- 2.0V to 5.5V Full Operation
'- Uses Less than 300nA at 2.0V
'- Single-Byte or Multiple-Byte (Burst Mode)
'  Data Transfer for Read or Write of Clock or
'  RAM Data
'- 8-Pin DIP or Optional 8-Pin SO for Surface
'  Mount
'- Simple 3-Wire Interface
'- TTL-Compatible (VCC = 5V)
'- Optional Industrial Temperature Range:
'  -40°C to +85°C
'- DS1202 Compatible
'- Underwriters Laboratory (UL) Recognized

'                 32.768 kHz
'                 |        |
'              +--------------+
'              | X1        X2 |
'              |              |
'    Portd.3 --| CE      VCC2 | -- 2-5.5V
'              |              |
'     Pind.4 --| IO           |
'              |              |
'    Portd.5 --| SCLK    VCC1 | -- 3.3V BATT.
'              |              |
'              |      GND     |
'              +--------------+
'                      |
'                      -
'================================================

$regfile = "ATtiny2313.dat"

$crystal = 7372800
$baud = 9600

'LCD konfig
Config Pinb.3 = Output
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.2
'LCD háttérvilágítás be
Portb.3 = 1

Dim Wr_command As Byte
Dim Wr_byte As Byte
Dim Rd_command As Byte
Dim Rd_byte As Byte
Dim T1 As Byte

Config Portd.5 = Output
Config Portd.3 = Output

Rtc_clock Alias Portd.5                                     'DS1302 SCLK
Rtc_out Alias Pind.4                                        'DS1302 IO                                        '
Ds1302 Alias Portd.3                                        'DS1302 CE (régebbi adatlapokon még RST-nek jelölve)

Declare Sub Ds1302_read
Declare Sub Ds1302_write
Declare Sub Write_data
Declare Sub Read_data
'================================================================
Main:
       Locate 1 , 1
       Lcd "Start..."

       ' idő és dátum beállítása
       ' ezt az első futtatás után ki lehet REM-elni,
       ' hogy később az óra ne mindig innen induljon
       Write_data


       Cls
Do
       Locate 2 , 10
       Waitms 100
       Read_data
Loop
End                                                         'end program
'*****************************************************************************
Sub Write_data

         Wr_command = &H8E
         Wr_byte = &B00000000
         Ds1302_write

         Waitus 5

         Wr_command = &H8C                                  '// YY
         Wr_byte = Makebcd(10)                              '2010
         Ds1302_write

         Wr_command = &H8A                                  '// Day
         Wr_byte = &B00000100
         Ds1302_write

         Wr_command = &H88                                  '//mon
         Wr_byte = Makebcd(11)                              '//04
         Ds1302_write

         Wr_command = &H86                                  '//dd
         Wr_byte = 6                                        '//06
         Wr_byte = Makebcd(21)
         Ds1302_write

         Wr_command = &H84                                  '//HH
         Wr_byte = Makebcd(02)
         Ds1302_write

         Wr_command = &H82                                  '//MM
         Wr_byte = Makebcd(58)
         Ds1302_write

         Wr_command = &H80                                  '//SS
         Wr_byte = Makebcd(00)
         Ds1302_write


End Sub
'*****************************************************************************
 Sub Read_data

         Rd_command = &H85
         Ds1302_read
         Locate 1 , 1
         Lcd Makedec(rd_byte)

         Rd_command = &H83
         Ds1302_read
         Lcd ":" ; Makedec(rd_byte)

         Rd_command = &H81
         Ds1302_read
         Lcd ":" ; Makedec(rd_byte) ; "   "

         Rd_command = &H8D
         Ds1302_read
         Locate 2 , 1
         Lcd "20" ; Makedec(rd_byte)

         Rd_command = &H89
         Ds1302_read
         Lcd "-" ; Makedec(rd_byte)

         Rd_command = &H87
         Ds1302_read
         Lcd "-" ; Makedec(rd_byte)
                                            '
 End Sub
'*****************************************************************************
 Sub Ds1302_read

        Config Portd.4 = Output
        Rtc_o Alias Portd.4
        Rtc_clock = 1
        Rtc_o = 1
        Ds1302 = 1
        Reset Rtc_clock
        Reset Ds1302
        Waitus 5
        Set Ds1302
        Waitus 5
        Shiftout Rtc_o , Rtc_clock , Rd_command , 3

        Config Portd.4 = Input
        Serialin Alias Pind.4

        Rtc_clock = 1
        Rtc_o = 0
        Ds1302 = 1
        Shiftin Serialin , Rtc_clock , Rd_byte , 2
        Reset Ds1302
        Rotate Rd_byte , Left , 1

        Waitus 5

 End Sub
'*****************************************************************************
 Sub Ds1302_write

         Config Portd.4 = Output
        Rtc_clock = 1
        Rtc_o = 0
        Ds1302 = 1
        Reset Rtc_clock
        Reset Ds1302
        Waitus 5
        Set Ds1302
        Waitus 5
        Shiftout Rtc_o , Rtc_clock , Wr_command , 3
        Shiftout Rtc_o , Rtc_clock , Wr_byte , 3
        Reset Rtc_clock
        Waitus 5
        Reset Ds1302
        Waitus 5

 End Sub
'*****************************************************************************
Avatar
balazs53
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2005. november 20. vasárnap, 7:00

R2025S Óra és quartz egyetlen tokban

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

A Chipcad-nél lehet kapni ezt az IC-t. Kell neki táp,föld és két szál az I2C buszhoz és működik. Egy barátom írta meg a programot, induláshoz tökéletes. Négy gomb kell a felprogramozáshoz, egy Buzzer és egy kijelző.
Az óra bekapcsolás után átvált 24 órás üzemre.


[code]
'*************************************************************************************************************
'*************************************************************************************************************
'* ÓRA 2011
'* Last updated: 2011. 04. 26. 13:55
'* Target: AT-MEGA-32
'* R2025SD óraIC ==> I2C busz SCL=B0 és SDA=B1

$regfile = "M32def.dat" 'At -mega - 32 - L 2.7V
$crystal = 8000000 '8.000 000 MHz
$baud = 1200

'PORT B0-B1 I2C-bus
Config Scl = Portb.0 'I2C-bus órajel
Config Sda = Portb.1 'I2C-bus adatvonal
I2cinit

'PORT B2-B7 LCD
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 40 * 2

Config Portd.3 = Output 'BUZZER
Config Pind.4 = Input '+ növel key Aktív Low
Config Pind.5 = Input '- csökkent key Aktív Low
Config Pind.6 = Input 'ENTER key Aktív Low
Config Pind.7 = Input 'ESCAPE key Aktív Low

Buzzer Alias Portd.3 'BUZZER
Novel Alias Pind.4 'Növel billentyű
Csokkent Alias Pind.5 'Csökkent billentyű
Enter Alias Pind.6 'ENTER billentyű
Escape Alias Pind.7 'ESCAPE billentyű
'-----------------------------
'-----------------------------

Dim Lastsec As Byte 'Utolsó megjelenítés másodperc
Dim Lastperc As Byte 'Utolsó megjelenítés perc
Dim Tsec As Byte 'Idő másodpercben
Dim Tperc As Byte 'Idő percben
Dim Tora As Byte 'Idő órában
Dim Tnap As Byte 'Idő napban (Hetf-Vasn)
Dim Tdate As Byte 'Idő hónap napja
Dim Thonap As Byte 'Idő hónap
Dim Tev As Byte 'Idő év

'Dim Lastperc As Byte 'Idő percben vekker figyelő

Dim Napneve(7) As String * 4 'Napok nevei tömbje
Dim Napstr As String * 4 'Nap neve string 4 ch
Dim Napi As Byte 'Nap indexe 1-7

Dim A(8) As Byte 'R2025SD registers

Dim Hb As Byte 'Hexa byte
Dim Bb As Byte 'Bináris byte
Dim Whb As Byte 'Hexa byte
Dim Wbb As Byte 'Bináris byte
'-----------------------------
Cursor Blink On
'-----------------------------
'-----------------------------

'Főprogram begin
'--------------------
Gosub Soundenter
Cls
Lcd "Ora >> R2025SD"
Wait 2
'SET clock to 24-hour mode
A(8) = &H20
I2cstart 'generate start
I2cwbyte &H64 'write address for reading
I2cwbyte &HE0 'write address for writing
I2cwbyte A(8) , Nack 'write 24-hour set bit to 1
I2cstop 'generate stop
Waitms 20
Gosub Initials
Gosub Clockwriter
Gosub Soundenter
Gosub Clockreader
Gosub Displayer
Wait 1
Do
Gosub Updater
Loop
'Főprogram end
'-----------------------------
'-----------------------------

Soundenter:
Sound Buzzer , 150 , 900
Waitms 100
Set Buzzer
Return 'Soundenter
'-----------------------------
'-----------------------------

Initials:
Napneve(1) = "Hetf"
Napneve(2) = "Kedd"
Napneve(3) = "Szer"
Napneve(4) = "Csut"
Napneve(5) = "Pent"
Napneve(6) = "Szom"
Napneve(7) = "Vasn"
Tsec = 0
Tperc = 0 'Idő perc
Tora = 0 'Idő óra
Tnap = 1 'Idő nap
Napi = 1
Napstr = Napneve(napi)
Tdate = 1
Thonap = 1
Tev = 11
Return ' Initials
'-----------------------------

Displayer:
Cls
Locate 2 , 1
Lcd Tev
Locate 2 , 4
Lcd Thonap
Locate 2 , 7
Lcd Tdate
Locate 2 , 10
Lcd Napstr
Locate 2 , 16
Lcd Tora
Locate 2 , 19
Lcd Tperc
Locate 2 , 22
Lcd Tsec
Return 'Displayer
'-----------------------------
'-----------------------------

Updater:
If Escape = 0 Then Gosub Idoset
Gosub Clockreader
If Tsec <> Lastsec Then Gosub Dispsec
Return 'Updater
'-----------------------------

Dispsec:
Lastsec = Tsec
Locate 2 , 22
Lcd " "
Locate 2 , 22
Lcd Tsec
If Tperc <> Lastperc Then Gosub Dispperc
Return 'Dispsec
'-----------------------------

Dispperc:
Lastperc = Tperc
Locate 2 , 19
lcd " "
Locate 2 , 19
Lcd Tperc
If Tperc = 0 Then Gosub Displayer
Return 'Dispperc
'-----------------------------
'-----------------------------

Idoset:
Cls
Lcd "R2025SD >> Time Set"
Gosub Soundenter
Waitms 250
Gosub Soundenter
Gosub Clockreader
Gosub Displayer
Locate 2 , 3
Tevsetting:
If Novel = 0 Then Gosub Tevnovel
If Csokkent = 0 Then Gosub Tevcsokkent
If Enter <> 0 Then Goto Tevsetting
Gosub Soundenter
Locate 2 , 6
Thonapsetting:
If Novel = 0 Then Gosub Thonapnovel
If Csokkent = 0 Then Gosub Thonapcsokkent
If Enter <> 0 Then Goto Thonapsetting
Gosub Soundenter
Locate 2 , 9
Tdatesetting:
If Novel = 0 Then Gosub Tdatenovel
If Csokkent = 0 Then Gosub Tdatecsokkent
If Enter <> 0 Then Goto Tdatesetting
Gosub Soundenter
Locate 2 , 15
Tnapneveset:
If Novel = 0 Then Gosub Tnapnovel
If Csokkent = 0 Then Gosub Tnapcsokkent
If Enter <> 0 Then Goto Tnapneveset
Gosub Soundenter
Locate 2 , 18
Torasetting:
If Novel = 0 Then Gosub Toranovel
If Csokkent = 0 Then Gosub Toracsokkent
If Enter <> 0 Then Goto Torasetting
Gosub Soundenter
Locate 2 , 21
Tpercsetting:
If Novel = 0 Then Gosub Tpercnovel
If Csokkent = 0 Then Gosub Tperccsokkent
If Enter <> 0 Then Goto Tpercsetting
Gosub Soundenter
Locate 2 , 24
Tmasodpercsetting:
If Novel = 0 Then Gosub Tmasodpercnovel
If Csokkent = 0 Then Gosub Tmasodperccsokkent
If Enter <> 0 Then Goto Tmasodpercsetting
Gosub Soundenter
Gosub Clockwriter
Waitms 250
Gosub Soundenter
Return 'Idoset
'-----------------------------
'-----------------------------

Clockreader:
I2cstart 'generate start
I2cwbyte &H64 'write address for reading
I2cwbyte &H00 'Reg_address and method
I2cstart 'generate re-start
I2cwbyte &H65 'READING
I2crbyte A(1) , Ack 'read sec 0-59
I2crbyte A(2) , Ack 'read min 0-59
I2crbyte A(3) , Ack 'read hour 0-24
I2crbyte A(4) , Ack 'read D/W 0-6
I2crbyte A(5) , Ack 'read D/M 0-31
I2crbyte A(6) , Ack 'read month 0-12
I2crbyte A(7) , Nack 'read year 0-99
I2cstop 'generate stop
Waitms 20

Hb = A(1)
Gosub Hextobin
Tsec = Bb

Hb = A(2)
Gosub Hextobin
Tperc = Bb

Hb = A(3)
Gosub Hextobin
Tora = Bb

Hb = A(4)
Gosub Hextobin
Tnap = Bb + 1

Hb = A(5)
Gosub Hextobin
Tdate = Bb

Hb = A(6)
Gosub Hextobin
Thonap = Bb

Hb = A(7)
Gosub Hextobin
Tev = Bb

Return 'Clockreader
'--------------------
'--------------------

Clockwriter:
Bb = Tsec
Gosub Bintohex
A(1) = Hb 'másodperc

Bb = Tperc
Gosub Bintohex
A(2) = Hb 'perc

Bb = Tora
Gosub Bintohex
A(3) = Hb 'óra

Bb = Tnap - 1
Gosub Bintohex
A(4) = Hb 'hét napja indexe


Bb = Tdate
Gosub Bintohex
A(5) = Hb 'hónap napja

Bb = Thonap
Gosub Bintohex
A(6) = Hb 'hónap

Bb = Tev
Gosub Bintohex
A(7) = Hb 'év

I2cstart 'generate start
I2cwbyte &H64 'write address for reading
I2cwbyte &H00 'write address for writing
I2cwbyte A(1) , Ack 'read sec
I2cwbyte A(2) , Ack 'read min
I2cwbyte A(3) , Ack 'read hour
I2cwbyte A(4) , Ack 'read D/W
I2cwbyte A(5) , Ack 'read D/M
I2cwbyte A(6) , Ack 'read month
I2cwbyte A(7) , Nack 'read year
I2cstop 'generate stop
Waitms 20
Return 'Clockwriter
'-----------------------------
'-----------------------------

Tevnovel:
If Tev < 99 Then Incr Tev Else Tev = 0
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd Tev
Gosub Soundenter
Return 'Datenövel
'-----------------------------

Tevcsokkent:
If Tev > 0 Then Decr Tev Else Tev = 99
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd Tev
Gosub Soundenter
Return 'Datecsökkent
'-----------------------------

Thonapnovel:
If Thonap < 12 Then Incr Thonap Else Thonap = 1
Locate 2 , 4
Lcd " "
Locate 2 , 4
Lcd Thonap
Gosub Soundenter
Return 'Datenövel
'-----------------------------

Thonapcsokkent:
If Thonap > 1 Then Decr Thonap Else Thonap = 12
Locate 2 , 4
Lcd " "
Locate 2 , 4
Lcd Thonap
Gosub Soundenter
Return 'Datecsökkent
'-----------------------------

Tdatenovel:
If Tdate < 31 Then Incr Tdate Else Tdate = 1
Locate 2 , 7
Lcd " "
Locate 2 , 7
Lcd Tdate
Gosub Soundenter
Return 'Datenövel
'-----------------------------

Tdatecsokkent:
If Tdate > 1 Then Decr Tdate Else Tdate = 31
Locate 2 , 7
Lcd " "
Locate 2 , 7
Lcd Tdate
Gosub Soundenter
Return 'Datecsökkent
'-----------------------------

Tnapnovel:
If Tnap < 7 Then Incr Tnap Else Tnap = 1
Napstr = Napneve(tnap)
Locate 2 , 10
Lcd " "
Locate 2 , 10
Lcd Napstr
Gosub Soundenter
Return 'Napnovel
'-----------------------------

Tnapcsokkent:
If Tnap > 1 Then Decr Tnap Else Tnap = 7
Napstr = Napneve(tnap)
Locate 2 , 10
Lcd " "
Locate 2 , 10
Lcd Napstr
Gosub Soundenter
Return 'Napcsokkent
'-----------------------------

Toranovel:
If Tora < 23 Then Incr Tora Else Tora = 0
Locate 2 , 16
Lcd " "
Locate 2 , 16
Lcd Tora
Gosub Soundenter
Return 'Oranövel
'-----------------------------

Toracsokkent:
If Tora > 0 Then Decr Tora Else Tora = 23
Locate 2 , 16
Lcd " "
Locate 2 , 16
Lcd Tora
Gosub Soundenter
Return 'Oracsökkent
'-----------------------------

Tpercnovel:
If Tperc < 59 Then Incr Tperc Else Tperc = 0
Locate 2 , 19
Lcd " "
Locate 2 , 19
Lcd Tperc
Gosub Soundenter
Return 'Percnövel
'-----------------------------

Tperccsokkent:
If Tperc > 0 Then Decr Tperc Else Tperc = 59
Locate 2 , 19
Lcd " "
Locate 2 , 19
Lcd Tperc
Gosub Soundenter
Return 'Perccsökkent
'-----------------------------

Tmasodpercnovel:
If Tsec < 59 Then Incr Tsec Else Tsec = 0
Locate 2 , 22
Lcd " "
Locate 2 , 22
Lcd Tsec
Gosub Soundenter
Return 'Másodpercnövel
'-----------------------------

Tmasodperccsokkent:
If Tsec > 0 Then Decr Tsec Else Tsec = 59
Locate 2 , 22
Lcd " "
Locate 2 , 22
Lcd Tsec
Gosub Soundenter
Return 'Másodperccsökkent
'-----------------------------
'-----------------------------
'--------------------
'--------------------

Hextobin:
Wbb = 0
Whb = Hb
Whb = Whb * 16
Whb = Whb / 16
Wbb = Whb
Whb = Hb - Whb
Whb = Whb / 16
Whb = Whb * 10
Bb = Wbb + Whb
Return 'Hextobin
'--------------------

Bintohex:
Whb = 0
Wbb = Bb
Wbb = Wbb / 10
Wbb = Wbb * 10
Whb = Bb - Wbb
Wbb = Wbb / 10
Wbb = Wbb * 16
Hb = Whb + Wbb
Return 'Bintohex
'--------------------
'--------------------
End 'end program
'****************************************************************

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

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

MCP 79410 - EEPROM (1kbit) és Óra egyben!

MCP79410 microchip óra/eeprom IC használata:

Set time:

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

   Print "{027}[2JSettime"
      Input "Year (0..99) " , Year
      Input "Month (1..12)" , Month
      Input "Day (1..31)  " , D
      Input "Day (of week)" , Day
      Input "Hour (0..23) " , H
      Input "Minute (0..59)" , M
      Input "Second (0..59)" , S
      S = Makebcd(s)                                        'seconds
      M = Makebcd(m)                                        'minutes
      H = Makebcd(h)                                        'hours
      D = Makebcd(d)                                        'days
      Month = Makebcd(month)                                'months
      I2cstart                                              'generate start
      I2cwbyte &B11011110                                   'write address
      I2cwbyte 0                                            'address of RTC: 0
      I2cwbyte 0                                            'STOP RTC (and sec=0)
      I2cwbyte M                                            'Min
      I2cwbyte H                                            'Hour
      D.3 = 1                                               'VBATEN=1
      I2cwbyte D                                            'Day & VBATEN=1
      I2cwbyte Day                                          'Date
      I2cwbyte Month                                        'month
      I2cwbyte Year                                         'Year
      I2cstop
      I2cstart
      I2cwbyte &B11011110
      I2cwbyte 0                                            '0. CIM
      S.7 = 1                                               'Start timer
      I2cwbyte S                                            'Write second & Set start
      I2cstop
Read time:

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

 Print "{027}[2JGettime"
      Do
         I2cstart                                           'generate start
         I2cwbyte &B11011110                                'write addres of MCP79410
         I2cwbyte 0                                         'select sec register
         I2cstart                                           'generate repeated start
         I2cwbyte &B11011111                                'read address of MCP79410
         I2crbyte S , Ack
         S.7 = 0                                            'mask start bit
         I2crbyte M , Ack
         I2crbyte H , Ack
         I2crbyte D , Ack                                   'day of week, NC
         I2crbyte Day , Ack
         I2crbyte Month , Ack
         Month.5 = 0                                        'skip LeapYear bit
         I2crbyte Year , Nack
         I2cstop                                            'generate stop

         Print Chr(27) ; "[2;2f";                           ' VT100 emulation set pos to 2,2
         Print "Time "
         Print Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)
         Print "Day : " ; Bcd(day) ; " Month : " ; Bcd(month) ; " Err:" ; Err
         Waitms 50
      Loop Until Inkey() = 27
A kiolvasásánál némi hiba lehet (Day/Month környékén)...

EEPROM read/write

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

   Input "Write-test (0-skip)?" , Temp1b
      If Temp1b = 0 Then Goto Prog42olvas
      Print "Start MCP-EEPWrite (32 byte)"
      Temp1b = 0                                            ' Generate test data (=0<256).
      Do
         I2cinit
         I2cstart
         I2cwbyte &B10101110                                'MCP EEP address (I2Caddress)
         I2cwbyte Temp1b                                    'address of data
         I2cwbyte Temp1b                                    'data for write
         I2cstop
         Incr Temp1b                                        ' Generate test data (=0<256).
      Loop Until Temp1b = 32
      Print "All written."                                  ' Tell what is going on.
      Prog42olvas:
      Print
      Print "Read back...."

      Temp1b = 0
      Do
         I2cinit
         I2cstart
         I2cwbyte &B10101110                                'MCP EEP i2caddress for write
         I2cwbyte Temp1b                                    'addres for read
         I2cstart
         I2cwbyte &B10101111                                'MCP EEP i2caddress for read
         I2crbyte Temp2b , Nack
         I2cstop
         If Err = 0 Then                                    ' Check status of operation.
            Print "OK   :" ; Temp1b ; " " ; Temp2b          ' Report success.
         Else                                               ' or
            Print "Error:" ; Temp1b                         ' Report failure.0
         End If
         Incr Temp1b                                        ' Increment address counter.
         Waitms 100
      Loop Until Temp1b = 32
      Print "All read OK."                                  ' Tell what is going on.
      Wait 5
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

Sziasztok!
DS1307Z-vel kapcsolatban találtam egy érdekességet, a Bascom mintából is hiányzik:
Bekapcsolás után minden regiszterből 0-t olvasunk. Az óra nem jár.

A titok a másodpercek regiszterének 7. bitjében van, az adatlap CH bitként hivatkozik rá. Ha a CH=1, akkor az oszcillátor le van tiltva. Ha visszabillentjük 0-ra, akkor az óra elindul.

Egy fajta megoldást ad a fentiekre az alábbi kód:

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

  I2cstart                                                  ' Generate start code
  I2cwbyte Rtc_w                                            ' send address
  I2cwbyte 0                                                ' start address in 1307

  I2cstart                                                  ' Generate start code
  I2cwbyte Rtc_r                                            ' send address
  I2crbyte Rtc_sec , Ack
  I2crbyte Rtc_min , Ack                                    ' MINUTES
  I2crbyte Rtc_hour , Ack                                   ' Hours
  I2crbyte Rtc_dow , Ack                                    ' Day of Week
  I2crbyte Rtc_day , Ack                                    ' Day of Month
  I2crbyte Rtc_month , Ack                                  ' Month of Year
  I2crbyte Rtc_year , Nack                                  ' Year
  I2cstop

  If Err = 1 Then
     Reset Global_error.1
  End If

  If Rtc_sec.7 = 1 Then                                     ' Oscillator halted
      Rtc_sec.7 = 0
      I2cstart                                              ' Generate start code
      I2cwbyte Rtc_w                                        ' send address
      I2cwbyte 0                                            ' start address in 1307
      I2cwbyte Rtc_sec                                      ' Send Data to SECONDS
      I2cstop
  End If
PS: Nyák tervezésnél érdemes az adatlap szerint kialakítani a kvarc alatti árnyékolást... :)
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Válasz küldése