Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Pytania, kody i porady dotyczące nie tylko Bascom.
Press
Posty: 79
Rejestracja: 21 sty 2018, 23:08

Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: Press » 05 cze 2026, 11:35

Niby prosty Sys Tic na timerze ale...
  1. $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6. $baud = 115200
  7.  
  8. Config Submode = New
  9.  
  10. '=====Konfiguracja sprzętowa======
  11. Config Portb.5 = Output                                                                                                 'Dioda LED
  12.  
  13.  
  14. Config Timer0 = Timer , Prescale = 64 , Clear_timer = 1
  15.  
  16. '=====Deklaracja zmiennych======
  17. Dim Sys_tic , Tim_led As Byte
  18. Dim Count As Word
  19.  
  20. Ocr0a = 124
  21. Start Timer0                                                                                                            'Przerwanie co 1 mS przez Timer0
  22.  
  23. On Compare0a Tim0_oc0a
  24.  
  25. Enable Oc0a
  26. Enable Interrupts
  27.  
  28.  
  29. '=====Aliasy======
  30. Led_out Alias Portb.5
  31.  
  32. '=====Funkcje i Procedury=====
  33. Function Tic_interval(byval Tic As Byte) As Byte                                                                        'Zwraca ilość ms jakie upłynęły od zapamiętanego stanu Sys_tic w zmiennej Tic do chwili obecnej.
  34.    Tic_interval = Sys_tic - Tic
  35. End Function
  36.  
  37.  
  38. '=====Pętla główna=====
  39.  
  40. Do
  41.    If Tic_interval(tim_led) >= 200 Then
  42.       Tim_led = Sys_tic
  43.       Incr Count
  44.       Print Count ; "   " ; Sys_tic ; "   " ; Tim_led
  45.       Toggle Led_out
  46.    End If
  47. Loop
  48.  
  49. 'Zwiększa zmienną Sys_Tic co 1 ms.
  50. Tim0_oc0a:
  51.    Incr Sys_tic
  52. Return
  53.  
Kiedy zmienne i parametry funkcji Tic_interval są typu BYTE, to wszystko działa poprawnie.
Kiedy zmienię na WORD to:

27 5400 5400
28 5600 5600
29 5632 5632
30 5832 5832
...
204 40632 40632
205 40832 40832
206 40960 40960
207 41160 41160

Wkleiłem tylko linie w których program zachowuje się dziwnie.

Kiedy zaś typ zmienię na DWORD, to już w ogóle cuda:

1 0 0
2 2 1
3 3 3
4 6 6
5 12 12
6 24 24
7 48 48
8 96 96
9 192 192
10 384 384
11 768 768
12 1536 1536
13 3072 3072
14 6144 6144
15 12288 12288

Nie jest to przypadkowe. Przeskoki po każdym resecie pojawiają się w tym samym miejscu.
Program nie robi w tym czasie nic innego, aby podejrzewać, że gubi interwał, bo jest zajęty czymś w danej chwili.

I czego ja tu nie rozumiem?
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: niveasoft » 09 cze 2026, 5:50

Czasem nie zauważę tematu (najczęściej w weekend) jak przeczytam o nim na poczcie i potem zapomnę :lol:

Sprawdziłem Twój kod i nie mogę potwierdzić. Na 2087 wszystko działa jakoś normalnie i na Word i na Dword. Zmienia się równiutko co 200.

Mogę sprawdzić na dowolnej innej wersji tylko napisz której to sprawdzę czy to nie był jakiś bug który juz poprawiono.

BTW. Symulator obliczył, że wysłanie tej wiadomości na terminal kosztuje 1,2ms czyli dłużej niż masz systemowy tick i w takim przypadku to lepiej wyłączyć na moment przerwania, zrobić kopie zmiennych, włączyć przerwania i wyświetlić te kopie czyli zrobić takie buforowanie.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Press
Posty: 79
Rejestracja: 21 sty 2018, 23:08

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: Press » 09 cze 2026, 10:24

Korzystam z wersji 2087.
Też pomyślałem o buforowaniu i problem przeskoków zniknął. Odmierza pięknie ustawiony interwał. Niestety poprawnie tylko na zmiennych Byte, Word i Long. Jak ustawie Dword, to printuje na uart tak szybko jak tylko potrafi.
Ostatnio zmieniony 09 cze 2026, 19:01 przez Press, łącznie zmieniany 2 razy.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: niveasoft » 09 cze 2026, 11:00

Testowaełm to dziś właśnie na DWORD co widać bo specjalnie czekałem aż będzie na screenie więcej niż 65535.
Testowałem na Arduino Nano tylko sobie włączyłem CKDIV/2 żeby pasowało do twojego 8MHz.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Press
Posty: 79
Rejestracja: 21 sty 2018, 23:08

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: Press » 09 cze 2026, 15:26

Też testuję to na ARDUINO NANO.
8 MHz, ponieważ rozwaliłem kwarc zewnętrzny i pracuję na wewnętrznym oscylatorze.

Pobrałem ze strony MCS wersję demo 2079 i skompilowałem listing z pierwszego posta.
Dalej to samo. WORD działa poprawnie, a DWORD z każdą iteracją podwaja interwał.

Mogę prosić o udostępnienie pliku wsadowego?
Może mam coś nie tak z uP na płytce. Z chińskimi klonami nigdy nic nie wiadomo.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: niveasoft » 09 cze 2026, 15:57

Łap. Wyłączyłem podzielnik przez dwa żeby pasowało to tego oscylatora 8MHz
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Press
Posty: 79
Rejestracja: 21 sty 2018, 23:08

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: Press » 09 cze 2026, 18:32

Dziękuję.
Po wgraniu tego wsadu bez zarzutu. Działa nawet po przepełnieniu 16 bitów.
Na mojej kompilacji dzieją się bzdury. Nie mam pojęcia już gdzie szukać przyczyny.
Myślałem, że jakiś błąd w instalacji programu, ale skasowałem całkowicie wersję 2078 i zainstalowałem 2079 i dalej to samo.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: niveasoft » 09 cze 2026, 18:35

O kurczak.U mnie jest 2087 i dlatego nie zauważyłem tego Twojego 2078 bo to mi się tylko cyferki przestawiły :D
To na pewno wersja Bascoma winna. Może poszukaj takiej z witaminką. Sam widziałem 2081 :D
Kiedyś na Elektrodzie ktoś wrzucisł wszystkie wersje razem z najnowszą ale po czasie to usuneli...
Press
Posty: 79
Rejestracja: 21 sty 2018, 23:08

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: Press » 09 cze 2026, 19:06

2082 z witaminką działa tak samo.
Kiedyś ta wersja aktualizowała mi się do 2087. Niestety po dzisiejszej reinstalacji już nie działa update.
Opcja OPTYMIZE CODE jest odznaczona, więc na pewno nie jest to błąd na optymalizacji.

Chyba czas zacząć się wciągać w C dla AVR :D
Szkoda tylko, że nie ma w Microchip studio czegoś na kształt HAL w STM32CubieIDE. Byłoby dużo łatwiej podjąć decyzję :D
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dziwne zachowanie Sys_Tic zależnie od typu zmiennej

Post autor: niveasoft » 09 cze 2026, 19:32

Masz to niedowitaminizowane :P Własnie sprawdziłem na 2082 i wszystko działa na Dword.
Nie pamiętam od kiedy mam tego kompa z Win10 ale tu najstarszą mam własnie wersję 2082.
Mam poprzedniego kompa z Win7 i tam najstarszy mam chyba 2075.
ODPOWIEDZ