RTC-problem
Kod: Markera allt
DEFINE LOADER_USED 1
INCLUDE "MODEDEFS.BAS" ' Include Shiftin/out modes
' Define LCD pins
DEFINE OSC 4
DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
tmp VAR BIT 'Tmp är räknaren
knapp VAR PORTB.5 'Knappen på portb.5
RST VAR PORTB.0
IO VAR PORTB.2
SCLK VAR PORTB.1
' Allocate variables
rtcyear VAR BYTE
rtcday VAR BYTE
rtcmonth VAR BYTE
rtcdate VAR BYTE
rtchr VAR BYTE
rtcmin VAR BYTE
rtcsec VAR BYTE
rtccontrol VAR BYTE
TRISB.5 = 1
tmp = 1
Pause 500 'Wait for LCD to wake up
LCDOut $FE, 1 'Initiate LCD by clearing display
Pause 500 'Wait for LCD to initiate
LCDOut $FE, 64, $84, $8e, $8e, $84, $8e, $9b, $9b, $91
Low RST ' Reset RTC
Low SCLK
Pause 500
' Set initial time to 8:00:00AM 07/16/99
rtcyear = $05
rtcday = $18
rtcmonth = $03
rtcdate = $20
rtchr = $21
rtcmin = $53
rtcsec = 0
GoSub settime ' Set the time
GoTo mainloop ' Skip subroutines
' Subroutine to write time to RTC
settime:
RST = 1 ' Ready for transfer
' Enable write
ShiftOut IO, SCLK, LSBFIRST, [$8e, 0]
RST = 0 ' Reset RTC
RST = 1 ' Ready for transfer
' Write all 8 RTC registers in burst mode
ShiftOut IO, SCLK, LSBFIRST, [$be, rtcsec, rtcmin, rtchr, rtcdate, rtcmonth, rtcday, rtcyear,0]
RST = 0 ' Reset RTC
Return
' Subroutine to read time from RTC
gettime:
RST = 1 ' Ready for transfer
ShiftOut IO, SCLK, LSBFIRST, [$bf] ' Read all 8 RTC registers in burst mode
ShiftIn IO, SCLK, LSBPRE, [rtcsec, rtcmin, rtchr, rtcdate, rtcmonth, rtcday, rtcyear, rtccontrol]
RST = 0 ' Reset RTC
Return
' Main program loop - in this case, it only updates the LCD with the time
mainloop:
IF knapp = 1 Then '
IF tmp = 1 Then '
tmp = 2 '
Else 'Antingen etta eller nolla vid knapptryckning
tmp = 1 '
EndIF '
EndIF '
IF tmp = 0 Then
LCDOut $FE, 1, 14, 14, 14, 14, $00, "Mitsubishi" 'Om Tmp är 0 "Mutiaz"
LCDOut $00
LCDOut $FE, $C0, 14, 14, 14, "Eclipse Racing"
LCDOut $FE, $94, "Driver: M.Ljungberg"
LCDOut $FE, $D4, 14, 14, 14, 14, 14, 14, $00, "SWEDEN", $00
Pause 250
EndIF
IF tmp = 1 Then
GoSub gettime ' Read the time from the RTC
' Display time on LCD
LCDOut $fe, 1, HEX2 rtcyear, "/", HEX2 rtcmonth, "/", HEX2 rtcdate, _
" ", HEX2 rtchr, ":", HEX2 rtcmin, ":", HEX2 rtcsec
Pause 300 ' Do it about 3 times a second
EndIF
GoTo mainloop ' Do it forever
End
Om det inte fungerar med störningsfiltret, då borde jag ju kunna köra med bara batteribackupen hela tiden??
Hur länge orkar två seriekopplade 1,5V batterier driva RTCn utan att den tappar tiden?
Här är databladet: http://pdfserv.maxim-ic.com/en/ds/DS1302.pdf
Hur länge orkar två seriekopplade 1,5V batterier driva RTCn utan att den tappar tiden?
Här är databladet: http://pdfserv.maxim-ic.com/en/ds/DS1302.pdf
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
Varför inte använda ett 3V-litiumbatteri?
CR1025 har en kapacitet på 30 mAh, och det ger ju teoretiskt en livslängd på 100000 timmar vid en strömförbrukning på 300nA (ur datablad). I verkligheten blir ju naturligtvis tiden kortare, eftersom RTC:n bara fungerar ner till 2V osv. men det blir ju ändå LÅNG tid.
CR1025 har en kapacitet på 30 mAh, och det ger ju teoretiskt en livslängd på 100000 timmar vid en strömförbrukning på 300nA (ur datablad). I verkligheten blir ju naturligtvis tiden kortare, eftersom RTC:n bara fungerar ner till 2V osv. men det blir ju ändå LÅNG tid.
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
Det är väl så att vid normal drift så tar den spänningen från den ena matningen som tex kommer från en dators strömförsörjning, där den då kan arbeta normalt. När då datorn stängs av så finns det ingen "normal" matningsspänning till den vilket detekteras och då kopplar den över till batterimatning och går säkert samtidigt ner i ett sparläge. Då skulle det förvåna mig om alla funktioner fortfarande skulle fungera eftersom det säkert blir en hel del funktioner som blir avaktiverade just för att spara ström?
Det är ju när den primära spänningsmatningen blir lägre än sekundärspäningen som sekundärspänningen går till som jag fattat det.
Men om jag använder ett litiumbatteri så borde det iallafall hålla ett år och det kan jag leva med! Tror ni det klarar att köras i ett år? Om jag räknade på 100000timmar så skulle det hålla i ca 4100 dagar och det är ju rätt länge..
Jag har tänkt att köra med endast batteri om ni inte fattat det eftersom det inte fungerade med primär och sekundärspänningen..
Men om jag använder ett litiumbatteri så borde det iallafall hålla ett år och det kan jag leva med! Tror ni det klarar att köras i ett år? Om jag räknade på 100000timmar så skulle det hålla i ca 4100 dagar och det är ju rätt länge..
Jag har tänkt att köra med endast batteri om ni inte fattat det eftersom det inte fungerade med primär och sekundärspänningen..