Adding minutes from i2c eeprom

ac21

Member
I have a program that counts hours and minutes when slot 1 runs, when the program shuts down it stores hours info in i2c eeprom like so

Code:
[color=Blue]setfreq em32[/color]
[color=Navy]#slot 1[/color]
[color=Green];#terminal 38400[/color]
[color=Navy]#no_data
#no_table[/color]

[color=Black]keeptime:
      [/color][color=Blue]do
      if [/color][color=Purple]pinC.5 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then gosub [/color][color=Black]xxsecs  [/color][color=Green]; 1hz signal 
      [/color][color=Blue]if [/color][color=Purple]pinC.7 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]shutdown      [/color][color=Green]; button to shut down timer      
      [/color][color=Blue]loop
      end[/color]



[color=Black]xxhours:
      [/color][color=Purple]b22 [/color][color=DarkCyan]= [/color][color=Navy]0[/color]
[color=Green];     inc b23
     [/color][color=Purple]w12 [/color][color=DarkCyan]= [/color][color=Navy]0
     [/color][color=Blue]hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%10101110[/color][color=Black], [/color][color=Blue]i2cslow[/color][color=Black], [/color][color=Blue]i2cword
      
          hi2cin [/color][color=Navy]0[/color][color=Black], [/color][color=Blue]([/color][color=Purple]b24[/color][color=Black],[/color][color=Purple]b25[/color][color=Blue])
          pause [/color][color=Navy]100
          [/color][color=Blue]inc [/color][color=Purple]w12
          [/color][color=Blue]hi2cout [/color][color=Navy]0[/color][color=Black], [/color][color=Blue]([/color][color=Purple]b24[/color][color=Black],[/color][color=Purple]b25[/color][color=Blue])
      pause [/color][color=Navy]100
            
      [/color][color=Blue]return[/color]
[color=Black]xxmins:
      [/color][color=Purple]b21 [/color][color=DarkCyan]= [/color][color=Navy]0
      [/color][color=Blue]inc [/color][color=Purple]b22

      
      [/color][color=Blue]if [/color][color=Purple]b22 [/color][color=DarkCyan]= [/color][color=Navy]60 [/color][color=Blue]then gosub [/color][color=Black]xxhours
      [/color][color=Blue]return[/color]
[color=Black]xxsecs:


              [/color][color=Blue]for [/color][color=Black]index [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]to [/color][color=Navy]25 
         [/color][color=Blue]pause [/color][color=Navy]200      
         [/color][color=Blue]if [/color][color=Purple]pinC.7 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]shutdown     [/color][color=Green]; button to shut down timer     
          [/color][color=Blue]next [/color][color=Black]index

      [/color][color=Blue]inc [/color][color=Purple]b21
      [/color][color=Blue]if [/color][color=Purple]b21 [/color][color=DarkCyan]= [/color][color=Navy]60 [/color][color=Blue]then gosub [/color][color=Black]xxmins
      [/color][color=Blue]return[/color]

[color=Black]shutdown:[/color]
[color=Blue]run 1[/color][color=Navy][/color]
[color=Blue]end[/color]
in slot 0
i recall this info
Code:
[color=Blue]hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%10101110[/color][color=Black], [/color][color=Blue]i2cslow[/color][color=Black], [/color][color=Blue]i2cword

     hi2cin [/color][color=Navy]0[/color][color=Black], [/color][color=Blue]([/color][color=Purple]b24[/color][color=Black],[/color][color=Purple]b25[/color][color=Blue])
     pause [/color][color=Navy]100[/color]
but only hours..i want to also store mins to recall so i decided the best way was to store all the current info (hours and minutes) at the shutdown: label before the other slot starts. This way I'll reduce the amount of writes to eeprom.
The problem is i cant find a good way to intake the minutes info from eeprom and add the minutes.

The changes i would make would be something like this
Code:
[color=Blue]setfreq em32[/color]
[color=Navy]#slot 1[/color]
[color=Green];#terminal 38400[/color]
[color=Navy]#no_data
#no_table[/color]

[color=Black]keeptime:
      [/color][color=Blue]do
      if [/color][color=Purple]pinC.5 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then gosub [/color][color=Black]xxsecs  [/color][color=Green]; 1hz signal 
      [/color][color=Blue]if [/color][color=Purple]pinC.7 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]shutdown      [/color][color=Green]; button to shut down timer      
      [/color][color=Blue]loop
      end[/color]



[color=Black]xxhours:
      [/color][color=Purple]b22 [/color][color=DarkCyan]= [/color][color=Navy]0
      [/color][color=Blue]inc [/color][color=Purple]b23     
      [/color][color=Blue]return[/color]
[color=Black]xxmins:
      [/color][color=Purple]b21 [/color][color=DarkCyan]= [/color][color=Navy]0
      [/color][color=Blue]inc [/color][color=Purple]b22
      [/color][color=Blue]if [/color][color=Purple]b22 [/color][color=DarkCyan]= [/color][color=Navy]60 [/color][color=Blue]then gosub [/color][color=Black]xxhours
      [/color][color=Blue]return[/color]
[color=Black]xxsecs:


              [/color][color=Blue]for [/color][color=Black]index [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]to [/color][color=Navy]25 
         [/color][color=Blue]pause [/color][color=Navy]200      
         [/color][color=Blue]if [/color][color=Purple]pinC.7 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]shutdown     [/color][color=Green]; button to shut down timer     
          [/color][color=Blue]next [/color][color=Black]index

      [/color][color=Blue]inc [/color][color=Purple]b21
      [/color][color=Blue]if [/color][color=Purple]b21 [/color][color=DarkCyan]= [/color][color=Navy]60 [/color][color=Blue]then gosub [/color][color=Black]xxmins
      [/color][color=Blue]return[/color]

[color=Black]shutdown:[/color]

[color=Green]; here i would pull the info from eeprom and add it to the current count and store it to recall in slot 1[/color]
[color=Blue]run [/color][color=Navy]1[/color]
[color=Blue]end[/color]
I cant figure out how i'm going to take minutes from eeprom and add it to the current minutes in the program then divide by 60(if more then) and set the reminder of minutes and add that hour.

Code:
[color=Black]shutdown:
     [/color][color=Blue]hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%10101110[/color][color=Black], [/color][color=Blue]i2cslow[/color][color=Black], [/color][color=Blue]i2cword
      
          hi2cin [/color][color=Navy]10[/color][color=Black], [/color][color=Blue]([/color][color=Purple]b0[/color][color=Blue]) [/color][color=Green]; recall min from eeprom
      [/color][color=Purple]b22 [/color][color=DarkCyan]= [/color][color=Purple]b0 [/color][color=DarkCyan]+ [/color][color=Purple]b22         [/color][color=Green]; add both 
     ;if b22 is > 60 i want to inc b23 and write to eeprom the reminder 
      [/color][color=Blue]hi2cout [/color][color=Navy]10[/color][color=Black], [/color][color=Blue]([/color][color=Purple]b22[/color][color=Blue])

                hi2cin [/color][color=Navy]0[/color][color=Black], [/color][color=Blue]([/color][color=Purple]b0[/color][color=Blue]) [/color][color=Green]; recall hours from eeprom
      [/color][color=Purple]w0 [/color][color=DarkCyan]= [/color][color=Purple]b0 [/color][color=DarkCyan]+ [/color][color=Purple]b23         [/color][color=Green]; add both plus if adding mins = > 60 add 1
      [/color][color=Blue]hi2cout [/color][color=Navy]0[/color][color=Black], [/color][color=Blue]([/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Blue])
run [/color][color=Navy]1[/color]
[color=Blue]end[/color]
 

hippy

Technical Support
Staff member
I cant figure out how i'm going to take minutes from eeprom and add it to the current minutes in the program then divide by 60(if more then) and set the reminder of minutes and add that hour.
I have to admit that I don't find it very easy to understand what is is you are attempting to achieve or how you are going about doing it.

I think I can see what you are trying to do but it seems a messy way to do things and it would help if you gave meaningful names to your variables.

If I'm right you are keeping an elapsed, hour, minutes and seconds count while the loop runs, and when the button is pushed you want to add that to the previously elapsed time in Eeprom ?

Code:
HI2CIN from EEPROM, lastHours, lastMinutes, lastSeconds
lastSeconds = lastSeconds + elapsedSeconds
If lastSeconds > 60 Then
  lastMinutes = lastSeconds / 60 + lastMinutes
  lastSeconds = lastSeconds // 60
End If
lastMinutes = lastMinutes + elapsedMinutes
If lastMinutes > 60 Then
  lastHours = lastMinutes / 60 + lastHour
  lastMinutes = lastMinutes // 60
End If
lastHour = lastHours + elapsedHours
... ??? ...
HI2COUT to EEPROM, lastHours, lastMinutes, lastSeconds
 
Top