Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Atmega][Bascom] Timer liczenie w milisekundach [Nie komercyjne]

20 Lut 2017 19:24 831 9
  • Poziom 13  
    Witam! Potrzebuję gotowy kawałek kodu do liczenia czasu wykonywania całej pętli w milisekundach od "Do ... Loop" warunek licznik nie może się przepełnić. Maksymalny czas w jaki kod bedzie wykonywany to do 300ms może być mniej. Procesor Atmega2560 kwarc 16Mhz. Liczyć ma w kółko tak by pokazać ewętualnie czy optymalizacja kodu daje jakiekolwiek efekty.
    Z góry dziękuje za kod.
  • Specjalista - Mikrokontrolery
    Nie napisałeś nic o cenie, jaką byłbyś gotów zapłacić.
  • Poziom 13  
    Jesteś bardzo pomocnym człowiekiem. Jak Pan wyżej wspomniałem to z mojej strony mogę jedynie podziękować osobie która mi pomoże.
  • Moderator Mikrokontrolery Projektowanie
    Ten dział forum jest od pomagania, a nie od dawania gotowców, stąd reakcja BlueDraco, której nie powinieneś się dziwić :)

    Co do meritum sprawy, to wystarczy włączyć timer ustawić odpowiednio na początku pętli i odczytywać na jej końcu.
    Można także zrobić zewnętrzny miernik na innym mikrokontrolerze, a w pętli głównej Twojego programu zmieniać stan jakiegoś pinu na przeciwny. Czas pomiędzy zmianami będzie liczył ten drugi mikrokontroler.
  • Poziom 13  
    Ależ piękny by był to temat gdyby taki kod się tu pojawił i nie nie chodzi o cały program tylko jego podstawowe składnie. Pomyślnie tylko jak jakiś początkujący wpisuje w wyszukiwarkę " Liczenie milisekund" i to pierwszy temat który otwiera i ma piękny kod na tacy zaraz pod pytaniem bez czytania minioną postów... Itd..

    Tak wiem że należy odpalić timer na początku i zatrzymać na końcu i odczytać jego wartość.. no nic. Dziękuję za wypowiedzi tak czy inaczej..
  • Poziom 37  
    @sackoizo - jak znasz bascoma to chyba potrafisz skonfigurować timer, wystartować na początku pętli, wczytać zawartość po wyjściu z pętli i przeliczyć na ms? Wbrew pozorom help z BASCOMa zapewnia całkowicie przyzwoitą pomoc dydaktyczną. Zerkał tam kolega czy popędził na forum po gotowca?
  • Pomocny post
    Poziom 35  
    sackoizo napisał:


    Tak wiem że należy odpalić timer na początku i zatrzymać na końcu i odczytać jego wartość.. no nic. Dziękuję za wypowiedzi tak czy inaczej..


    Odp. kol. Draco była troche sarkastyczna, bo na tak prostą procedurę nikt, kto ma choć troche rozeznania w tej dziedzinie chyba (!) nie szuka pomocy.
    Mopzesz to zrobić na kilka sposobów:
    1. mierzyc czas metodą Timer1/Capture. Pozwala mierzyć czas w zakresie do ok 4 sec. bez zliczania przepełnień.
    Wymaga jednak stosowania interruptu.
    2. Pomiar czasu Timerem. W tym przypadku najwygodniejszy byłby timer1 ( albo inny 16-bit) ze względu na narzucony czas 300 msec. 8-bitowy timer nie nadaje się bo musiałbyś zliczać przepełnienia, co wprowadzi pewną niedogodność rachunku i pomiaru.
    3. Bezpośredni pomiar czasu Timerem1; - nie wymaga zatrzymuwania i ponownego startu jak w załączonym przykładzie.
    4. I wreszcie następna opcja: W Bascom IDE podczas sumulacji metodą "Step into code(F8)' gdy dojdziesz do pierwszej instrukcji w Do....Loop, zerujesz ilość cykli w status bar ( lewa strona na pasku na samym dole okna symulatora) ; w miarę postępu programu obserwujesz zmiany cykli oraz obok obliczonego czasu od momentu wyzerowania. Dochodząc do końcowego zamknięcia pętli 'Loop' odczytasz wynik zużytego czasu na wykonanie całej pętli.
    Poniżej prosty przykład dla (3.) oraz dla prześledzenia alternatywy (4.).
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    We 'free run' -pierwszy wynik/odczyt może być zerowy(!)...
    e marcus
  • Poziom 13  
    Wielkie dzięki! O to właśnie chodziło! Pięknie i prosto. Da się, da się no da się odpowiedzieć normalnie? Wszystko działa jak należy piękne dzięki oby więcej takich dobrych ludzi na elektrodzie.
  • Moderator Mikrokontrolery Projektowanie
    Powinieneś zdać sobie sprawę z faktu, że BASCOM jest językiem niszowym ponieważ: http://mikrokontrolery.blogspot.com/2011/04/jaki-jezyk-wybrac.html
    Dlatego podpowiadający dają wskazówki (bo znają sprzęt), ale nie podadzą przykładu, bo nie znają BASCOM.

    Jeśli więc otrzymujesz wskazówkę, że należy włączyć timer, to sięgasz do:
    - helpa Bascoma,
    - lub szukasz przykładu na forum lub w sieci.

    Timer to podstawowe narzędzie. Skoro wiedziałeś:

    sackoizo napisał:
    Tak wiem że należy odpalić timer na początku i zatrzymać na końcu i odczytać jego wartość..

    to trzeba było zrobić to co napisałem wyżej.
    Jeśli miałbyś problemy, wtedy należałoby zapytać i pokazać swój kod.
  • Poziom 13  
    Jeśli nie znają bascoma bo to "niszowy język" (chodź tak nie uważam ale to tylko moje zdanie) to po kiego się wypowiadają? "Nie znam języka to się wypowiem.." Temat powinien leżeć i czekać na właśnie taką odpowiedz jaką udzielił kolega emarcus zgodnie z zadanym pytaniem/prośbą bo mam nadzieję że dobrze sprecyzowałem ze chodzi o gotowy kod a nie o naprowadzenie na temat timerów (czytanie ze zrozumieniem).
    "Szukasz przykładu na forum lub w sieci" to elektroda co to jest? Nie jest to forum nie istnieje w sieci? BAM! a co to?! teraz już jest taki temat na forum elektroda z pięknym przykładem i nie nie twoim "dondu" ale tak potwierdzam jak ktoś będzie szukał w "tej" sieci lub "tym" forum to znajdzie wedle "ten" temat twoich rad. Zupełnie nie wiem po co są te wypowiedzi.. Fajnie jak by moderator pousuwał posty które nie są pytaniem i odpowiedzią na nie (moje też).


    Moderowany przez dondu:

    Sugeruję, by kolega przeczytał jeszcze raz mój powyższy post, bo zadaje pytania, na które udzieliłem w nim odpowiedzi.

    Wielokrotnie bowiem wskazanie drogi (w tym wypadku timera) załatwia sprawę pod warunkiem, że pytający ma dobrą wolę uczenia się i szukania informacji, a nie chce otrzymywać gotowca co ociera się o 3.1.17 regulaminu, który kolega zaakceptował, a który inny moderator wykorzystałby już w momencie założenia tego tematu kierując go do kosza.

    Dlatego sugeruję zmienić ton dyskusji i podejście do sposobu uzyskania pomocy oraz większe zaangażowanie.