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

[Atmega32] [Atmega32][Bascom] - Nieprawidłowy pomiar czasu przejazdu między bramkami

Hopen 28 Kwi 2013 21:20 2874 10
REKLAMA
  • #1 12249741
    Hopen
    Poziom 12  
    Witam,
    Mam mały problem. Pewnie za bardzo kombinuje ale może pomożecie.
    Mianowicie chce mierzyć czas przejazdu pomiędzy bramkami.
    Wykorzystuje Atmega32 (bo taką mam na płytce testowej) a docelowo ma być Atmega8.
    Czas startu i mety wykonuje za pomocą przycisku na przerwaniach INT.
    Niestety program nie liczy mi czasu tylko "coś" sam sobie liczy max do wartości 0,9, są to wartości losowe.
    Kwarc zewnętrzny 16MHz i fuse bity ustawione.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    W czym może być problem?
  • REKLAMA
  • #2 12249792
    xury
    Specjalista automatyka domowa
    Pomyślałeś o tym, że przycisk zanim na stałe załączy styk ma drgania, które zwierają i rozwierają go nawet kilkanaście razy w ciągu kilku milisekund ?
    Po drugie wyświetlanie na LCD w pętli DO...LOOP odbywa się za szybko. LCD potrzebuje czasu na odświeżenie danych oraz na oczyszczenie ekranu.
    Zezwolenie na aktualizację wyświetlacza powinno być zrealizowane po zakończeniu pomiaru.
  • REKLAMA
  • #3 12249872
    Hopen
    Poziom 12  
    Przyciski są tymczasowe tylko, i w programie dopisałem, że są w stanie 1.
    Wynik wyrzuciłem z pętli głównej ale wtedy pokazuje mi tylko 0,0.
  • REKLAMA
  • #4 12249982
    xury
    Specjalista automatyka domowa
    Co z tego, że są "w stanie 1"?
    No zgadza się, że przyciski są tylko tymczasowo, ale one mogą załączyć podczas jednego naciśnięcia przerwanie nawet kilkaset razy. W dodatku w przerwaniu masz operację mnożenia na zmiennej SINGLE co nie jest dobrym rozwiązaniem.
    Jeszcze raz sugeruję by wywalić LCD z pętli. Najlepiej ją zostawić pustą.
    Wynik wyświetlać TYLKO po dokonaniu pomiaru, a mnożenie przeprowadzać poza podprogramem obsługi przerwania, i po wywołaniu pierwszego przerwania na danym INT blokować kolejne przerwanie do chwili zakończenia pomiaru.
  • #5 12250494
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 12252602
    Hopen
    Poziom 12  
    Koncepcja liczenia się zmieniła.

    Liczenie odbywa za pomocą:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wyświetlanie zrobione w pętli głównej tak samo jak inicjacja startu i stopu stopera.

    Na bieżąco poszerzam program o dodatkowe funkcje.
    Na razie zamykam temat do momentu pojawienia się problemu :)

    Dodano po 51 [minuty]:

    No i napotkałem problem.

    Coś źle robię. Chce zapisać pomiar czasu jako jedna zmienna, która będzie mi potrzebna do następnych obliczeń. Próbowałem tak ale wyskakują błędy.

    Pomiar = Sekundy_d + " " + Sekundy_j "" + Setne_d "" + Setne_j

    Jak i :

    Pomiar= pomiar + str (sekundy_d)
    pomiar = pomiar + str (sekundy_j)

    wtedy to już kosmiczne wyniki mam.

    Jak to zapisać poprawnie ?
  • #7 12253378
    Konto nie istnieje
    Poziom 1  
  • #8 12253492
    Hopen
    Poziom 12  
    Złego jest to, że nie jest to mój wynik czasu zapisany jako jedna zmienna w postaci dziesiętnej.

    Potrzebuję tego, aby później porównywać ten wynik zapisanymi z innymi danymi i zależności od tego czasu zmierzonego będzie wykonywać inne zadania.

    Nie wiem jak to rozwiązać.
  • #9 12254070
    Konto nie istnieje
    Poziom 1  
  • #10 12275925
    Hopen
    Poziom 12  
    Coś mi nie wychodzi chyba w złym momencie kody wpisuje Twoje podpowiedzi kolego "emarcus".

    Kod: text
    Zaloguj się, aby zobaczyć kod
    [/code]
  • #11 12278621
    Hopen
    Poziom 12  
    nie mogę sobie z tym poradzić.
    Ktoś może wie jak zmodyfikować mój kod aby czas był jako jedna zmienna?

    Dodano po 1 [godziny] 25 [minuty]:

    udało mi się zmienić na zmienna typu string ale niestety tą zmienną nie mogę użyć w działaniach matematycznych :(
    Jak można to zrobić inaczej aby czas minuty i sekundy które u mnie są jako osobne zmienne zamienić na jedną i np.do niej dodać inną zmienną lub podzielić?

    Dodano po 1 [godziny] 38 [minuty]:

    Dziękuję wszystkim temat zamykam, rozwiązałem sprawę :)

    A było to takie proste :D
    Dodanie kilku działań i wyszło.

    Pozdrawiam i dziękuję wszystkim za wszelką pomoc,
REKLAMA