[BASCOM] Pomoc w modyfikacji programu

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
krzych.elektr.
-
Posty: 10
Rejestracja: 08 maja 2021, 18:07

[BASCOM] Pomoc w modyfikacji programu

Post autor: krzych.elektr. » 12 wrz 2021, 15:35

Witam.
Na początku do dodam że jestem początkujący w pisaniu programów w bascomie i mikrokontrolerach.
I na początek kupiłem sobie taki zestaw: https://sklep.avt.pl/avtkurs-avr.html.
Wg. informacji zawartych w książce dołączonej do tego kursu i przykładach programów napisałem program licznika automatycznego zliczającego do 9999.

Kod: Zaznacz cały

' licznik automatyczny czterocyfrowy 9999
Dim Jednostki As Byte , Dziesiatki As Byte , Setki As Byte , Tysiace As Byte , Ktorywysw As Byte
Config Portb = 255 : Portb = &B11111111       'wyjścia wygaszone
Config Portd = &B1111100 : Portd = &B1111111       'dwie wejścia
Tysiace = 0 : Setki = 0 : Dziesiatki = 0 : Jednostki = 0
Do                       'pętla główna
Waitms 5
Incr Ktorywysw           'następny wyświetlacz co około 5ms
If Ktorywysw = 4 Then    'co około 20ms
   Ktorywysw = 0         'skróć cykl
Gosub Zwieksz
If Jednostki = 10 Then   'jeśli przekroczy 9
   Jednostki = 0         'wyzeruj licznik jednostek
   Incr Dziesiatki       'zwiększ licznik dziesiatek
   If Dziesiatki = 10 Then Dziesiatki = 0       'też skracaj cykl
End If
End If
Portd = &B11111111       'najpierw gasimy  wyświetlacze
Select Case Ktorywysw
Case 0:                  'wyświetl zawartość licznika jednostek
   Portb = Lookup(jednostki , Tabela)       'przepisz do PortB kody
   Portd.3 = 0           'włącz T3 - wyświetlacz jednostek
Case 1:                  'wyświetl zawartość licznika dziesiątek
   Portb = Lookup(dziesiatki , Tabela)       'przepisz do PortB kody
   Portd.4 = 0           'włącz T4 - wyświetlacz dziesiątek
Case 2:                  'wyświetl zawartość licznika setek
   Portb = Lookup(setki , Tabela)       'przepisz do PortB kody
   Portd.5 = 0           'włącz T5 - wyświetlacz setek
Case 3:                  'wyświetl zawartość licznika tysięcy
   Portb = Lookup(tysiace , Tabela)       'przepisz do PortB kody
   Portd.6 = 0           'włącz T6 - wyświetlacz tysięcy
End Select
Loop                     'koniec pętli
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Zwieksz:
Incr Jednostki
If Jednostki = 10 Then
   Jednostki = 0
   Incr Dziesiatki
   If Dziesiatki = 10 Then
      Dziesiatki = 0
      Incr Setki
         If Setki = 10 Then
            Setki = 0
            Incr Tysiace
               If Tysiace = 10 Then Tysiace = 0
         End If
   End If
End If
Return
Jednak liczy on za szybko i chciałbym zmienić żeby liczył co 1sekunda, więc co należy zmienić w programie aby tak liczył ?
Bardzo proszę o pomoc.

Jony130
Moderator
Posty: 3166
Rejestracja: 11 sie 2005, 16:33
Lokalizacja: wrocław

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: Jony130 » 12 wrz 2021, 20:47

No a jak myślisz dlaczego "układ" teraz tak szybko zlicza? I może wystarczy dodać zmienną pomocniczą która po osiągnięciu zadanej wartości spowoduje skok do podprogramu zwiększ. Co o tym myślisz?

krzych.elektr.
-
Posty: 10
Rejestracja: 08 maja 2021, 18:07

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: krzych.elektr. » 13 wrz 2021, 11:13

Dzięki z odpowiedź.
Wiesz tylko nie bardzo rozumiem gdzie tą zmienną pomocniczą umieścić i jak ona ma wyglądać.
Pisałem już że jestem w tej dziedzinie początkujący a nawet jeszcze zielony, więc jeśli można prosił bym o gotowca :(

Jony130
Moderator
Posty: 3166
Rejestracja: 11 sie 2005, 16:33
Lokalizacja: wrocław

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: Jony130 » 13 wrz 2021, 15:02

A rozumiesz chociaż po co jest ten "Waitms 5"? I ile tych "Waitms 5" potrzeba by była jedna sekunda?

krzych.elektr.
-
Posty: 10
Rejestracja: 08 maja 2021, 18:07

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: krzych.elektr. » 13 wrz 2021, 15:10

Trochę tak ale i wpisywałem waitms 1000 czyli 1s i nic to nie dało. A waitms 5 to chyba multipleksowanie wyświetlaczy tylko.

Jony130
Moderator
Posty: 3166
Rejestracja: 11 sie 2005, 16:33
Lokalizacja: wrocław

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: Jony130 » 13 wrz 2021, 15:27

A może spróbuj inaczej. Zostaw "waitms 5" a dodaj zmienną pomocniczą, która będzie zwiększała swoją wartość co 5ms (tak samo jak teraz zmienna Ktorywysw). I dopiero gdy ta zmienna osiągnie wartość 200, program skoczy do etykietki Zwieksz.

krzych.elektr.
-
Posty: 10
Rejestracja: 08 maja 2021, 18:07

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: krzych.elektr. » 13 wrz 2021, 15:35

O możesz mi zobrazować jakoś w kodzie w którym przesłałem.

Jony130
Moderator
Posty: 3166
Rejestracja: 11 sie 2005, 16:33
Lokalizacja: wrocław

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: Jony130 » 13 wrz 2021, 18:03

To sobie wypróbuj.

Kod: Zaznacz cały

     ' licznik automatyczny czterocyfrowy 9999
Dim Jednostki As Byte , Dziesiatki As Byte , Setki As Byte , Tysiace As Byte , Ktorywysw As Byte , Odliczam1s As Byte
Config Portb = 255 : Portb = &B11111111       'wyjścia wygaszone
Config Portd = &B1111100 : Portd = &B1111111       'dwie wejścia
Tysiace = 0 : Setki = 0 : Dziesiatki = 0 : Jednostki = 0
Do                       'pętla główna
Waitms 5
Incr Ktorywysw
Incr Odliczam1s
                         'następny wyświetlacz co około 5ms
If Ktorywysw = 4 Then    'co około 20ms
   Ktorywysw = 0         'skróć cykl
End If

If Odliczam1s = 199 Then 'czekamy 200*5ms = 1s
   Odliczam1s = 0
   Gosub Zwieksz          '
End If

Portd = &B11111111       'najpierw gasimy  wyświetlacze
Select Case Ktorywysw
Case 0:                  'wyświetl zawartość licznika jednostek
   Portb = Lookup(jednostki , Tabela)       'przepisz do PortB kody
   Portd.3 = 0           'włącz T3 - wyświetlacz jednostek
Case 1:                  'wyświetl zawartość licznika dziesiątek
   Portb = Lookup(dziesiatki , Tabela)       'przepisz do PortB kody
   Portd.4 = 0           'włącz T4 - wyświetlacz dziesiątek
Case 2:                  'wyświetl zawartość licznika setek
   Portb = Lookup(setki , Tabela)       'przepisz do PortB kody
   Portd.5 = 0           'włącz T5 - wyświetlacz setek
Case 3:                  'wyświetl zawartość licznika tysięcy
   Portb = Lookup(tysiace , Tabela)       'przepisz do PortB kody
   Portd.6 = 0           'włącz T6 - wyświetlacz tysięcy
End Select
Loop                     'koniec pętli
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Zwieksz:
Incr Jednostki
If Jednostki = 10 Then
   Jednostki = 0
   Incr Dziesiatki
   If Dziesiatki = 10 Then
      Dziesiatki = 0
      Incr Setki
         If Setki = 10 Then
            Setki = 0
            Incr Tysiace
               If Tysiace = 10 Then Tysiace = 0
         End If
   End If
End If
Return

krzych.elektr.
-
Posty: 10
Rejestracja: 08 maja 2021, 18:07

Re: [BASCOM] Pomoc w modyfikacji programu

Post autor: krzych.elektr. » 14 wrz 2021, 13:18

Ok. teraz działa tak jak chciałem :D
Bardzo dziękuje za pomoc i za kod.
Problem rozwiązany.

ODPOWIEDZ