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

Bascom - Opóźnienie 2 minuty przed odliczaniem po wprowadzeniu danych

T-play 16 Lip 2012 21:11 1532 18
  • #1 11113178
    T-play
    Poziom 14  
    Witam.

    Mam spory problem wynikający zapewne z małej pomyłki.

    Rozumiem, że zrozumienie kodu napisanego przez kogoś innego jest bardzo trudne, ale niestety ja sam już nie daje sobie rady z błędem.

    Mianowicie chodzi o to, że po wprowadzeniu z klawiatury Czasu oraz Kodu, zanim zacznie się odliczanie mija czas około 2 minut, gdzie powinno wykonać się to natychmiast.

    Podczas pisanie programu miałem problem, że gdy wartość wyniesie 0 zostaje ona od razu zmieniona na 5, a powinno być gdy wartość wyniesie -1, lecz taka nie mieści się w "Byte" dlatego u mnie na wyświetlaczu 1 to tak na prawdę 2 w programie.


    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jestem bardzo wdzięczny za jakąkolwiek pomoc.
  • #2 11113256
    Konto nie istnieje
    Poziom 1  
  • #3 11113294
    T-play
    Poziom 14  
    Ta procedura wykonuje się gdy czas dobiegnie końca, powoduje ona wyświetlenie na wyświetlaczach czasu 00:00 oraz odpowiedniego kodu, aby program nie powrócił do wykonywanie pętli głównej wstawiłem tam pętle nieskończoną.
  • #4 11113442
    Konto nie istnieje
    Poziom 1  
  • #5 11113571
    T-play
    Poziom 14  
    Niestety nic to nie dało, problem następuje na samym początku, zaraz po wykonaniu pierwszych procedur, czeka jakies 2 minuty a potem odlicza prawidłowo.

    Najciekawsze jest to ze ja ten program już kiedyś napisałem, tyle że był on na płytce stykowej a teraz jak przeniosłem to na płytkę drukowaną, musiałem pozamieniać porty i wszystko się popsuło. Muszę wszystko pisać od nowa ale na starym "schemacie".

    Podaję starszą działającą wersję.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 11115496
    Konto nie istnieje
    Poziom 1  
  • #7 11115921
    T-play
    Poziom 14  
    Porozstawiałem znaczniki tak jak proponowałeś z tego co mi wyszło to program bezproblemowo przechodzi do pętli głównej ale wykonuje ją kilkadziesiąt razy zanim zmieni wyświetlaną wartość.

    Niestety nie mam już portów na lcd, wszystko multiplexuje na ośmiu 7-segmentowych wyświetlaczach.

    Znacznik dałem w pętli głównej zaraz po
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #8 11115979
    Konto nie istnieje
    Poziom 1  
  • #9 11116037
    T-play
    Poziom 14  
    A to bardzo ciekawe, wartość sekundyj = 2 a poprzednia = 0 i tak jest dopóki zegar nie wystartuje, a potem już normalnie, poprzednia=skeundyj.
  • #10 11116076
    Konto nie istnieje
    Poziom 1  
  • #11 11116140
    T-play
    Poziom 14  
    O jaką funkcję wyświetlania Ci chodzi?
    Declare Sub Wyswietlacz(byval Cyfra As Byte) <- ta procedura wykonywana jest przy przerwaniu timera0 czyli co 2ms. Dzięki temu cały czas jest coś wyświetlane.

    Co do tej zmiennej to gdzie ja mam ja zwiększać? Jak dam zaraz po Do to będzie tak szybko zwiększana ze po chwili wyjdzie poza zakres.
  • #12 11116185
    Konto nie istnieje
    Poziom 1  
  • #13 11116399
    T-play
    Poziom 14  
    Jak pisałem procedura Wyswietlacz(byval Cyfra As Byte) wywoływana jest przez przerwanie timer0, powoduje ona jedynie odświeżenie na wyświetlaczach wartości znajdujących się w zmiennych disp(8).
    Mam 8 wyświetlaczy, jeżeli chce aby na np. 2 z nich wyświetliło mi wartość 2 to wpisuje do zmiennej disp(2) wartość 2. Ze względu na to właśnie nie mogę zbytnio wyświetlać wartości 2 cyfrowych, bo jak to zrobić na 7 segmentowym wyświetlaczu i z tego tez powodu mam sekundy, minuty i godziny rozpisane na jedności i dziesiątki, "sekundyj" oznacza sekundy jedności a "sekundyd" sekundy dziesiątki.

    Jak wstawię zwiększanie po Do to będzie się ono wykonywało z częstotliwością około 16MHz, a znacznik umieściłem po

    If Sekundyj <> Poprzednia Then // To to zapytanie jest prawdziwe co około 1 sekundę
    Poprzednia = Sekundyj //i co sekundę własnie wykonywana jest cała pętla
    "znacznik"
    [...]
    end if //a w większości czasu, jest nie prawdą, więc pętla nie jest wykonywana
    loop
  • #14 11116487
    Konto nie istnieje
    Poziom 1  
  • #15 11116513
    T-play
    Poziom 14  
    Znaczy zmieniam troszkę program na bieżąco i zmieniłem te wartości:
    Godzinyj = 1
    Godzinyd = 1
    Minutyj = 1
    Minutyd = 1
    Sekundyj = 2
    Sekundyd = 2
    Poprzednia = 10

    Ale myślę że to nie tu był problem bo procek powiedział papa i przeszedł do świata zmarłych procesorów, obecnie nie reaguje, może uda mi się go jeszcze ożywić, być może to właśnie on jest tu problemem.

    Dodano po 1 [godziny] 7 [minuty]:

    Ah, procek żyje, pękła nóżka od kwarcu, wymieniłem i już działa.

    Wstawiłem tak jak mówiłeś znaczniki, jeden zaraz po Do a drógi po
    If Sekundyj <> Poprzednia Then
    Poprzednia = Sekundyj

    Niczego się właściwie z tego nie dowiedziałem, tak jak pisałem wcześniej znacznik wstawiony zaraz po DO uruchamia się znacznie częściej niż ten po bloku warunkowym.

    Nie mam zielonego pojęcia gdzie następuje problem, zapewne gdzieś w tej pętli głównej, ale tam nie ma odnośników do podprogramów aby w nich utknąć.
  • #16 11116917
    Konto nie istnieje
    Poziom 1  
  • #17 11116949
    T-play
    Poziom 14  
    No właśnie o dziwo nie, wszystko startuje zaraz po, znacznik po DO jak i znacznik po zapytaniu.
  • Pomocny post
    #18 11117075
    Konto nie istnieje
    Poziom 1  
  • #19 11122187
    T-play
    Poziom 14  
    Witam ponownie, mój dostawca internetu mie troszke zawiódł bo nie miałem przez kilka dni sieci, ale przez ten czas znalazłem problem, tkwił on w tym miejscu:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Na początku określałem wartość Sekundyj przed procedurami przez to mogły zostać zmienione w tych procedurach i wrócić zmienionymi do pętli, przypuszczam, że z jakiejś przyczyny wartość sekundyj w tych procedurach wychodziła poza zakres i mogła osiągnąć 255, przez to program odliczał na samym początku 255. Aby to naprawić wystarczyło określić wartości tuż przed pętlą główną:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    i wszystko już działa.

    Dziękuję za pomoc.
    Pozdrawiam.
REKLAMA