logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] [BASCOM] Uproszczenie kodu licznika i wygaszanie zer nieznaczących

adamekamator 29 Cze 2018 22:36 1293 28
  • #1 17304230
    adamekamator
    Poziom 17  
    Witam kolegów mam pytanie czy można ten kod jakoś uprościć i czy w tej formie da się wygasić zera nieznaczące? Czy tylko z funkcją bin2bi

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #2 17304471
    Konto nie istnieje
    Konto nie istnieje  
  • #3 17304710
    adamekamator
    Poziom 17  
    Dzięki kolego za odpowiedz uczę się więc nie wszystko robię profesjonalnie usypianie nie jest mi potrzebne bo procesor zasilany z zasilacza . Teraz to będzie lepsze?

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #4 17304823
    Konto nie istnieje
    Konto nie istnieje  
  • #5 17304858
    adamekamator
    Poziom 17  
    Spróbuję poczytać o uśpieniu i coś wykombinuje i spytam czy dobrze ,wielkie dzięki koledze za odpowiedz .
  • #6 17304880
    Konto nie istnieje
    Konto nie istnieje  
  • #7 17339398
    adamekamator
    Poziom 17  
    Witam ponownie kombinowałem z takim kodem i nadal nie wiem jak pozbyć się zer nieznaczących
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #8 17339474
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #9 17343781
    trol.six
    Poziom 31  
    Przeorganizowałem twój kod z pierwszego postu bo w tym z dzieleniem i modulo to może działać ślamazarnie. Jeśli ci pasuje oczywiście. Licznik obsługuj w przerwaniu timera. A zmieniaj tylko wartość zmiennej za pomocą przycisków. To musisz sobie dopisać.
    Gdyby obliczenia w przerwaniu były za długie, przenieść je do głównej pętli, ale tutaj zawsze będzie dylemat jednoczesnej zmiany wartości gdzie zliczasz (abcd) oraz wartości Licznik, oraz tego jak wyświetlasz (w przerwaniu).

    Można też sprawdzać warunki zer.
    Jeśli A=0 to nie wyświetlasz A,
    jeśli A = 0 i B = 0 to nie wyświetlasz B
    jeśli A = 0 i B = 0 i C = 0 to nie wyświetlasz C

    Nie wiem czy to będzie działać bo na szybcika.
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #10 17344930
    adamekamator
    Poziom 17  
    Kolego trol.six nie mogłem poradzić sobie jak te ify wstawić w Select Case : wielkie podziękowania . Zostałem przy drugiej wersji programu czyli przy dzieleniu i mod bo nie rozumiem znaczenia zmiennej "Obslugalicznika" ale będę analizował twój pomysł. Kolego nowyARM program pisałem z Polską wersją pomocy tam nic o ctc nie pisze ale poczytam.

    Dodano po 14 [minuty]:

    Teraz to wygląda tak z tym że podświetla mi inne segmenty jak cyfra jest poniżej 99 to jest ok jak już 100 to podświetla mi segment G i zmienia segmenty w zależności od wyświetlanej cyfry .
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #11 17344995
    Konto nie istnieje
    Konto nie istnieje  
  • #12 17345014
    adamekamator
    Poziom 17  
    Obsługuje bo są tematy nawet tu na elektrodzie muszę poczytać choć wszystko fajnie działa poza tym podświetlaniem innych segmentów i zależy gdzie obliczam cyfrę jak w pętli głównej to podświetla cały czas jak w zaliczaniu i zerowaniu to mruga tylko przy zwiększaniu. Dam do przerwania niema reakcji wyświetla zero tak jak by licznik nie pracował.
  • #13 17345038
    Konto nie istnieje
    Konto nie istnieje  
  • #14 17345344
    trol.six
    Poziom 31  
    1. Acha... bo ty w programie liczysz ilość kliknięć? Tak?
    Myślałem że chcesz liczyć czas.

    2.
    nowyARM napisał:
    Jak używa zmiennych Bascom, nikt nie wie poza twórcą

    Ale można sobie co nie co poczytać. Może zły konfig dla ramu?
    https://avrhelp.mcselec.com/index.html?memory_usage.htm
    I trzeba zwiększyć wartości:
    $hwstack = 40
    $swstack = 16
    $framesize = 32

    Dla dzielenia i modulo, wywołań itp itd... może się w ramie stos nadpisywać.

    3. Czy przypadkiem nie powinno być RETURN w funkcji Zaliczanie?

    4. Nie zrozumiałem co dokładnie mruga ale może ci mrugać ponieważ zmienne: "jednosci dziesiatki setki tysiace", masz liczone w petli głównej i nie są one zsynchronizowane z przerwaniem. Zawsze przy dostępie do tych samych zmiennych w przerwaniu i pętli głównej będziesz miał ten problem.

    Przerwanie następuje w dowolnej chwili i przerywa ci wykonywanie dzielenia i modulo. Można to rozwiązać np przez atomowe kopiowanie wszystkich jakiś zmiennych.

    Jak już bardzo chcesz zostać przy modulo i dzielenie to zrub np tak:
    Dodałem zmienne L1,L10,L100,L1000 i uprosciłem przerwanie.
    Jeśli to ma być licznik kliknięć, to konwersje dałbym w zliczaniu,
    zmodyfikować trzebaby też zerowanie:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    .
  • #15 17345355
    Konto nie istnieje
    Konto nie istnieje  
  • #16 17345592
    adamekamator
    Poziom 17  
    Tak kolego zliczam ilość wciśniętych przycisków . A to mruganie to podświetlanie segmentów cyfry dziesiątek jak na wyświetlaczu już jest ponad sto i to samo z wyświetlaczem setek jak na wyświetlaczu ponad tysiąc . Poprawiło się czyli przygasły choć nadal są widoczne po takiej zmianie czyli dzielenie/mod dałem do podprogramu .
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    Skok do podprogramu wpisz musi być w zaliczaniu i zerowaniu wtedy podświetlanie
    występuje przy wciśniętym S1 jeśli dam do pętli głównej wtedy podświetla cały czas.

    Dodano po 40 [minuty]:

    Koledzy mruganie zlikwidowane jeszcze zapalanie zera przy przejściu z 9 na 10 i tak dalej ale już mam pomysł jak to usunąć jak wrócę do domu to sprawdzę i pokaże kod

    Dodano po 2 [godziny] 9 [minuty]:

    Koledzy kod wygląda tak:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    chętnie przyjmę sugestie odnośnie stylu i składni

    Dodano po 17 [godziny] 4 [minuty]:

    Koledzy zapalanie zera potem 1 przy przejściu z 9 na 10 było spowodowane złym ustawieniem Timer0 tera wszystko działa jak chciałem . Wielkie dzięki za zainteresowanie tematem kolegom mam nadzieję że ktoś się wypowie składni programu lub optymalizacji . Teraz wygląda to tak ;
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #17 17347689
    Konto nie istnieje
    Poziom 1  
  • #18 17348534
    adamekamator
    Poziom 17  
    Kolego emarcus namieszałeś mi troszkę z tą funkcją ‘Str2digits’ ale nie umiem tego wyświetlić! Poprawiłem trochę kod zmniejszyło 7% na 6% :
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #19 17348568
    Konto nie istnieje
    Konto nie istnieje  
  • #20 17348770
    adamekamator
    Poziom 17  
    Niewiele nie oto chodzi bo raczej ma za mały opis wiec troszkę minie zanim ogarnę oco w tym chodzi jestem w pracy wiec niema za wiele czasu by popróbować .
  • #21 17348793
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #22 17348995
    Konto nie istnieje
    Poziom 1  
  • #23 17349125
    adamekamator
    Poziom 17  
    Tak myślę że dużo jaśniej tylko czemu jak robię taki zapis nic nie wyświetla tylko same zera?
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Dodano po 29 [minuty]:

    Próbowałem MAKEBCD ale tam tylko dwie cyfr i stosowanie maski na pewnej stronie trafiłem na na funkcje dec2bcd działa podobnie jak MAKEBCD tylko na kilka cyfr tyle że moja wersja kompilatora tego nie obsługuje , znalazłem funkcje mod i poszukałem znalazłem przykłady i zadziałało. Założyłem temat by sprawdzić składnie i czy mam jakieś większe błędy, i dzięki koledze emarcus zyskałem 1% pamięci bo były deklarowane zbędne zmienne i niepotrzebne Debounce na zerowaniu licznika, oraz inni koledzy którzy dając przykłady pomogli usunąć błędy powodujące dziwne działanie. Gdy będzie więcej czasu kolego emarcus to popróbuje z tą funkcją od ciebie.

    Dodano po 4 [godziny]:

    Koledzy czy (Str2digits) powinno po wpisaniu podświetlić się na niebiesko? jak MAKEBCD.

    Dodano po 2 [godziny] 13 [minuty]:

    W końcu jest tak jak kolega emarcus chciał? Czy ma jeszcze jakieś sugestie spostrzeżenia które z chęcią przeczytam :D . Powodem była zła wersja bascoma miałem 2.0.7.5. a teraz mam 2.0.7.8. Coś takiego skleciłem
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #24 17350098
    Konto nie istnieje
    Poziom 1  
  • #25 17350114
    adamekamator
    Poziom 17  
    Dziękuje właśnie wczoraj się zastanawiałem gdzie ma byc zamiana licznika i w do...loop czy w przerwaniu bo w obu miejscach działa. Potrzebuję opóźnienia jeżeli zostawię Debounce domyślnie to zalicza mi drgania styków widać switch są już wypracowane . Wypróbuję twój styl bibloteki jeszcze raz wielkie podziękowania za pomoc i sugestie.

    Dodano po 21 [minuty]:

    Tak podłączone miałem tak pina.0=kr. pina.1=g-pina.7=A po zamianie pinów i wgraniu twojej tabelki cyfr wyszły krzaczki ale spróbuje twoją technikę przyswoić.
  • #26 17353223
    adamekamator
    Poziom 17  
    Kolego emarcus umie kody wyglądają tak
    bit 0 ---> a
    bit 1 ---> b
    bit 2 ---> c
    bit 3 ---> d
    bit 4 ---> e
    bit 5 ---> f
    bit 6 ---> g
    wtedy tabela byłaby:
    ‘======================================
    Cyfra:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
    '0 1 2 3 4 5 6 7 8 9
    ‘======================================

    Dodano po 13 [godziny] 12 [minuty]:

    Mam takie pytanie o troszkę inny kod a mianowicie zrobiłem odziwo działający sterownik PWM potencjometrem i wyświetlam to na led 7 seg , chodzi oto ze na wyświetlaczu wynik pokazuje 0-1024 a chce wartość napięcia ADC(0) . Co zrobiłem źle ? Sprawdzi mi któryś z kolegów i troszkę naprowadzi? Wiem panie moderatorze powinienem napisać nowy temat.

    Dodano po 2 [minuty]:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #27 17354254
    Konto nie istnieje
    Poziom 1  
  • #28 17354373
    adamekamator
    Poziom 17  
    Fajnie ze się odezwałeś jak mogę spytać to ma być to zawsze tak :
    Wart_ADC*wartość nap. ref/1023 licznik 16bit lub 255 licznik 8bit czy się mylę?

    Dodano po 11 [minuty]:

    wywala błąd "35" spodziewano się 3 parametrów

    Dodano po 12 [minuty]:

    Wielkie podziękowanie Kolego działa pokazuje 0-5.115 wygląda to tak:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Dodano po 11 [minuty]:

    Niestety nie całkiem bo dioda zachowuje się tak jak by nie było tego zapisu :
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    Użyłem tego działania bo dioda rozjaśnia się 4 razy za cały obrót potencjometru
    Czemu tak jest zły config ADC ?

    Dodano po 1 [godziny] 41 [minuty]:

    Widzę że nie takie to łatwe bo PWM uzależnione od wyświetlanej cyfr na wyświetlaczu a mianowicie jak wyświetla 256 to świeci maksymalnie 257 gaśnie i przy 511 świeci max .Więc czeka mnie literatura i próby , wieczorem zamknę temat bo kod licznika sprawdzony i zoptymalizowany za co wielkie podziękowania wszystkim co się udzielali.
  • #29 17354983
    adamekamator
    Poziom 17  
    Fajnie ze się odezwałeś jak mogę spytać to ma być to zawsze tak :
    Wart_ADC*wartość nap. ref/1023 licznik 16bit lub 255 licznik 8bit czy się mylę?

    Dodano po 11 [minuty]:

    wywala błąd "35" spodziewano się 3 parametrów

    Dodano po 12 [minuty]:

    Wielkie podziękowanie Kolego działa pokazuje 0-5.115 wygląda to tak:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Dodano po 11 [minuty]:

    Niestety nie całkiem bo dioda zachowuje się tak jak by nie było tego zapisu :
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    Użyłem tego działania bo dioda rozjaśnia się 4 razy za cały obrót potencjometru
    Czemu tak jest zły config ADC ?

    Dodano po 1 [godziny] 41 [minuty]:

    Widzę że nie takie to łatwe bo PWM uzależnione od wyświetlanej cyfr na wyświetlaczu a mianowicie jak wyświetla 256 to świeci maksymalnie 257 gaśnie i przy 511 świeci max .Więc czeka mnie literatura i próby , wieczorem zamknę temat bo kod licznika sprawdzony i zoptymalizowany za co wielkie podziękowania wszystkim co się udzielali.

    Dodano po 4 [godziny] 21 [minuty]:

    Dzięki pomocy i sugestiom kolegów
REKLAMA