SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 2
2 gasten
0 leden:
Schema's > Computer & Microcontroller > RTC PCF8583 op een IC
Schema informatie
pascalbianca
Moeilijkheidsgraad: Normaal Aantal punten:
Hits: 5307 Aantal stemmen: 117
Gepost op: 23-02-2014 Stem:
» 0 reacties    

Schema
RTC PCF8583 op een IC

Onderdelenlijst & Commentaar
Onderstaande code controleert of de RTC leeg is , indien ja word deze ingesteld op de waarde die bij SETTIME staan, zo niet kun je dit doen door eerst een verwijzing te maken naar SETTIME.


Code
Dim Minuten         As Byte     ; minuten                 (decimaal)
Dim Seconden        As Byte     ; seconden                (decimaal)
Dim Uren            As Byte     ; uren                    (decimaal
Dim Dag             As Byte     ; datum v/d maand         (decimaal
Dim Maand           As Byte     ; maand                   (decimaal)
Dim JaarVier        As Byte     ; jaar zoals in PCF8583 (hoogste 2 bits in YearDays)
Dim Jaar            As Word     ; jaar
Dim Weekdag         As Byte
 
Dim WeekdagString[2]      As Byte
Dim MaandString[3]        As Byte
 
                                ;Het jaar wordt in de PCF8385 alleen bijgehouden in een vier 
                                ;jaars tijdvak (0 tot 3) waarbij 0 het schrikkeljaar is.
                                ;De software waarin de PCF8385 opgenomen is moet zelf een 
                                ;variable bijhouden waaruit het uiteindelijke jaar berekend kan worden.
                                ;In dit voorbeeld wordt daar JaarDev4 voor gebruikt. JaarDev4 
                                ;moet met 1 verhoogd worden wanneer het jaar in de PCF8583 
                                ;van 3 naar 0 verandert.
Dim YearDays        As Byte     ;bit 0 tot 3 voor dag eenheden, bit 4 
                                ;en 5 voor dag tientallen (0-3), bit 6 en 7 jaar (0-3).
Dim WeekDayMonths   As Byte     ;bit 0 tot 3 voor maand eenheden, bit 4 voor maand 
                                ;tientallen (0-1), bit 5 tot 7 weekdagen (0-6).
Dim secs            As Byte     ;bit 0 tot 3 voor seconden eenheden, bit 4 tot 6 
                                ;voor seconden tientallen (0-5), bit 7 niet gebruikt.
Dim mins            As Byte     ;bit 0 tot 3 voor minuten eenheden, bit 4 tot 6 
                                ;voor minuten tientallen (0-5), bit 7 niet gebruikt.
Dim hrs             As Byte     ;bit 0 t0t 3 voor uren eenheden, bit 4 en 5 
                                ;voor uren tientallen (0-2), bit 6 0=AM 1=PM , bit 7 0=24 
                                ;uur mode, 1=12 uur mode(AM/PM).
Dim JaarDev4        As Byte     ;hoogste 7 bits = jaar - 2000 gedeeld door 4 
                                ;(wordt niet door PCF8583 geupdate), laagste bit is jaar3 flag
Dim jaar3           As Byte     ;flag om de jaar overgang van 3 naar 0 
                                ;(schrikkeljaar)te kunnen detecteren voor update van JaarDev4
Dim dummy           As Byte     ;hulp variable.
    
     
Symbol PCF8583r   = $A0         ;Adres om PCF8583 uit te lezen (r = read)
Symbol PCF8583w   = $A1         ;Adres om naar PCF8583 te schrijven (w = write) 
Symbol PCF8574A_ADDR =$70       ;$70 is schrijf $71 is lezen

Clear
DelayMS 200 'stabilizza LCD
Cls

   If hrs = 0 And YearDays = 1 And WeekDayMonths = 1 Then ;reset status van de PCF8583. (PCF8583 is leeg) 
        GoSub setTime                                     ;Stelt klok in
    End If         
GoSub getTime

Loop:
    GoSub WerkingIC
    GoSub getTime
 
    Print At 1 , 1, Str WeekdagString, " ", Dec2 Dag," ",Str MaandString," ", Dec4 Jaar, "  "
    Print At 2 , 1 , @Uren, ":", Dec2 Minuten, ":", Dec2 Seconden, " "
    Print At 3,5,Dec Weekdag 
 
    DelayMS 100
 
    GoTo Loop
    
getTime:
    HBusIn PCF8583r, $02, [secs, mins, hrs,YearDays,WeekDayMonths] ;haal tijd op vanuit de PCF8583
    HBusIn PCF8583r, $10, [ JaarDev4 , jaar3]                      ;haal jaar op (-2000 / 4) 
 
    Seconden = ((secs >> 4) * 10) + (secs & 15)                     ;zie proton help "Math Operators"
    Minuten  = ((mins  >> 4) * 10) + (mins  & 15)
    Uren     = ((hrs     >> 4) * 10) + (hrs     & 15)
    Dag      = (((YearDays >> 4 ) & 3 ) * 10) + (YearDays  & 15)
    Maand    = (((WeekDayMonths >> 4) & 1 ) * 10) + (WeekDayMonths  & 15)
    JaarVier = (YearDays     >> 6)
    Weekdag  = (WeekDayMonths  >> 5)
 
    Jaar = 2000 + JaarVier + (JaarDev4*4)
 
    If JaarVier = 3 Then                    ;Twee if statements om JaarDev4 eens in de 4 jaar te verhogen 
        jaar3 = 1                           ;Bij overgang naar schrikkeljaar
        HBusOut PCF8583w, $11, [ jaar3 ]
    End If
 
    If JaarVier = 0 And jaar3 = 1 Then      ; omslag naar jaar 0 (schrikkeljaar)
        jaar3 = 0
        JaarDev4 = JaarDev4 + 1             ; JaarDev ophogen met 1 
        HBusOut PCF8583w, $10, [ JaarDev4, jaar3 ]
    End If
 
    Select Case Weekdag
        Case 0
            Str WeekdagString = "Zo"
        Case 1
            Str WeekdagString = "Ma"                                                    
        Case 2
            Str WeekdagString = "Di"
        Case 3
            Str WeekdagString = "Wo"
        Case 4
            Str WeekdagString = "Do"
        Case 5
            Str WeekdagString = "Vr"
        Case 6
            Str WeekdagString = "Za"
         Case 7
            Str WeekdagString = "Zo"    
    End Select
 
    Select Case Maand
        Case 1
            Str MaandString = "Jan"
        Case 2
            Str MaandString = "Feb"    
        Case 3
            Str MaandString = "Mar"
        Case 4
            Str MaandString = "Apr"    
        Case 5
            Str MaandString = "Mei"
        Case 6
            Str MaandString = "Jun"    
        Case 7
            Str MaandString = "Jul"
        Case 8
            Str MaandString = "Aug"    
        Case 9
            Str MaandString = "Sep"
        Case 10
            Str MaandString = "Okt"    
        Case 11
            Str MaandString = "Nov"
        Case 12
            Str MaandString = "Dec"
    End Select
Return  

setTime:                   ;Wordt in dit voorbeeld alleen gebruikt om lege PCF8583 te vullen
 
    Seconden = 00          ;Waarden voor "Do 28 Feb 2012  23:59:55" (testen schrikkeldag)
    Minuten = 10
    Uren = 9
    Dag = 23
    Maand = 2
    Jaar = 2014
    Weekdag = 7           ; Zondag                                               
 
    dummy=Seconden/10     ;dummy is tientallen van Seconden
    dummy=dummy*16        ;waarde doorschuiven naar de vier MSB
    secs=Seconden//10     ;secs is eenheden van Seconden 
    secs=secs | dummy     ;Bitwise OR combineert beide waarden in een byte
 
    dummy=Minuten/10
    dummy=dummy*16
    mins=Minuten//10
    mins=mins | dummy
 
    dummy=Uren/10
    dummy=dummy*16
    hrs=Uren//10
    hrs=hrs | dummy
 
    JaarVier = (Jaar - 2000) // 4                                   'rest van Jaar-2000 gedeelt door 4
    YearDays = (JaarVier << 6) +  ((Dag / 10) << 4) + (Dag // 10)
    JaarDev4 = ((Jaar - 2000) / 4)                                   ;Integer van Jaar-2000 gedeeld door 4 
 
    WeekDayMonths = (Weekdag << 5) + ((Maand/10) << 4) + (Maand //10)
 
    HBusOut PCF8583w, $02, [ secs,mins,hrs, YearDays,WeekDayMonths ]
    HBusOut PCF8583w, $10, [ JaarDev4 ]
Return

Active Topics

» Atoomklok
» De tuin.
» Werkplaatsinrichting
» Subaru Outback 2016
» ? => Mini kerstlan...
» ATSAMD21J18A-AU backupen
» De gevolgen van een kl...
» Afstandsbediening plaf...
» Virtual Chemist probleem
» Probleem met Toyota Av...

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2023 SchemaTheek
Laadtijd: 0.09209 sec.