Witam wszystkich,
Mam układ, który po I2C zapisuje mi do pamięci 24c256 16 bajtów jeden po drugim. Robi tak co 3 minuty, procedura wygląda w ten sposób, że odczytuje adres zapisany w 4 i 5 komórce, zwiększa go o 1 po każdym zapisie a potem zapisuje do komórki 4 i 5."
W komórce 1 i 2 zapisana jest ilość pozycji, pod koniec procedury zapiszdane wartość jest odczytywana, zmniejszana i zapisywana - potrzebne przy innych operacjach
Pierwsze dwa bajty to godzina i minuta. Program chodził caaaałą noc wyłączyłem urządzenie o 6:01. Zerknijcie na odczyt z eepromu:
0000: 00FF 00FF 0007 0021 0000 00F8 00FF 00FF ˙˙.!.ř˙˙
0008: 0005 0013 0034 000F 0020 001D 0015 0009 ..4.....
0010: 0026 004C 0008 0000 00FF 00FF 00FF 00FF &L..˙˙˙˙
0018: 0005 0016 0034 000F 0020 002D 0015 0009 ..4..-..
0020: 0027 001D 0006 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0028: 0005 0019 0034 000F 0020 0046 0015 0009 ..4..F..
0030: 0027 001A 0005 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0038: 0005 001C 0034 000F 0020 0051 0015 0009 ..4..Q..
0040: 0027 000B 0007 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0048: 0005 001F 0034 000F 0021 0002 0015 0009 ..4.!...
0050: 0027 0024 0007 0000 00FF 00FF 00FF 00FF '$..˙˙˙˙
0058: 0005 0022 0034 000F 0021 0009 0015 0009 ."4.!...
0060: 0026 005F 0006 0000 00FF 00FF 00FF 00FF &_..˙˙˙˙
0068: 0005 0025 0034 000F 0020 0009 0015 0009 .%4.....
0070: 0027 002A 0006 0000 00FF 00FF 00FF 00FF '*..˙˙˙˙
0078: 0005 0028 0034 000F 0020 0003 0015 0009 .(4.....
0080: 0027 0012 0006 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0088: 0005 002B 0034 000F 001F 0061 0015 0009 .+4..a..
0090: 0027 0032 0008 0000 00FF 00FF 00FF 00FF '2..˙˙˙˙
0098: 0005 002E 0034 000F 0020 0022 0015 0009 ..4.."..
00A0: 0027 0037 0006 0000 00FF 00FF 00FF 00FF '7..˙˙˙˙
00A8: 0005 0031 0034 000F 0020 0037 0015 0009 .14..7..
00B0: 0027 0024 0006 0000 00FF 00FF 00FF 00FF '$..˙˙˙˙
00B8: 0005 0034 0034 000F 0020 002B 0015 0009 .44..+..
00C0: 0027 000F 0006 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
00C8: 0005 0037 0034 000F 0020 0026 0015 0009 .74..&..
00D0: 0027 001F 0005 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
00D8: 0005 003A 0034 000F 0020 001E 0015 0009 .:4.....
00E0: 0027 0027 0009 0000 00FF 00FF 00FF 00FF ''..˙˙˙˙
00E8: 0006 0001 0034 000F 001F 0038 0015 0009 ..4..8..
00F0: 0028 0006 000A 0000 00FF 00FF 00FF 00FF (...˙˙˙˙
00F8: 0005 0010 0034 000F 0020 003C 0015 0009 ..4..<..
0100: 0026 0044 0007 0000 00FF 00FF 00FF 00FF &D..˙˙˙˙
0108: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0110: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0118: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0120: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0128: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0130: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0138: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0140: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙
Pogrubione to godziny. I teraz widzimy, że pod F8 jest godz. 5:16, a następny zapis jest w komórce nr 8 o godz. 5:19. Widać też, że wyłączyłem o 6:01 bo dalej już skubaniec nie zdążył zapisać.. Jak to jest możliwe że on się zapętla z tym adresem.. Przecież przez całą noc powinien zrobić sądząc po komórkach 2 i 3 175 zapisów (na początku jest tam wpisana wartość 2000, teraz jest 1825)
Licząc w HEX F8 + 10 = 108 a nie 8.. Czyżby tu była jakaś nieprawidłowość? źle zapisuje 108? A jeżeli tak, to jak to naprawić?
Mam układ, który po I2C zapisuje mi do pamięci 24c256 16 bajtów jeden po drugim. Robi tak co 3 minuty, procedura wygląda w ten sposób, że odczytuje adres zapisany w 4 i 5 komórce, zwiększa go o 1 po każdym zapisie a potem zapisuje do komórki 4 i 5."
W komórce 1 i 2 zapisana jest ilość pozycji, pod koniec procedury zapiszdane wartość jest odczytywana, zmniejszana i zapisywana - potrzebne przy innych operacjach
'zapis do eepromu
Sub Zapis(byval Adres As Word , Byval Dana As Byte)
Adresh = High(adres)
Adresl = Low(adres)
I2cstart
I2cwbyte 160
I2cwbyte Adresh
I2cwbyte Adresl
I2cwbyte Dana
I2cstop
Waitms 7
End Sub
'odczyt z eepromu
Function Odczyt(byval Adres As Word) As Byte
Adresh = High(adres)
Adresl = Low(adres)
I2cstart
I2cwbyte 160
I2cwbyte Adresh
I2cwbyte Adresl
I2cstart
I2cwbyte 161
I2crbyte Dana , Nack
I2cstop
Odczyt = Dana
End Function
'zapisywanie danych, A- przykładowa zmienna
Zapiszdane:
Adresh = Odczyt(4)
Adresl = Odczyt(5)
Adres = Makeint(adresl , Adresh)
Pomzap = Val(godziny)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(minuty)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Pomzap = Val(A)
Call Zapis(adres , Pomzap)
Adres = Adres + 1
Call Zapis(adres , X)
Adres = Adres + 5 'do pełnych 16 bajtow
Adresl = Low(adres)
Adresh = High(adres)
Call Zapis(4 , Adresh)
Call Zapis(5 , Adresl)
Gosub Ilezostalo
Wpamiec = Wpamiec - 1
Adresh = High(wpamiec)
Adresl = Low(wpamiec)
Call Zapis(2 , Adresh)
Call Zapis(3 , Adresl)
Return
Ilezostalo:
Adresh = Odczyt(2)
Adresl = Odczyt(3)
Wpamiec = Makeint(Adresl , Adresh)
Return
Pierwsze dwa bajty to godzina i minuta. Program chodził caaaałą noc wyłączyłem urządzenie o 6:01. Zerknijcie na odczyt z eepromu:
0000: 00FF 00FF 0007 0021 0000 00F8 00FF 00FF ˙˙.!.ř˙˙
0008: 0005 0013 0034 000F 0020 001D 0015 0009 ..4.....
0010: 0026 004C 0008 0000 00FF 00FF 00FF 00FF &L..˙˙˙˙
0018: 0005 0016 0034 000F 0020 002D 0015 0009 ..4..-..
0020: 0027 001D 0006 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0028: 0005 0019 0034 000F 0020 0046 0015 0009 ..4..F..
0030: 0027 001A 0005 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0038: 0005 001C 0034 000F 0020 0051 0015 0009 ..4..Q..
0040: 0027 000B 0007 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0048: 0005 001F 0034 000F 0021 0002 0015 0009 ..4.!...
0050: 0027 0024 0007 0000 00FF 00FF 00FF 00FF '$..˙˙˙˙
0058: 0005 0022 0034 000F 0021 0009 0015 0009 ."4.!...
0060: 0026 005F 0006 0000 00FF 00FF 00FF 00FF &_..˙˙˙˙
0068: 0005 0025 0034 000F 0020 0009 0015 0009 .%4.....
0070: 0027 002A 0006 0000 00FF 00FF 00FF 00FF '*..˙˙˙˙
0078: 0005 0028 0034 000F 0020 0003 0015 0009 .(4.....
0080: 0027 0012 0006 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
0088: 0005 002B 0034 000F 001F 0061 0015 0009 .+4..a..
0090: 0027 0032 0008 0000 00FF 00FF 00FF 00FF '2..˙˙˙˙
0098: 0005 002E 0034 000F 0020 0022 0015 0009 ..4.."..
00A0: 0027 0037 0006 0000 00FF 00FF 00FF 00FF '7..˙˙˙˙
00A8: 0005 0031 0034 000F 0020 0037 0015 0009 .14..7..
00B0: 0027 0024 0006 0000 00FF 00FF 00FF 00FF '$..˙˙˙˙
00B8: 0005 0034 0034 000F 0020 002B 0015 0009 .44..+..
00C0: 0027 000F 0006 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
00C8: 0005 0037 0034 000F 0020 0026 0015 0009 .74..&..
00D0: 0027 001F 0005 0000 00FF 00FF 00FF 00FF '...˙˙˙˙
00D8: 0005 003A 0034 000F 0020 001E 0015 0009 .:4.....
00E0: 0027 0027 0009 0000 00FF 00FF 00FF 00FF ''..˙˙˙˙
00E8: 0006 0001 0034 000F 001F 0038 0015 0009 ..4..8..
00F0: 0028 0006 000A 0000 00FF 00FF 00FF 00FF (...˙˙˙˙
00F8: 0005 0010 0034 000F 0020 003C 0015 0009 ..4..<..
0100: 0026 0044 0007 0000 00FF 00FF 00FF 00FF &D..˙˙˙˙
0108: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0110: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0118: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0120: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0128: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0130: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0138: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙˙˙
0140: 00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF ˙˙˙˙˙˙
Pogrubione to godziny. I teraz widzimy, że pod F8 jest godz. 5:16, a następny zapis jest w komórce nr 8 o godz. 5:19. Widać też, że wyłączyłem o 6:01 bo dalej już skubaniec nie zdążył zapisać.. Jak to jest możliwe że on się zapętla z tym adresem.. Przecież przez całą noc powinien zrobić sądząc po komórkach 2 i 3 175 zapisów (na początku jest tam wpisana wartość 2000, teraz jest 1825)
Licząc w HEX F8 + 10 = 108 a nie 8.. Czyżby tu była jakaś nieprawidłowość? źle zapisuje 108? A jeżeli tak, to jak to naprawić?