Na uren en uren zoeken heb ik hoofdpijn gekregen door een niet werkende schakeling.

Ik probeer deze schakeling te maken maar dan met een 16F877A.

Maar de tijd blijft gewoon op 00:00:00 staan, ik kan deze wijzigen maar als er terug naar het hoofdscherm wordt gegaan staat alles terug op 00:00:00.


Device 16F877A
Declare XTAL 4 
Declare LCD_TYPE 0
Declare LCD_INTERFACE 4
Declare LCD_LINES 4 
Declare LCD_DTPIN PORTB.0
Declare LCD_RSPIN PORTC.1 
Declare LCD_ENPIN PORTC.0
'trisa=0
  'RTC 
        
ALL_DIGITAL=true ' Alle porten digitaal

TRISB=%11110000 'make make MSB of portb outputs for LCD data lines(others as inputs)
TRISC=%11111100 'make pins used for RS and EN outputs

'Relais
Symbol  Power        =  PORTD.0     : TRISD.0 = 0
Symbol  Startpuls    =  PORTD.1     : TRISD.1 = 0

'Knoppen
Symbol  Knop_U       =  PORTA.0     : TRISA.0 = 1 
Symbol  Knop_R       =  PORTA.1     : TRISA.1 = 1 
Symbol  Knop_E       =  PORTA.2     : TRISA.2 = 1            
Symbol  Knop_L       =  PORTA.3     : TRISA.3 = 1
Symbol  Knop_D       =  PORTA.4     : TRISA.4 = 1 



'Real time clock
Symbol  Reg_Seconden =  $00 
Symbol  Reg_Minuten  =  $01
Symbol  Reg_Uren     =  $02
Symbol  Reg_Dag      =  $03
Symbol  Reg_Datum    =  $04
Symbol  Reg_Maand    =  $05
Symbol  Reg_Jaar     =  $06
Symbol  Reg_Min_on   =  $08
Symbol  Reg_Uren_on  =  $09
Symbol  Reg_Min_off  =  $10
Symbol  Reg_Uren_off =  $11
Symbol  Lezen        =  %11010001
Symbol  Schrijven    =  %11010000
Symbol  SDA          =  PORTD.3
Symbol  SLC          =  PORTC.4
'declare scl_pin   portc.4
'declare SDA_pin   portd.3

Dim     Seconden        As Byte
Dim     Minuten         As Byte
Dim     Uren            As Byte
Dim     Datum           As Byte
Dim     Maand           As Byte
Dim     Jaar            As Byte
Dim     Min_On          As Byte
Dim     Uur_On          As Byte
Dim     Min_Off         As Byte
Dim     Uur_Off         As Byte
Dim     bcd_in          As Byte
Dim     bcd_uit         As Byte 

'Statusbits
Dim     Power_status    As Bit

'Menu
Dim     Menu_Item       As Byte

'Afsluiten
Dim     Uitschakeltijd  As Byte

'Timer
Dim     Timer_OnOff     As Bit
Dim     temp            As Byte

'Tijd instellen
Dim     Tijd[6]         As Byte
Dim     Max_Val         As Byte
Dim     Temp_Tijd       As Byte
'****************************************************************
Clear
Cls
DelayMS 500
                '1234567890123456
Print At 1,2,  "Verwarming CTRL V1"
Print At 2,2,  ""

DelayMS 1000
'****************************************************************



Main:

    Cls
    DelayMS 200
    While 1 = 1
        I2CIN  SDA, SLC, Lezen, Reg_Uren,       [Uren] 
        I2CIN  SDA, SLC, Lezen, Reg_Minuten,    [Minuten]
        I2CIN  SDA, SLC, Lezen, Reg_Seconden,   [Seconden] 
        bcd_in      = Uren
        GoSub         bcd_to_bin 
        Uren        = bcd_uit
        bcd_in      = Minuten
        GoSub         bcd_to_bin
        Minuten     = bcd_uit
        bcd_in      = Seconden
        GoSub         bcd_to_bin
        Seconden    = bcd_uit
        Print At 1,1, DEC2 Uren, ":",  DEC2 Minuten, ":", DEC2 Seconden
        
        GoSub Tijd_Controleren
        
        If Power_status = 1 Then
            Print At 1,10, "CV: AAN "
        Else
            Print At 1,10, "CV: AF "
        EndIf    
        
        I2CIN  SDA, SLC, Lezen, Reg_Jaar, [Jaar]
        I2CIN  SDA, SLC, Lezen, Reg_Maand, [Maand]
        I2CIN  SDA, SLC, Lezen, Reg_Datum, [Datum]     
        bcd_in      = Jaar
        GoSub         bcd_to_bin 
        Jaar        = bcd_uit
        bcd_in      = Maand
        GoSub         bcd_to_bin
        Maand       = bcd_uit
        bcd_in      = Datum
        GoSub         bcd_to_bin
        Datum       = bcd_uit    
        Print At 2,1, DEC2 Datum, "/",  DEC2 Maand, "/", DEC2 Jaar
        Print At 2,10, "-MENU-"
                
        If Knop_E = 0 Then
            DelayMS 20
            While Knop_E = 0: Wend
            GoTo Menu
        EndIf
        
        DelayMS 200
    Wend
GoTo Main
'****************************************************************
Menu:

    Cls
    DelayMS 200
    Print At 1,1, "MENU: ->"
    Menu_Item = 0    
    While 1 = 1
        Select Menu_Item
            Case 0
                If Power_status = 0 Then
                    Print At 1,10, "START CV   "
                Else
                    Print At 1,10, "STOP CV    "
                EndIf 
                If Timer_OnOff = 0 Then    
                    Print At 2,10, "TIMER AAN  " 
                 Else
                    Print At 2,10, "TIMER AF   " 
                EndIf   
            Case 1
                If Timer_OnOff  = 0 Then    
                    Print At 1,10, "TIMER      " 
                 Else
                    Print At 1,10, "TIMER AF   " 
                EndIf   
                Print At 2,10, "INST. KLOK     "
            Case 2    
                Print At 1,10, "INST. KLOK     "
                Print At 2,10, "INST. TIMER    "
            Case 3    
                Print At 1,10, "INST. TIMER    "
                Print At 2,10, "TERUG          "
            Case 4
                Print At 1,10, "TERUG          "
                If Power_status = 0 Then
                    Print At 2,10, "START CV       "
                Else
                    Print At 2,10, "STOP CV    "
                EndIf 
        EndSelect  
        'Bladeren in menu:
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Menu_Item < 4 Then
                Inc Menu_Item
            Else 
               Menu_Item = 0
            EndIf 
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            Else 
               Menu_Item = 4
            EndIf
        EndIf
        'Menu item enteren
        If Knop_E = 0 Then 
            DelayMS 20 
            While Knop_E = 0: Wend
            Select Menu_Item
                Case 0
                    'Pc opstarten/afsluiten overwrite
                    GoTo Pc_boot
                Case 1
                    'Timer opzetten voor vanavond downloaden
                    GoTo tmr_op
                Case 2    
                    'Tijd op de klok aanpassen
                    GoTo Pas_Tijd_Aan
                Case 3    
                    'Tijd "aan" tijd van de pc aanpassen
                    GoTo Aan_Tijd
                Case 4
                    'Terug naar het begin scherm
                    GoTo Main
            EndSelect    
        EndIf
    Wend 
GoTo Main
'****************************************************************
Pc_boot:

    Cls
    DelayMS 200
    If Power_status = 0 Then
        'Inschakelen
                      '1234567890123456
        Print At 1,1, "START...            "
        GoSub Pc_aan      'Spanning opzetten
        DelayMS 1500      'Wachten tot voeding opgestart is
        GoSub Puls_uit    'Puls voor pc te doen booten
    Else
        'Uitschakelen
                      '1234567890123456
        Print At 1,1, "STOP...            "
        Print At 2, 1, Rep "-"\16
        GoSub Puls_uit    'Pc een puls geven om te doen afsluiten
        'Nu moet er 160 sec gewacht worden voordat de spanning wordt uitgeschakeld
        'Uitschakeltijd uitrekenen:
        For Uitschakeltijd = 0 To 160 
            Print At 2,1, Rep 255\ (Uitschakeltijd / 10 ) + 1
            'Print At 1,1, dec3 16* (100/Uitschakeltijd)
            DelayMS 1000  
        Next
        GoSub Pc_uit      'Spanning uitzetten 
    EndIf      
GoTo Main
'****************************************************************
tmr_op:  


    Cls
    DelayMS 200
    If Timer_OnOff = 0 Then
        Print At 1, 5, "TIMER AAN      "
        Timer_OnOff = 1
        DelayMS 1000
    Else
        Print At 1, 5, "TIMER AF       "
        Timer_OnOff = 0
        DelayMS 1000
    EndIf
GoTo Main
'****************************************************************
Pas_Tijd_Aan:

    'Tijd RTC aanpassen
    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Uren,       [Uren] 
    I2CIN  SDA, SLC, Lezen, Reg_Minuten,    [Minuten]
    I2CIN  SDA, SLC, Lezen, Reg_Seconden,   [Seconden] 
    
    Tijd[0]     = Uren >> 4
    Tijd[1]     = Uren & %00001111
    Tijd[2]     = Minuten >> 4
    Tijd[3]     = Minuten & %00001111
    Tijd[4]     = Seconden >> 4
    Tijd[5]     = Seconden & %00001111
          
    Menu_Item = 0
    While 1 = 1
        Print At 1,1, "TIJD: ", Dec Tijd[0], Dec Tijd[1], ":", Dec Tijd[2], Dec Tijd[3], ":", Dec Tijd[4], Dec Tijd[5]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "      ^         "
                Max_Val = 2
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "       ^        "
                If Tijd[0] = 2 Then
                    Max_Val = 3
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "         ^      "
                Max_Val = 5
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "          ^     "
                Max_Val = 9
            'Seconden
            Case 4
                'tijd[4] aanpassen
                              '1234567890123456
                Print At 2,1, "            ^   "
                Max_Val = 5
            Case 5
                'tijd[5] aanpassen
                              '1234567890123456
                Print At 2,1, "             ^  "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 5 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,4, "TIJD OPSLAAN     "    
    'Tijd wegschrijven
    Uren        = Tijd[0] << 4
    Uren        = Uren + Tijd[1]
    I2COUT SDA, SLC, Schrijven ,Reg_Uren, [Uren]
    Minuten     = Tijd[2] << 4
    Minuten     = Minuten + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Minuten, [Minuten]
    Seconden    = Tijd[4] << 4
    Seconden    = Seconden + Tijd[5]
    I2COUT SDA, SLC, Schrijven ,Reg_Seconden, [Seconden]
    DelayMS 1000
    
    'Datum RTC aanpassen
    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Datum, [Datum]
    I2CIN  SDA, SLC, Lezen, Reg_Maand, [Maand]
    I2CIN  SDA, SLC, Lezen, Reg_Jaar, [Jaar]
    
    Tijd[0]     = Datum >> 4
    Tijd[1]     = Datum & %00001111
    Tijd[2]     = Maand >> 4
    Tijd[3]     = Maand & %00001111
    Tijd[4]     = Jaar >> 4
    Tijd[5]     = Jaar & %00001111          
    
    Menu_Item = 0
    While 1 = 1
        Print At 1,1, "DATUM: ", Dec Tijd[0], Dec Tijd[1], "/", Dec Tijd[2], Dec Tijd[3], "/", Dec Tijd[4], Dec Tijd[5]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "      ^             "
                Max_Val = 3
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "       ^            "
                If Tijd[0] = 3 Then
                    Max_Val = 1
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "         ^          "
                Max_Val = 1
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "          ^         "
                If Tijd[0] = 1 Then
                    Max_Val = 2
                Else
                    Max_Val = 9
                EndIf
            'Seconden
            Case 4
                'tijd[4] aanpassen
                              '1234567890123456
                Print At 2,1, "            ^       "
                Max_Val = 9
            Case 5
                'tijd[5] aanpassen
                              '1234567890123456
                Print At 2,1, "             ^      "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 5 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,4, "DATUM OPSLAAN    "  
   'Tijd wegschrijven
    Datum       = Tijd[0] << 4
    Datum       = Datum + Tijd[1] 
    I2COUT SDA, SLC, Schrijven ,Reg_Datum, [Datum]
    Maand       = Tijd[2] << 4
    Maand       = Maand + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Maand, [Maand]
    Jaar        = Tijd[4] << 4
    Jaar        = Jaar + Tijd[5]
    I2COUT SDA, SLC, Schrijven ,Reg_Jaar, [Jaar]
    
    DelayMS 1000
    Cls
GoTo Main
'****************************************************************
Aan_Tijd:

    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Uren_on,   [Uren] 
    I2CIN  SDA, SLC, Lezen, Reg_Min_on,    [Minuten] 
    
    Tijd[0]     = Uren >> 4
    Tijd[1]     = Uren & %00001111
    Tijd[2]     = Minuten >> 4
    Tijd[3]     = Minuten & %00001111
          
    Menu_Item = 0
    While 1 = 1         
        Print At 1,1, "AAN: ", Dec Tijd[0], Dec Tijd[1], ":", Dec Tijd[2], Dec Tijd[3]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "    ^               "
                Max_Val = 2
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "     ^              "
                If Tijd[0] = 2 Then
                    Max_Val = 3
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "       ^            "
                Max_Val = 5
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "        ^           "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 3 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,2, "OPSLAAN START TIJD  "    
    'Tijd wegschrijven
    Uren        = Tijd[0] << 4
    Uren        = Uren + Tijd[1]
    I2COUT SDA, SLC, Schrijven ,Reg_Uren_on, [Uren]
    Minuten     = Tijd[2] << 4
    Minuten     = Minuten + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Min_on, [Minuten]
    DelayMS 1000

    'Uit tijd
    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Uren_off,   [Uren] 
    I2CIN  SDA, SLC, Lezen, Reg_Min_off,    [Minuten] 
    
    Tijd[0]     = Uren >> 4
    Tijd[1]     = Uren & %00001111
    Tijd[2]     = Minuten >> 4
    Tijd[3]     = Minuten & %00001111
          
    Menu_Item = 0
    While 1 = 1
        Print At 1,1, "AF: ", Dec Tijd[0], Dec Tijd[1], ":", Dec Tijd[2], Dec Tijd[3]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "     ^              "
                Max_Val = 2
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "      ^             "
                If Tijd[0] = 2 Then
                    Max_Val = 3
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "        ^           "
                Max_Val = 5
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "         ^          "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 3 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,2, "OPSLAAN EIND TIJD    "    
    'Tijd wegschrijven
    Uren        = Tijd[0] << 4
    Uren        = Uren + Tijd[1]
    I2COUT SDA, SLC, Schrijven ,Reg_Uren_off, [Uren]
    Minuten     = Tijd[2] << 4
    Minuten     = Minuten + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Min_off, [Minuten]
    DelayMS 1000    

GoTo Main
'****************************************************************
Subroutines:

    '************************************************************
    Puls_uit:

        High Startpuls
        DelayMS 1000
        Low Startpuls  
    Return   
    '************************************************************
    Pc_aan:

        High Power
        Power_status = 1
    Return
    '************************************************************ 
    Pc_uit:

        Low Power 
        Power_status = 0
    Return  
    '************************************************************
    bcd_to_bin:

        bcd_uit = bcd_in >> 4
        bcd_uit = bcd_uit * 10
        bcd_in = bcd_in & %00001111 
        bcd_uit = bcd_uit + bcd_in 
    Return
    '************************************************************
    Tijd_Controleren:

        If Timer_OnOff = 1 Then
            I2CIN  SDA, SLC, Lezen, Reg_Min_on,    [Min_On]
            I2CIN  SDA, SLC, Lezen, Reg_Uren_on,   [Uur_On] 
            
            temp        = Uur_On & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Uur_On      = Uur_On & %00001111
            Uur_On      = Uur_On + temp
            
            temp        = Min_On & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Min_On      = Min_On & %00001111
            Min_On      = Min_On + temp

            If Minuten = Min_On And Uren = Uur_On And Seconden = 0 Then
                Cls
                DelayMS 200
                'Inschakelen
                              '1234567890123456
                Print At 1,1, "STARTEN             "
                GoSub Pc_aan      'Spanning opzetten
                DelayMS 1500      'Wachten tot voeding opgestart is
                GoSub Puls_uit    'Puls voor pc te doen booten
                Timer_OnOff = 0
                Cls
            EndIf  
        EndIf 
        If Power_status = 1 Then
            I2CIN  SDA, SLC, Lezen, Reg_Min_off,    [Min_Off]
            I2CIN  SDA, SLC, Lezen, Reg_Uren_off,   [Uur_Off]  
            
            temp        = Uur_Off & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Uur_Off     = Uur_Off & %00001111
            Uur_Off     = Uur_Off + temp
            
            temp        = Min_Off & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Min_Off     = Min_Off & %00001111
            Min_Off     = Min_Off + temp
            
            If Minuten = Min_Off And Uren = Uur_Off And Seconden = 0 Then
                'Uitschakelen
                              '1234567890123456
                Print At 1,1, "STOPPEN             "
                Print At 2, 1, Rep "-"\16
                GoSub Puls_uit    'Pc een puls geven om te doen afsluiten
                'Nu moet er 160 sec gewacht worden voordat de spanning wordt uitgeschakeld
                'Uitschakeltijd uitrekenen:
                For Uitschakeltijd = 0 To 160 
                    Print At 2,1, Rep 255\ (Uitschakeltijd / 10 ) + 1
                    'Print At 1,1, dec3 16* (100/Uitschakeltijd)
                    DelayMS 1000  
                Next
                GoSub Pc_uit      'Spanning uitzetten 
                Cls
            EndIf  
        EndIf                    
    Return
'****************************************************************
End

Kan me vergissen, maar als mijn ogen mij niet bedriegen mis ik twee pull-up weerstanden in het schema, en wel aan de I2C bus (SCL & SDA lijnen)

en de code is een kopie van het orgineel??
(nog al veel en geen tijd om alles door te spitten a.t.m.)

Ik heb 2 4,7 weerstanden als pullup.
De code is aangepast voor een 877A.

Mvg,
David

Maak eerst code en commentaar kloppend, dat werkt wat makkelijker. Dit klopt in ieder geval niet:

TRISB=%11110000 'make make MSB of portb outputs for LCD data lines(others as inputs)

Zorgt eerst voor een klein programma, hierin is niet de fout te vinden!

wat je ook moet doen is ervoor zorgen dat je kristal aanstaat.

bij mij stond deze ook uit heb uren lopen zoeken!


BusOut %11010000, $00, [%00000000] ;DS1307 aanzetten

zo zet je de Kristal aan.

Ik voel me stom, maar ik het het gevonden.

Blijkbaar was er een brugje van het breadboard niet doorverbonden.

Lang leven de broodbordjes ;)