|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
kose19 Član
Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.51 Kraj: okolica Kobarida
|
Objavljeno: Pon Mar 30, 2015 1:49 pm Naslov sporočila: RTC modul - MCP79410 |
|
|
Pozdravljeni.
Imam ta modul in mi je po priloženi kodi delal iz prve. Sicer na AtMega64a, vendar mislim, da to ne upliva na moj problem.
Najprej se je zataknilo, ko sem hotel koristiti še Weekday spremenljivko. Nekako po defaultu je bila 44 , ura in datum sta normalno tekla z napajanjem in brez (na baterijo).
In potem se je zgodilo, da je ura čez noč obstala. Ko jo ponovno vpišem, sicer obdrži vrednosti, vendar ne teče.
To je moj prvi I2C in zato ne vem na kak način naj se lotim problema. Kakšen nasvet, ali naj naročim nov modul?
lp
Koda: |
$regfile = "attiny88.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 20
$framesize = 40
' Config
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Porta.2 , Rs = Portd.4
Config Lcd = 16 * 1a
Config Scl = Portc.5
Config Sda = Portc.4
Config I2cdelay = 5
Config Clock = User
Config Date = Dmy , Separator = /
Dim Weekday As Byte
Const Mpc79410w = &B11011110
Const Mpc79410r = &B11011111
Cls
Weekday = 1
Time$ = "01:00:00"
Date$ = "01/01/12"
' Main loop
Do
Upperline : Lcd Time$
Lowerline : Lcd Date$
Loop
End
Getdatetime:
I2cstart
I2cwbyte Mpc79410w
I2cwbyte 0
I2cstart
I2cwbyte Mpc79410r
I2crbyte _sec , Ack
_sec.7 = 0
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
_month.5 = 0
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Mpc79410w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Mpc79410w
I2cwbyte 0
_sec.7 = 1
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
Weekday.3 = 1
I2cwbyte Weekday
I2cstop
Return |
_________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
|
kose19 Član
Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.51 Kraj: okolica Kobarida
|
Objavljeno: Pon Mar 30, 2015 9:01 pm Naslov sporočila: |
|
|
Hm, sem prebral datasheet, pa nisem nič napredoval.
Ker je moje znanje programiranja še zmeraj na začetnem nivoju (pač nikoli nisem bil programer), mi v glavnem ni nič jasno.
Kako pišeš in bereš registre preko I2c lahko samo ugibam. Ali je možen "reset", da bi potem spet naložil zgoraj pripet program? Ne vem niti ali je bil čip na modulu prej že kakorkoli nastavljen. Skratka tema.
Bi rabil podroben komentar pripetega programa kar se tiče I2c. Kaj se piše, zakaj se piše, kako se piše in kam se piše, da bi počasi razumel kaj in kako...
Uči se namreč Janezek, Janezi smo bolj trdi _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Pon Mar 30, 2015 10:52 pm Naslov sporočila: Re: RTC modul - MCP79410 |
|
|
Za začetek naštudiraj i2c vodilo in časovne funkcije v Bascom-u.
vpis enega registra preko i2c je opisan v FIGURE 6-1:
->START - Živjo, halo... Začetek prenosa.
->CONTROL BYTE: Master odda naslov naprave na vodilu, s katero se želi pogovarjati. Control byte je pojasnjen v FIGURE 4.3. Vsebuje 4 bit naslov EEPROM, oz RAM, nasledni trije 3 biti so vedno '1', ter R/W bit, s katerim izbiraš pisanje / branje.
<-ACK: Master sprosti vodilo. SLAVE potrdi sprejem.
->ADDRESS BYTE: Master odda naslov registra, kamor želi vpisat podatke.
<-ACK: Master sprosti vodilo. SLAVE potrdi sprejem.
->DATA: Master odda BYTE, ki se bo vpisal na naslov [ADDRESS BYTE]
<-ACK: Master sprosti vodilo. SLAVE potrdi sprejem.
->STOP: Adijo. MASTER pove napravam na vodilu, da je prenehal z oddajo.
V tvojem primeru pogrešam komunikacijo uC-ja z RTC modulom
Koda: |
Cls 'zbriše LCD
Weekday = 1 ' prvi dan v tednu
Time$ = "01:00:00" ' ura je ... vpliva na spremenljivko v uC-ju
Date$ = "01/01/12" ' datum je... vpliva na spremenljivko v uC-ju
' Če ima uC svojo uro, bi moral tu uskladiti uro uC-ja z RTC, ali obratno.
' Main loop
Do ' glavna zanka
' Če uC-ju nima svoje ure, bi tukaj program moral prebrati čas iz RTC
Upperline : Lcd Time$ ' v zgornjo vrtico izpiše Time$
Lowerline : Lcd Date$ ' v spodnjo vrstico izpiše Date$
Loop ' skoči na Do
End
|
_________________ Kdor ni skregan, ni Slovenc ! |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 73 dni
Powered by phpBB © 2001, 2005 phpBB Group
|