RTC DS1307 obsługa

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

RTC DS1307 obsługa

Post autor: Michał6201 » 27 kwie 2024, 21:58

Cześć
Czy ma ktoś z Was działąjący program do odczytu/zapisu czasu i daty dla DS1307?

Próbuję go uruchomić, ale wygląda jakby był zablokowany.
No nic nie działa. Co najwyżej wyświetla się 0 : 0 : 80

Mam taki kod, ale on nie działa, tzn sekundy zmieniają się co kilkanaście minut.
  1. ' #########################################
  2. ' ###### RTC DS1307 #######################
  3. ' #########################################
  4.  
  5.   $regfile = "m128def.dat"
  6. $crystal = 16000000
  7. $hwstack = 128
  8. $swstack = 128
  9. $framesize = 128
  10.  
  11. $lib "mcsbyte.lbx"                                          ' for smaller code
  12. $lib "ds1307clock.lib"                                      ' modified lib
  13.  
  14. '##################################     Konfiguracja LCD 240x320 STEROWNIK ILI9341     #######################################
  15. '#############################################################################################################################
  16.  
  17. 'Designate the connection port of LCD: Cs1 = [CS] , Rst = [RESET] , A0 = [DC] , Si = [SDI] , Sclk = [SCK]
  18.  
  19.     CONFIG Graphlcd = Color , Cs1 = PortB.0 , Rst = PortB.4 , A0 = PortB.3 , Si = PortB.2 , Sclk = PortB.1
  20.     CONST Portrait = 0                   'LCD screen. (0: Landscape [X=320, Y=240], 1: Portrait [X=240, Y=320])
  21.     CONST Rotate_180 = 1                 'LCD screen 180 degree rotation. (0: connector Upper side, 1: connector Lower side)
  22.     DIM Offset256 As Byte                'LCD address offset flag. (0:0-255 , 1:256-319)
  23.     $LIB "glcd-ILI9341_2R8_240x320.lib"  'Biblioteka do obsługi wyświetlacza LCD ILI9341
  24.     INITLCD  ' inicjalizacja lcd
  25.     CLS      ' czyszczenie lcd
  26.  
  27.  
  28.     'SETFONT Color8x8
  29.     SETFONT Color16x16
  30.  
  31.     ' Kolory czcionek
  32.   Const Black = &B0000_0000
  33.   Const Red = &B1110_0000
  34.   Const Green = &B0001_1100
  35.   Const Blue = &B0000_0011
  36.   Const Magenta = &B1110_0011
  37.   Const Yellow = &B1111_1100
  38.   Const Cyan = &B0001_1111
  39.   Const White = &B1111_1111
  40.   Const Orange = &B1111_0100
  41.   Const Brightgreen = &B0011_1110
  42.   Const Brightblue = &B0001_1111
  43.   Const Darkred = &B1100_0000
  44.   Const Darkgreen = &B0001_0100
  45.   Const Darkblue = &B0000_0010
  46.   Const Gray = &B1011_0001
  47.   Const Olive = &B10001000
  48.   Const Darkgray = &B10001001
  49.   Const Navyblue = &B01001001
  50.  
  51.              Offset256 = 0   ' 1 - mały, 0 - duży
  52.              Boxfill(0 , 0) - (255 , 240) , Black
  53.  
  54.              Offset256 = 1
  55.              Boxfill(0 , 0) - (65 , 239) , Black
  56.  
  57. '#############################################################################################################################
  58. '#############################################################################################################################
  59.  
  60.  
  61. ' Konfiguracja I2C
  62. $lib "i2c_twi.lbx"
  63. Config Scl = PortD.0
  64. Config Sda = PortD.1
  65. I2cinit
  66. Config Twi = 100000
  67. Const Ds1307w = &HD0                                        ' Adres DS 1307 Write
  68. Const Ds1307r = &HD1                                        ' Adres DS 1307 Read
  69. Config Submode = New                                        'nowy tryb deklaracji procedur
  70.  
  71. Config POrTA.0 = Input : PORTA.0 = 1 : S1 Alias PINA.0 ' S1
  72. Config POrTA.1 = Input : PORTA.1 = 1 : S2 Alias PINA.1 'S2
  73. Config POrTA.3 = Input : PORTA.3 = 1 : S3 Alias PINA.3 'S3
  74.  
  75.  
  76.  
  77. Dim Sekundy As Byte
  78. Dim Minuty As Byte
  79. Dim Godziny As Byte
  80. Dim Weekday As Byte
  81. Dim Dzien As Byte
  82. Dim Miesiac As Byte
  83. Dim Rok As Byte
  84. Declare Sub Getdatetime
  85. Declare Sub Settime
  86.  
  87.  
  88. ' 1 Hz SQW Output
  89. I2cstart
  90. I2cwbyte Ds1307w
  91. I2cwbyte &H07
  92. I2cwbyte &B10010000
  93. I2cstop
  94.  
  95. Do
  96. Offset256 = 0 'LCD address offset value. (0: 0-255)
  97.  
  98. Call Getdatetime
  99.  
  100. 'Lcdat 20 , 1 , Bcd(_day) ; "/" ; Bcd(_month) ; "/" ; Bcd(_year) , Gray , Black
  101. Lcdat 40 , 1 , Bcd(Godziny) ; ":" ; Bcd(Minuty) ; ":" ; Bcd(Sekundy) , Gray , Black
  102.  
  103. Loop
  104. End
  105.  
  106. Getdatetime:
  107.   I2cstart                                                  ' Generate start code
  108.   I2cwbyte Ds1307w                                          ' send address
  109.   I2cwbyte 0                                                ' start address in 1307
  110.   I2cstart                                                  ' Generate start code
  111.   I2cwbyte Ds1307r                                          ' send address
  112.   I2crbyte Sekundy , Ack
  113.   I2crbyte Minuty , Ack                                     ' MINUTES
  114.   I2crbyte Godziny , Ack                                    ' Hours
  115.   I2crbyte Weekday , Ack                                    ' Day of Week
  116.   I2crbyte Dzien , Ack                                      ' Day of Month
  117.   I2crbyte Miesiac , Ack                                    ' Month of Year
  118.   I2crbyte Rok , Nack
  119.   I2cstop
  120. Sekundy = Makedec(sekundy)
  121. Minuty = Makedec(minuty)
  122. Godziny = Makedec(godziny)
  123. Dzien = Makedec(dzien)
  124. Miesiac = Makedec(miesiac)
  125. Rok = Makedec(rok)
  126. Return
  127.  
  128. ' ##################################     Fonty     #########################################
  129. $INCLUDE "color8x8.font"
  130. $INCLUDE "color16x16.font"
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: RTC DS1307 obsługa

Post autor: Pikczu » 27 kwie 2024, 22:18

Biblioteka do DS1307 jest dziale biblioteki wystarczy poszukać.
viewtopic.php?f=13&t=40#p108
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: RTC DS1307 obsługa

Post autor: Michał6201 » 27 kwie 2024, 22:46

Tylko że ja nie wiem jak użyć tej biblioteki w programie. Help załączony do biblioteki jest dla mnie niezrozumiały. Szkoda że autor nie zamieścił przykładowego programu jak używać tej jego biblioteki.


Teraz ruszył zegar, ale błędnie wyświetla co którąś sekundę lub minutę
  1. ' #########################################
  2. ' ###### RTC DS1307 #######################
  3. ' #########################################
  4.  
  5.   $regfile = "m128def.dat"
  6. $crystal = 16000000
  7. $hwstack = 128
  8. $swstack = 128
  9. $framesize = 128
  10.  
  11. $lib "mcsbyte.lbx"                                          ' for smaller code
  12. $lib "ds1307clock.lib"                                      ' modified lib
  13.  
  14. '##################################     Konfiguracja LCD 240x320 STEROWNIK ILI9341     #######################################
  15. '#############################################################################################################################
  16.  
  17. 'Designate the connection port of LCD: Cs1 = [CS] , Rst = [RESET] , A0 = [DC] , Si = [SDI] , Sclk = [SCK]
  18.  
  19.     CONFIG Graphlcd = Color , Cs1 = PortB.0 , Rst = PortB.4 , A0 = PortB.3 , Si = PortB.2 , Sclk = PortB.1
  20.     CONST Portrait = 0                   'LCD screen. (0: Landscape [X=320, Y=240], 1: Portrait [X=240, Y=320])
  21.     CONST Rotate_180 = 1                 'LCD screen 180 degree rotation. (0: connector Upper side, 1: connector Lower side)
  22.     DIM Offset256 As Byte                'LCD address offset flag. (0:0-255 , 1:256-319)
  23.     $LIB "glcd-ILI9341_2R8_240x320.lib"  'Biblioteka do obsługi wyświetlacza LCD ILI9341
  24.     INITLCD  ' inicjalizacja lcd
  25.     CLS      ' czyszczenie lcd
  26.  
  27.  
  28.     'SETFONT Color8x8
  29.     SETFONT Color16x16
  30.  
  31.     ' Kolory czcionek
  32.   Const Black = &B0000_0000
  33.   Const Red = &B1110_0000
  34.   Const Green = &B0001_1100
  35.   Const Blue = &B0000_0011
  36.   Const Magenta = &B1110_0011
  37.   Const Yellow = &B1111_1100
  38.   Const Cyan = &B0001_1111
  39.   Const White = &B1111_1111
  40.   Const Orange = &B1111_0100
  41.   Const Brightgreen = &B0011_1110
  42.   Const Brightblue = &B0001_1111
  43.   Const Darkred = &B1100_0000
  44.   Const Darkgreen = &B0001_0100
  45.   Const Darkblue = &B0000_0010
  46.   Const Gray = &B1011_0001
  47.   Const Olive = &B10001000
  48.   Const Darkgray = &B10001001
  49.   Const Navyblue = &B01001001
  50.  
  51.              Offset256 = 0   ' 1 - mały, 0 - duży
  52.              Boxfill(0 , 0) - (255 , 240) , Black
  53.  
  54.              Offset256 = 1
  55.              Boxfill(0 , 0) - (65 , 239) , Black
  56.  
  57. '#############################################################################################################################
  58. '#############################################################################################################################
  59.  
  60.  
  61. ' Konfiguracja I2C
  62. $lib "i2c_twi.lbx"
  63. Config Scl = PortD.0
  64. Config Sda = PortD.1
  65. I2cinit
  66. Config Twi = 100000
  67.  
  68.   Config I2cdelay = 10
  69.  
  70. Const Ds1307w = &HD0                                        ' Adres DS 1307 Write
  71. Const Ds1307r = &HD1                                        ' Adres DS 1307 Read
  72. Config Submode = New                                        'nowy tryb deklaracji procedur
  73.  
  74. Config POrTA.0 = Input : PORTA.0 = 1 : S1 Alias PINA.0 ' S1
  75. Config POrTA.1 = Input : PORTA.1 = 1 : S2 Alias PINA.1 'S2
  76. Config POrTA.3 = Input : PORTA.3 = 1 : S3 Alias PINA.3 'S3
  77.  
  78.  
  79. Declare Sub Getdatetime
  80. Declare Sub Settime
  81.  
  82. Dim Weekday As Byte
  83. Declare Sub Setweekday
  84.  
  85. Config Clock = User
  86. 'Config Date = Dmy , Separator = .
  87.  
  88.  
  89. 'Time$ = "22:44:00"
  90. 'Date$ = "08/05/12"
  91.  
  92. ' 1 Hz SQW Output
  93. I2cstart
  94. I2cwbyte Ds1307w
  95. I2cwbyte &H07
  96. I2cwbyte &B10010000
  97. I2cstop
  98.  
  99. Do
  100. Offset256 = 0 'LCD address offset value. (0: 0-255)
  101.  
  102. Call Getdatetime
  103.  
  104. 'Lcdat 20 , 1 , Bcd(_day) ; "/" ; Bcd(_month) ; "/" ; Bcd(_year) , Gray , Black
  105. 'Lcdat 40 , 1 , Bcd(_hour) ; ":" ; Bcd(_min) ; ":" ; Bcd(_sec) , Gray , Black
  106.  
  107. If S1 = 0 Then
  108. Incr _sec
  109. If _sec > 59 Then _sec = 0
  110. Call Settime
  111. end if
  112.  
  113. Loop
  114. End
  115.  
  116. Getdatetime:
  117.   I2cstart
  118.   I2cwbyte Ds1307w
  119.   I2cwbyte 0
  120.   I2cstart
  121.   I2cwbyte Ds1307r
  122.   I2crbyte _sec , Ack
  123.   I2crbyte _min , Ack
  124.   I2crbyte _hour , Ack
  125.   I2crbyte Weekday , Ack
  126.   I2crbyte _day , Ack
  127.   I2crbyte _month , Ack
  128.   I2crbyte _year , Nack
  129.   I2cstop
  130.   _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  131.   _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
  132.  
  133. Lcdat 20 , 1 , Bcd(_day) ; "/" ; Bcd(_month) ; "/" ; Bcd(_year) , Gray , Black
  134. Lcdat 40 , 1 , Bcd(_hour) ; ":" ; Bcd(_min) ; ":" ; Bcd(_sec) , Gray , Black
  135.  
  136. Return
  137.  
  138. Setdate:
  139.   _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  140.   I2cstart
  141.   I2cwbyte Ds1307w
  142.   I2cwbyte 4
  143.   I2cwbyte _day
  144.   I2cwbyte _month
  145.   I2cwbyte _year
  146.   I2cstop
  147.   Waitms 10
  148. Return
  149.  
  150. Setweekday:
  151.   I2cstart
  152.   I2cwbyte Ds1307w
  153.   I2cwbyte 3
  154.   I2cwbyte Weekday
  155.   I2cstop
  156.   Waitms 10
  157. Return
  158.  
  159. Settime:
  160.   _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  161.   I2cstart
  162.   I2cwbyte Ds1307w
  163.   I2cwbyte 0
  164.   I2cwbyte _sec
  165.   I2cwbyte _min
  166.   I2cwbyte _hour
  167.   I2cstop
  168.   Waitms 10
  169. Return
  170.  
  171. ' ##################################     Fonty     #########################################
  172. $INCLUDE "color8x8.font"
  173. $INCLUDE "color16x16.font"
  174.  
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: RTC DS1307 obsługa

Post autor: Michał6201 » 28 kwie 2024, 1:14

A tutaj załączam działający kod do obsługi RTC DS1307 :)
Obsługi ustawienia daty nie robiłem.
Ustawienie czasu odbywa się za pomocą osobnych przycisków, ale to można zrobić sobie według własnego uznania.


  1.  
  2. ' #########################################
  3. ' ###### RTC DS1307 #######################
  4. ' #########################################
  5.  
  6.   $regfile = "m128def.dat"
  7. $crystal = 16000000
  8. $hwstack = 128
  9. $swstack = 128
  10. $framesize = 128
  11.  
  12. '##################################     Konfiguracja LCD 240x320 STEROWNIK ILI9341     #######################################
  13. '#############################################################################################################################
  14.  
  15. 'Designate the connection port of LCD: Cs1 = [CS] , Rst = [RESET] , A0 = [DC] , Si = [SDI] , Sclk = [SCK]
  16.  
  17.     CONFIG Graphlcd = Color , Cs1 = PortB.0 , Rst = PortB.4 , A0 = PortB.3 , Si = PortB.2 , Sclk = PortB.1
  18.     CONST Portrait = 0                   'LCD screen. (0: Landscape [X=320, Y=240], 1: Portrait [X=240, Y=320])
  19.     CONST Rotate_180 = 1                 'LCD screen 180 degree rotation. (0: connector Upper side, 1: connector Lower side)
  20.     DIM Offset256 As Byte                'LCD address offset flag. (0:0-255 , 1:256-319)
  21.     $LIB "glcd-ILI9341_2R8_240x320.lib"  'Biblioteka do obsługi wyświetlacza LCD ILI9341
  22.     INITLCD  ' inicjalizacja lcd
  23.     CLS      ' czyszczenie lcd
  24.  
  25.  
  26.     'SETFONT Color8x8
  27.     SETFONT Color16x16
  28.  
  29.     ' Kolory czcionek
  30.   Const Black = &B0000_0000
  31.   Const Red = &B1110_0000
  32.   Const Green = &B0001_1100
  33.   Const Blue = &B0000_0011
  34.   Const Magenta = &B1110_0011
  35.   Const Yellow = &B1111_1100
  36.   Const Cyan = &B0001_1111
  37.   Const White = &B1111_1111
  38.   Const Orange = &B1111_0100
  39.   Const Brightgreen = &B0011_1110
  40.   Const Brightblue = &B0001_1111
  41.   Const Darkred = &B1100_0000
  42.   Const Darkgreen = &B0001_0100
  43.   Const Darkblue = &B0000_0010
  44.   Const Gray = &B1011_0001
  45.   Const Olive = &B10001000
  46.   Const Darkgray = &B10001001
  47.   Const Navyblue = &B01001001
  48.  
  49.              Offset256 = 0   ' 1 - mały, 0 - duży
  50.              Boxfill(0 , 0) - (255 , 240) , Black
  51.  
  52.              Offset256 = 1
  53.              Boxfill(0 , 0) - (65 , 239) , Black
  54.  
  55. '#############################################################################################################################
  56. '#############################################################################################################################
  57.  
  58.  
  59. ' Konfiguracja I2C
  60. $lib "i2c_twi.lbx"
  61. Config Scl = PortD.0
  62. Config Sda = PortD.1
  63. I2cinit
  64. Config Twi = 100000
  65.  
  66. Const Ds1307w = &HD0                                        ' Adres DS 1307 Write
  67. Const Ds1307r = &HD1                                        ' Adres DS 1307 Read
  68. Config Submode = New                                        'nowy tryb deklaracji procedur
  69.  
  70. Config Clock = User
  71. Config Date = Dmy , Separator = Minus
  72. 'Time$ = "23:58:11"
  73. 'Date$ = "28-04-24"
  74.  
  75. Config POrTA.0 = Input : PORTA.0 = 1 : S1 Alias PINA.0 ' S1
  76. Config POrTA.1 = Input : PORTA.1 = 1 : S2 Alias PINA.1 'S2
  77. Config POrTA.3 = Input : PORTA.3 = 1 : S3 Alias PINA.3 'S3
  78.  
  79.  
  80. Declare Sub Getdatetime
  81. Declare Sub Settime
  82. Declare Sub Setdate
  83.  
  84. Dim Weekday As Byte
  85. Declare Sub Setweekday
  86.  
  87. Dim _sec_str As string * 2
  88. Dim _min_str As string * 2
  89. Dim _hour_str As string * 2
  90. Dim _day_str As string * 2
  91. Dim _month_str As string * 2
  92.  
  93.  
  94. ' 1 Hz SQW Output
  95. I2cstart
  96. I2cwbyte Ds1307w
  97. I2cwbyte &H07
  98. I2cwbyte &B10010000
  99. I2cstop
  100.  
  101. Do
  102. Offset256 = 0 'LCD address offset value. (0: 0-255)
  103.  
  104. Call Getdatetime
  105.  
  106.  
  107. Lcdat 20 , 1 , _day_str ; "-" ; _month_str ; "-" ; "20" ; _year , Gray , Black
  108. Lcdat 40 , 1 , _hour_str ; ":" ; _min_str ; ":" ; _sec_str , Gray , Black
  109.  
  110. If S1 = 0 Then
  111. _sec = 0
  112. Incr _min
  113. If _min > 59 Then _min = 0
  114. Call Settime
  115. end if
  116.  
  117. If S2 = 0 Then
  118. _sec = 0
  119. Incr _hour
  120. If _hour > 23 Then _hour = 0
  121. Call Settime
  122. end if
  123.  
  124. Loop
  125. End
  126.  
  127. Getdatetime:
  128.   I2cstart
  129.   I2cwbyte Ds1307w
  130.   I2cwbyte 0
  131.   I2cstart
  132.   I2cwbyte Ds1307r
  133.   I2crbyte _sec , Ack
  134.   I2crbyte _min , Ack
  135.   I2crbyte _hour , Ack
  136.   I2crbyte Weekday , Ack
  137.   I2crbyte _day , Ack
  138.   I2crbyte _month , Ack
  139.   I2crbyte _year , Nack
  140.   I2cstop
  141.   _sec = Makedec(_sec)
  142.   _min = Makedec(_min)
  143.   _hour = Makedec(_hour)
  144.   _day = Makedec(_day)
  145.   _month = Makedec(_month)
  146.   _year = Makedec(_year)
  147.  
  148. _sec_str = str(_sec) : _sec_str = Format(_sec_str , "00")
  149. _min_str = str(_min) : _min_str = Format(_min_str , "00")
  150. _hour_str = str(_hour) : _hour_str = Format(_hour_str , "00")
  151.  _day_str = str(_day) : _day_str = Format(_day_str , "00")
  152.  _month_str = str(_month) : _month_str = Format(_month_str , "00")
  153.  
  154. Return
  155.  
  156. Setdate:
  157.   _day = Makebcd(_day)
  158.   _month = Makebcd(_month)
  159.   _year = Makebcd(_year)
  160.   I2cstart
  161.   I2cwbyte Ds1307w
  162.   I2cwbyte 4
  163.   I2cwbyte _day
  164.   I2cwbyte _month
  165.   I2cwbyte _year
  166.   I2cstop
  167.   Waitms 10
  168. Return
  169.  
  170. Setweekday:
  171.   I2cstart
  172.   I2cwbyte Ds1307w
  173.   I2cwbyte 3
  174.   I2cwbyte Weekday
  175.   I2cstop
  176.   Waitms 10
  177. Return
  178.  
  179. Settime:
  180.   _sec = Makebcd(_sec)
  181.   _min = Makebcd(_min)
  182.   _hour = Makebcd(_hour)
  183.   I2cstart
  184.   I2cwbyte Ds1307w
  185.   I2cwbyte 0
  186.   I2cwbyte _sec
  187.   I2cwbyte _min
  188.   I2cwbyte _hour
  189.   I2cstop
  190.   Waitms 10
  191. Return
  192.  
  193. ' ##################################     Fonty     #########################################
  194. $INCLUDE "color8x8.font"
  195. $INCLUDE "color16x16.font"
  196.  
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RTC DS1307 obsługa

Post autor: niveasoft » 28 kwie 2024, 8:50

  1. sec_str = str(_sec) : _sec_str = Format(_sec_str , "00")
  2. _min_str = str(_min) : _min_str = Format(_min_str , "00")
  3. _hour_str = str(_hour) : _hour_str = Format(_hour_str , "00")
  4.  _day_str = str(_day) : _day_str = Format(_day_str , "00")
  5.  _month_str = str(_month) : _month_str = Format(_month_str , "00")
To jest taki troche potworek. Bascom to robi sam dużo szybciej.
Jeśli zadeklarowane są wartości typu Byte jedna po drugiej czyli tak jak _sec, _min, _hour i tak dalej to można korzystać.

Piszesz
  1. Dim Timestr As String * 8, Datestr As String * 20
  2.  
  3. Gosub Getdatetime
  4. Timestr = Time(_sec)
  5. Datestr = Date(_day)
  6. 'jeśli zależy Tobie na przedrostku 20 przed rokiem to
  7. Mid(Datestr , 6) = "20"
To wstawi stringa "20" po piątym znaku czyli "28-04-" i wyjdzie "28-04-2024".
Zauważ, że przy Time i Date nie użyłem znaku dolara.
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: RTC DS1307 obsługa

Post autor: Michał6201 » 28 kwie 2024, 10:55

Dziękuję za podpowiedź.

Zastanawia mnie jednak inna kwestia - po odłączeniu głównego zasilania i wyjęciu baterii RTC, przy ponownym podłączeniu układu do zasilania sam sobie ustawia CH bit na 1, co zatrzymuje oscylator i układ wydaje się martwy.
Sam się też na to nabrałem :D

W takim razie jak zapisać w programie, aby nie było takich sytuacji po zaniku zasilania i wyjęciu baterii?
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RTC DS1307 obsługa

Post autor: niveasoft » 28 kwie 2024, 10:58

Tak ma być. Po to ma baterię żeby pilnowac czasu. Jeśli nawet bateryjne zasilanie zawodzi to zegarek ma stanąć bo nie można ufać jego odczytom. Znaczy się patrzysz na niego a on pokazuje 17:00 a tak naprawdę jest 18:33 i możesz się gdzies spóźnić ;)
Zegarek się ustawia i wtedy on startuje.

Niektóre zegarki RTC mają RAM podtrzymywany bateryjnie. Można tam sobie cos przechowywać co sie programowi moze przydać. Można też sobie wpisac np. jeden bajt ze znana wartością. Przy starcie programu odczytujesz i patrzysz czy się zgadza. Jęśli nie to znak ze bateria padła i zegarkowi nie mozna ufać.
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: RTC DS1307 obsługa

Post autor: Michał6201 » 28 kwie 2024, 16:07

Rozumiem

Chciałem zrobić nastawę czasu za pomocą Select case

Case zmienia się, ale nie działa zmiana minut ani godzin. Co źle robię?

Chodzi mi o to aby nie zmieniać każdej zmiennej oddzielnym przyciskiem, tylko np. S1 zmienia zmienną, a S2 zwiększa wartość wybranej zmiennej.
  1. ' #########################################
  2. ' ###### RTC DS1307 #######################
  3. ' #########################################
  4.  
  5.   $regfile = "m128def.dat"
  6. $crystal = 16000000
  7. $hwstack = 128
  8. $swstack = 128
  9. $framesize = 128
  10.  
  11. '##################################     Konfiguracja LCD 240x320 STEROWNIK ILI9341     #######################################
  12. '#############################################################################################################################
  13.  
  14. 'Designate the connection port of LCD: Cs1 = [CS] , Rst = [RESET] , A0 = [DC] , Si = [SDI] , Sclk = [SCK]
  15.  
  16.     CONFIG Graphlcd = Color , Cs1 = PortB.0 , Rst = PortB.4 , A0 = PortB.3 , Si = PortB.2 , Sclk = PortB.1
  17.     CONST Portrait = 0                   'LCD screen. (0: Landscape [X=320, Y=240], 1: Portrait [X=240, Y=320])
  18.     CONST Rotate_180 = 1                 'LCD screen 180 degree rotation. (0: connector Upper side, 1: connector Lower side)
  19.     DIM Offset256 As Byte                'LCD address offset flag. (0:0-255 , 1:256-319)
  20.     $LIB "glcd-ILI9341_2R8_240x320.lib"  'Biblioteka do obsługi wyświetlacza LCD ILI9341
  21.     INITLCD  ' inicjalizacja lcd
  22.     CLS      ' czyszczenie lcd
  23.  
  24.  
  25.     'SETFONT Color8x8
  26.     SETFONT Color16x16
  27.  
  28.     ' Kolory czcionek
  29.   Const Black = &B0000_0000
  30.   Const Red = &B1110_0000
  31.   Const Green = &B0001_1100
  32.   Const Blue = &B0000_0011
  33.   Const Magenta = &B1110_0011
  34.   Const Yellow = &B1111_1100
  35.   Const Cyan = &B0001_1111
  36.   Const White = &B1111_1111
  37.   Const Orange = &B1111_0100
  38.   Const Brightgreen = &B0011_1110
  39.   Const Brightblue = &B0001_1111
  40.   Const Darkred = &B1100_0000
  41.   Const Darkgreen = &B0001_0100
  42.   Const Darkblue = &B0000_0010
  43.   Const Gray = &B1011_0001
  44.   Const Olive = &B10001000
  45.   Const Darkgray = &B10001001
  46.   Const Navyblue = &B01001001
  47.  
  48.              Offset256 = 0   ' 1 - mały, 0 - duży
  49.              Boxfill(0 , 0) - (255 , 240) , Black
  50.  
  51.              Offset256 = 1
  52.              Boxfill(0 , 0) - (65 , 239) , Black
  53.  
  54. '#############################################################################################################################
  55. '#############################################################################################################################
  56.  
  57.  
  58. ' Konfiguracja I2C
  59. $lib "i2c_twi.lbx"
  60. Config Scl = PortD.0
  61. Config Sda = PortD.1
  62. I2cinit
  63. Config Twi = 100000
  64.  
  65. Const Ds1307w = &HD0    'BIN 11010000 DEC 208 Adres DS 1307 Write
  66. Const Ds1307r = &HD1    'BIN 11010000 DEC 209 Adres DS 1307 Read
  67. Config Submode = New                                        'nowy tryb deklaracji procedur
  68.  
  69. Config Clock = User
  70. Config Date = Dmy , Separator = Minus
  71. 'Time$ = "23:58:11"
  72. 'Date$ = "28-04-24"
  73.  
  74. Config POrTA.0 = Input : PORTA.0 = 1 : S1 Alias PINA.0 ' S1
  75. Config POrTA.1 = Input : PORTA.1 = 1 : S2 Alias PINA.1 'S2
  76. Config POrTA.3 = Input : PORTA.3 = 1 : S3 Alias PINA.3 'S3
  77. Config PortD.6 = Input : PortD.6 = 1 : SQW Alias PinD.6
  78.  
  79.   Dim Lock As Byte , Licznik As Byte , Jest_5_impulsow As Byte
  80.  
  81.  
  82. Declare Sub Getdatetime
  83. Declare Sub Settime
  84. Declare Sub Setdate
  85.  
  86. Dim Weekday As Byte
  87. Declare Sub Setweekday
  88.  
  89. Dim _sec_str As string * 2
  90. Dim _min_str As string * 2
  91. Dim _hour_str As string * 2
  92. Dim _day_str As string * 2
  93. Dim _month_str As string * 2
  94.  
  95.  
  96. Dim Menu as Byte
  97. Dim Menu_incr as Byte
  98. Menu_incr = 0
  99.  
  100.  
  101.  
  102. ' 1 Hz SQW Output
  103. I2cstart
  104. I2cwbyte Ds1307w ' Zapis do rejestru DS1307
  105. I2cwbyte &H07   'Adres rejestru do zapisu on/off SQW oraz jaka częstotliwość
  106. I2cwbyte &B10010000 ' Częstotliwość SQW: 1Hz = 10010000, 4,096kHz = 10010001, 8,192kHz = 10010010, 32,768kHz = 10010011
  107. I2cstop
  108.  
  109.  
  110.  
  111. Do
  112. Offset256 = 0 'LCD address offset value. (0: 0-255)
  113.  
  114. Call Getdatetime
  115.  
  116.  
  117. Lcdat 20 , 1 , _day_str ; "-" ; _month_str ; "-" ; "20" ; _year , Gray , Black
  118. Lcdat 40 , 1 , _hour_str ; ":" ; _min_str ; ":" ; _sec_str , Gray , Black
  119.  
  120. 'If S1 = 0 Then
  121. '_sec = 0
  122. 'Incr _min
  123. 'If _min > 59 Then _min = 0
  124. 'Call Settime
  125. 'end if
  126.  
  127. 'If S2 = 0 Then
  128. '_sec = 0
  129. 'Incr _hour
  130. 'If _hour > 23 Then _hour = 0
  131. 'Call Settime
  132. 'end if
  133.   Debounce S3 , 0 , Menu_sub , Sub
  134. If Menu_incr = 1 Then
  135.  
  136. Select Case Menu
  137.  
  138. Case 0
  139. Call Getdatetime
  140.                Lcdat 20 , 1 , _day_str ; "-" ; _month_str ; "-" ; "20" ; _year , Gray , Black
  141.                Lcdat 40 , 1 , _hour_str ; ":" ; _min_str ; ":" ; _sec_str , Gray , Black
  142.                Lcdat 80 , 1 , "minute" , Green , Black
  143.  
  144.    If S1 = 0 Then
  145.    _sec = 0
  146.    Incr _min
  147.    If _min > 59 Then _min = 0
  148.    Call Settime
  149.    end if
  150.  
  151.  
  152. Case 1
  153. Call Getdatetime
  154.                Lcdat 20 , 1 , _day_str ; "-" ; _month_str ; "-" ; "20" ; _year , Gray , Black
  155.                Lcdat 40 , 1 , _hour_str ; ":" ; _min_str ; ":" ; _sec_str , Gray , Black
  156.                Lcdat 80 , 1 , "hour" , Green , Black
  157.  
  158.    If S1 = 0 Then
  159.    _sec = 0
  160.    Incr _hour
  161.    If _hour > 59 Then _hour = 0
  162.    Call Settime
  163.    end if
  164.  
  165.  
  166.                End select
  167.              Menu_incr = 0
  168.                              end if
  169.  
  170.  
  171.  
  172.  
  173.  
  174. Loop
  175. End
  176.  
  177. Getdatetime:
  178.   I2cstart
  179.   I2cwbyte Ds1307w
  180.   I2cwbyte 0
  181.   I2cstart
  182.   I2cwbyte Ds1307r
  183.   I2crbyte _sec , Ack
  184.   I2crbyte _min , Ack
  185.   I2crbyte _hour , Ack
  186.   I2crbyte Weekday , Ack
  187.   I2crbyte _day , Ack
  188.   I2crbyte _month , Ack
  189.   I2crbyte _year , Nack
  190.   I2cstop
  191.   _sec = Makedec(_sec)
  192.   _min = Makedec(_min)
  193.   _hour = Makedec(_hour)
  194.   _day = Makedec(_day)
  195.   _month = Makedec(_month)
  196.   _year = Makedec(_year)
  197.  
  198. _sec_str = str(_sec) : _sec_str = Format(_sec_str , "00")
  199. _min_str = str(_min) : _min_str = Format(_min_str , "00")
  200. _hour_str = str(_hour) : _hour_str = Format(_hour_str , "00")
  201.  _day_str = str(_day) : _day_str = Format(_day_str , "00")
  202.  _month_str = str(_month) : _month_str = Format(_month_str , "00")
  203.  
  204. Return
  205.  
  206. Setdate:
  207.   _day = Makebcd(_day)
  208.   _month = Makebcd(_month)
  209.   _year = Makebcd(_year)
  210.   I2cstart
  211.   I2cwbyte Ds1307w
  212.   I2cwbyte 4
  213.   I2cwbyte _day
  214.   I2cwbyte _month
  215.   I2cwbyte _year
  216.   I2cstop
  217.   Waitms 10
  218. Return
  219.  
  220. Setweekday:
  221.   I2cstart
  222.   I2cwbyte Ds1307w
  223.   I2cwbyte 3
  224.   I2cwbyte Weekday
  225.   I2cstop
  226.   Waitms 10
  227. Return
  228.  
  229. Settime:
  230.   _sec = Makebcd(_sec)
  231.   _min = Makebcd(_min)
  232.   _hour = Makebcd(_hour)
  233.   I2cstart
  234.   I2cwbyte Ds1307w
  235.   I2cwbyte 0
  236.   I2cwbyte _sec
  237.   I2cwbyte _min
  238.   I2cwbyte _hour
  239.   I2cstop
  240.   Waitms 10
  241. Return
  242.  
  243. Menu_sub:
  244.      Incr Menu : If Menu > 1 Then Menu = 0
  245.      'cls
  246.       menu_incr = 1
  247.     Return
  248.  
  249.  
  250. ' ##################################     Fonty     #########################################
  251. $INCLUDE "color8x8.font"
  252. $INCLUDE "color16x16.font"
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RTC DS1307 obsługa

Post autor: niveasoft » 28 kwie 2024, 17:21

Flaga Menu_incr ustawiana jest tylko raz przy każdorazowym naciśnieciu przycisku Menu, ale kasowana od razu po przejściu Select Case i przed End If więc potem możesz sobie cykać tym S1 bo i tak tam program nie wchodzi przez tego If`a.

Ogónie bardzo "zapaćkany" program :D

Dużo by pisac jak to powinno byc zrobione "porządnie". Spróbuję więc tylko napisac jak to się da zrobić w Twoim stylu" i najmniejszym kosztem.

Zamieniasz nazwę zmiennej Menu_incr na coś bardziej reprezentatywnego czyli "Refresh". Przycisk S1 obsługujesz sobie w pętli poprzez Debounce tak samo jak ten drugi.
W subie od S1 tez używasz Select Case w odniesieniu do zmiennej "Menu"

Coś w ten deseń:
  1. Do
  2.  
  3.  'tu sobie wyswietlaj bez menu albo jak tam chcesz
  4.  
  5. Debounce S3 , 0 , Menu_sub , Sub        
  6. Debounce S1 , 0 , s1_sub , Sub
  7.  
  8.  If Refresh = 1 Then
  9.  Refresh = 0
  10.     Select Case Menu
  11.       Case 1
  12.           Lcdat 80 , 1 , "minute" , Green , Black    
  13.       Case 2
  14.           Lcdat 80 , 1 , "hour" , Green , Black
  15.    End select
  16.  
  17. End If
  18.  
  19. Loop
  20.  
  21.  Menu_sub:
  22.     Incr Menu : If Menu > 2 Then Menu = 0
  23.      Refresh = 1
  24.  Return
  25.  
  26.  S1_sub:
  27.    Select Case Menu
  28.        Case 1
  29.         Incr _min  :    If _min > 59 Then _min = 0
  30.             _sec = 0  :   Call Settime
  31.        Case 2
  32.          Incr _hour  :  If _hour > 59 Then _hour = 0
  33.             _sec = 0  :   Call Settime
  34.    End Select
  35.  
  36.     Refresh = 1
  37. Return
  38.  
Równie dobrze normalny czas mozna wyświetlać w Select Case przy Menu Case = 0 ale wtedy najlepiej sprawdzać zegarek co 100ms i sprawdzać czy zmieniła się sekunda. Sekunda się zmieniła to Refresh = 1 i gotowe. Będzie odswiezał co sekundę lub gdy ktos nacisnie przycisk.
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: RTC DS1307 obsługa

Post autor: Michał6201 » 28 kwie 2024, 21:01

Działa :D
Jesteś WIELKI :)
Dziękuję :)

Trochę dopracowałem kod i teraz zamiast wyświetlać tekst np: "set minute" - mało eleganckie rozwiązanie, to wybrana pozycja miga z częstotliwością 1Hz. Wykorzystałem wyjście SQW z DS1307 I podłączyłem do pinu T1 MCU.
Dołożyłem zmienną równą stanowi na pinie T1 i teraz wybrana w menu pozycja podczas ustawiania miga :D Można to menu rozbudować o ustawianie daty jeśli ktoś chce.
Poniżej kod:
  1. ' #########################################
  2. ' ###### RTC DS1307 #######################
  3. ' #########################################
  4.  
  5.   $regfile = "m128def.dat"
  6. $crystal = 16000000
  7. $hwstack = 128
  8. $swstack = 128
  9. $framesize = 128
  10.  
  11. '##################################     Konfiguracja LCD 240x320 STEROWNIK ILI9341     #######################################
  12. '#############################################################################################################################
  13.  
  14. 'Designate the connection port of LCD: Cs1 = [CS] , Rst = [RESET] , A0 = [DC] , Si = [SDI] , Sclk = [SCK]
  15.  
  16.     CONFIG Graphlcd = Color , Cs1 = PortB.0 , Rst = PortB.4 , A0 = PortB.3 , Si = PortB.2 , Sclk = PortB.1
  17.     CONST Portrait = 0                   'LCD screen. (0: Landscape [X=320, Y=240], 1: Portrait [X=240, Y=320])
  18.     CONST Rotate_180 = 1                 'LCD screen 180 degree rotation. (0: connector Upper side, 1: connector Lower side)
  19.     DIM Offset256 As Byte                'LCD address offset flag. (0:0-255 , 1:256-319)
  20.     $LIB "glcd-ILI9341_2R8_240x320.lib"  'Biblioteka do obsługi wyświetlacza LCD ILI9341
  21.     INITLCD  ' inicjalizacja lcd
  22.     CLS      ' czyszczenie lcd
  23.  
  24.  
  25.     'SETFONT Color8x8
  26.     SETFONT Color16x16
  27.  
  28.     ' Kolory czcionek
  29.   Const Black = &B0000_0000
  30.   Const Red = &B1110_0000
  31.   Const Green = &B0001_1100
  32.   Const Blue = &B0000_0011
  33.   Const Magenta = &B1110_0011
  34.   Const Yellow = &B1111_1100
  35.   Const Cyan = &B0001_1111
  36.   Const White = &B1111_1111
  37.   Const Orange = &B1111_0100
  38.   Const Brightgreen = &B0011_1110
  39.   Const Brightblue = &B0001_1111
  40.   Const Darkred = &B1100_0000
  41.   Const Darkgreen = &B0001_0100
  42.   Const Darkblue = &B0000_0010
  43.   Const Gray = &B1011_0001
  44.   Const Olive = &B10001000
  45.   Const Darkgray = &B10001001
  46.   Const Navyblue = &B01001001
  47.  
  48.              Offset256 = 0   ' 1 - mały, 0 - duży
  49.              Boxfill(0 , 0) - (255 , 240) , Black
  50.  
  51.              Offset256 = 1
  52.              Boxfill(0 , 0) - (65 , 239) , Black
  53.  
  54. '#############################################################################################################################
  55. '#############################################################################################################################
  56.  
  57.  
  58. ' Konfiguracja I2C
  59. $lib "i2c_twi.lbx"
  60. Config Scl = PortD.0
  61. Config Sda = PortD.1
  62. I2cinit
  63. Config Twi = 100000
  64.  
  65. Const Ds1307w = &HD0    'BIN 11010000 DEC 208 Adres DS 1307 Write
  66. Const Ds1307r = &HD1    'BIN 11010000 DEC 209 Adres DS 1307 Read
  67. Config Submode = New                                        'nowy tryb deklaracji procedur
  68.  
  69. Config Clock = User
  70. Config Date = Dmy , Separator = Minus
  71. 'Time$ = "23:58:11"
  72. Date$ = "28-04-24"
  73.  
  74. Config POrTA.0 = Input : PORTA.0 = 1 : S1 Alias PINA.0 ' S1
  75. Config POrTA.1 = Input : PORTA.1 = 1 : S2 Alias PINA.1 'S2
  76. Config POrTA.3 = Input : PORTA.3 = 1 : S3 Alias PINA.3 'S3
  77. Config PortD.6 = Input : PortD.6 = 1 : SQW Alias PinD.6
  78.  
  79.   Dim Lock As Byte , Licznik As Byte , Jest_5_impulsow As Byte
  80.  
  81.  
  82. Declare Sub Getdatetime
  83. Declare Sub Settime
  84. Declare Sub Setdate
  85.  
  86. Dim Weekday As Byte
  87. Declare Sub Setweekday
  88.  
  89. Dim _sec_str As string * 2
  90. Dim _min_str As string * 2
  91. Dim _hour_str As string * 2
  92. Dim _day_str As string * 2
  93. Dim _month_str As string * 2
  94.  
  95. Dim Pos2 As Byte
  96. Dim Mig As Bit
  97. Dim Menu as Byte
  98. Dim Refresh as Byte
  99. Refresh = 0
  100. Mig = 0
  101.  
  102. ' 1 Hz SQW Output
  103. I2cstart
  104. I2cwbyte Ds1307w ' Zapis do rejestru DS1307
  105. I2cwbyte &H07   'Adres rejestru do zapisu on/off SQW oraz jaka częstotliwość
  106. I2cwbyte &B10010000 ' Częstotliwość SQW: 1Hz = 10010000, 4,096kHz = 10010001, 8,192kHz = 10010010, 32,768kHz = 10010011
  107. I2cstop
  108.  
  109.  
  110.  
  111. Do
  112. Offset256 = 0 'LCD address offset value. (0: 0-255)
  113.  
  114. Mig = SQW
  115. If Mig = 0 Then Mig = 1 Else Mig = 0
  116.  
  117. Call Getdatetime
  118.  
  119.  
  120. Lcdat 20 , 1 , _day_str ; "-" ; _month_str ; "-" ; "20" ; _year , Gray , Black
  121. Lcdat 40 , 1 , _hour_str ; ":" ; _min_str ; ":" ; _sec_str , Gray , Black
  122.  
  123.  'tu sobie wyswietlaj bez menu albo jak tam chcesz
  124.  
  125. Debounce S3 , 0 , Menu_sub , Sub
  126. Debounce S1 , 0 , s1_sub , Sub
  127.  
  128.  If Refresh = 1 Then
  129.  Refresh = 0
  130.     Select Case Menu
  131.       Case 1
  132.           Lcdat 80 , 1 , "SET TIME" , Green , Black
  133.       Case 2
  134.           Lcdat 80 , 1 , "SET TIME" , Green , Black
  135.    End select
  136.  
  137. End If
  138.  
  139. Loop
  140. End
  141.  
  142. Getdatetime:
  143.   I2cstart
  144.   I2cwbyte Ds1307w
  145.   I2cwbyte 0
  146.   I2cstart
  147.   I2cwbyte Ds1307r
  148.   I2crbyte _sec , Ack
  149.   I2crbyte _min , Ack
  150.   I2crbyte _hour , Ack
  151.   I2crbyte Weekday , Ack
  152.   I2crbyte _day , Ack
  153.   I2crbyte _month , Ack
  154.   I2crbyte _year , Nack
  155.   I2cstop
  156.   _sec = Makedec(_sec)
  157.   _min = Makedec(_min)
  158.   _hour = Makedec(_hour)
  159.   _day = Makedec(_day)
  160.   _month = Makedec(_month)
  161.   _year = Makedec(_year)
  162.  
  163. _sec_str = str(_sec) : _sec_str = Format(_sec_str , "00")
  164. _min_str = str(_min) : _min_str = Format(_min_str , "00")
  165. _hour_str = str(_hour) : _hour_str = Format(_hour_str , "00")
  166.  _day_str = str(_day) : _day_str = Format(_day_str , "00")
  167.  _month_str = str(_month) : _month_str = Format(_month_str , "00")
  168.  
  169. If Mig = 0 Then
  170. Lcdat 100 , 10 , "TEST" , Orange , Black
  171. Else
  172. Lcdat 100 , 10 , "    " , Orange , Black
  173. end if
  174.  
  175. If Mig = 0 Then
  176. Select Case Menu
  177. Case 1
  178. Mid(_min_str , 1) = "  " 'wstaw spację w miejscu Menu (migaj)
  179. Case 2
  180. Mid(_hour_str , 1) = "  " 'staw spację w miejscu Menu (migaj)
  181.  
  182. End Select
  183. End If
  184.  
  185. Return
  186.  
  187. Setdate:
  188.   _day = Makebcd(_day)
  189.   _month = Makebcd(_month)
  190.   _year = Makebcd(_year)
  191.   I2cstart
  192.   I2cwbyte Ds1307w
  193.   I2cwbyte 4
  194.   I2cwbyte _day
  195.   I2cwbyte _month
  196.   I2cwbyte _year
  197.   I2cstop
  198.   Waitms 10
  199. Return
  200.  
  201. Setweekday:
  202.   I2cstart
  203.   I2cwbyte Ds1307w
  204.   I2cwbyte 3
  205.   I2cwbyte Weekday
  206.   I2cstop
  207.   Waitms 10
  208. Return
  209.  
  210. Settime:
  211.   _sec = Makebcd(_sec)
  212.   _min = Makebcd(_min)
  213.   _hour = Makebcd(_hour)
  214.   I2cstart
  215.   I2cwbyte Ds1307w
  216.   I2cwbyte 0
  217.   I2cwbyte _sec
  218.   I2cwbyte _min
  219.   I2cwbyte _hour
  220.   I2cstop
  221.   Waitms 10
  222. Return
  223.  
  224.  
  225.  Menu_sub:
  226.     Incr Menu : If Menu > 2 Then Menu = 0
  227.      Lcdat 80 , 1 , "        " , Green , Black
  228.      Refresh = 1
  229.  
  230.  Return
  231.  
  232.  S1_sub:
  233.    Select Case Menu
  234.        Case 1
  235.         Incr _min  :    If _min > 59 Then _min = 0
  236.             _sec = 0  :   Call Settime
  237.  
  238.  
  239.  
  240.         Case 2
  241.          Incr _hour  :  If _hour > 59 Then _hour = 0
  242.             _sec = 0  :   Call Settime
  243.    End Select
  244.  
  245.     Refresh = 1
  246. Return
  247.  
  248.  
  249. ' ##################################     Fonty     #########################################
  250. $INCLUDE "color8x8.font"
  251. $INCLUDE "color16x16.font"
ODPOWIEDZ