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

Wyznaczenie czasu pętli - jak to policzyć?

devolt 03 Sie 2009 13:50 2043 17
  • #1 6851923
    devolt
    Poziom 21  
    Hej mam taki problem,
    pisze prosty program do swojej pracy inżynierskiej, który odczytuje dane z enkodera absolutnego w kodzie Graya , nastepnie poddaje je konwersji i wyświetla w postaci binarnej i dziesiętnej.
    Program działa ,ale muszę podać czas działania pętli programu.
    Nie wiem jak to mozna zmierzyć. Procek taktuje wewnętrznym oscylatorem 8 mhz.
    W asemblerze pewnie wystarczyło by policzyć instrukcje i luzik, ale w bascomie juz chyba tak sie nie da. Ja mam program napisany w bascomie.
    Czy można to zrobic z uzyciem jakiegos Timera wbudowanego w procek??
    Próbowałem ale za kazdym razem podaje inną wartość, pewnie coś źle robie...
    Macie jakieś pomysły??
  • #2 6851979
    Uzytkowniik
    Poziom 16  
    Bascoma nie znam, ale znam asemblera i wydaje mi sie że akurat to bedzie poobnie. Jak sie myle to przepraszam i proszę o poprawienie.

    Każda instrukcja trwa określoną liczbe cykli maszynowych, Trzeba zliczyć ile tych cykli wykona się w pętli i pomnożyć przez czas trwania jednego cyklu.
  • #3 6851999
    devolt
    Poziom 21  
    No to w sumie logiczne tylko gdzie mogę znaleźć ile trwają poszczególne instrukcje??
  • #4 6852036
    Loker
    Poziom 39  
    Nie sądze, żebyś gdziekolwiek znalazł czasy trwania instrukcji w Bascomie... To, co z Twojego programu trafi do procka, zależy od kompilatora. Co ciekawsze czas trwania pętli może się zmieniać w zależności np. od kodu, który masz odczytać / wyświetlić.
    Ja ososbiście do pomiaru czasu pętli użyłbym... oscyloskopu :)
  • #5 6852068
    devolt
    Poziom 21  
    hmmm w sumie to tak sie składa że posiadam oscyloskop cyfrowy :) pożyczony co prawda ale jest :)
    Jak mogę to zrobić za pomocą oscyloskopu ?? Zmierzyć pobór prądu przez procek??? Czy jakos inaczej
  • #6 6852100
    terran*
    Poziom 11  
    Wlaczasz timer, puszczasz petle, zatrzymujesz timer i odczytujesz czas trwania petli powiekszony o kilka cykli na zatrzymanie i start timera.
  • #7 6852113
    wicy
    Poziom 22  
    devolt napisał:
    No to w sumie logiczne tylko gdzie mogę znaleźć ile trwają poszczególne instrukcje??

    Włącz symulator Bascoma i obacz czasy na pasku stanu.
  • #8 6852129
    kwesoly
    Poziom 15  
    Poza tym można hexa otworzyć w AVR studio, przejrzeć deasemblowany kod, i przy okazji symulator na bieżąco pokazuje ilości cykli jak i czas przy zadanej częstotliwości. Bascom chyba generuje już standardowe hexy?
  • #9 6852185
    Loker
    Poziom 39  
    Metoda z oscyloskopem - na początku pętli puść impuls na jakieś nieużywane wyprowadzenie procka, zapnij się oscyloskopem na to wyprowadzenie i mierz czas pomiędzy impulsami :)
  • #10 6852188
    devolt
    Poziom 21  
    Dzięki za pomoc :) chyba już sobie poradziłem. Wykorzystałem dwa sposoby, jeden z Timerem i czas wyszedł mi 928 us, a drugi z symulatorem i tam też udało mi się wyznaczyć ten czas, który wyniósł około 900us wiec chyba sie zgadza :)

    dodano 16:07:
    Hmm chyba jednak te dwa powyższe sposoby nie są jednak dobre, albo ja coś pokręciłem. Podłączyłem oscyloskop i dałem dwa impulsy na wyjcie portu d1 , jeden na samym początku petli drugi na końcu. Z pomiarów wyszło mi ze czas wynosi 996ns czyli rząd wielkości mniej :) może coś pokręciłem z obliczeniami. Czy taki czas pętli jest realny ?? 996ns

    tu fragment programu:
    
    Do
    
       Set Portd.1
       Reset Portd.1
    
       Cursor Off
    
       Call Pobierz                                             ' skocz do podprogramu Pobierz
    
       Call Przelicz                                            ' skocz do podprogramy Przelicz
       Cls
    
    
       Lcd "BIN:" ; Bin(decymal)                                ' wyświetlanie wartości kąta w postaci binarnej
       Lowerline
       Lcd Stopnie ; Chr(0)                                     ' wyświetlanie wartości kąta w postaci dziesiętnej
       Waitms 100
    
       Set Portd.1
       Reset Portd.1
    
    Loop
    
  • #11 6852661
    zumek
    Poziom 39  
    devolt napisał:
    ... albo ja coś pokręciłem.

    Pokręciłeś ;)
    W pętli Do...Loop masz instrukcję Waitms 100, więc jakim cudem cała pętla może się wykonać w 900nS czy też 900uS :?:
  • #12 6852707
    devolt
    Poziom 21  
    Hehe no to racja taki czas nie jest możliwy:) ale wydaje mi sie ze dobrze zmierzyłem.
    na pinie d.1 mam taki przebieg
    Wyznaczenie czasu pętli - jak to policzyć?
  • #13 6852776
    ZbeeGin
    Poziom 39  
    zumek napisał:
    W pętli Do...Loop masz instrukcję Waitms 100, więc jakim cudem cała pętla może się wykonać w 900nS czy też 900uS :?:

    Ten cud nazywa się $SIM.
  • #14 6852800
    wicy
    Poziom 22  
    Przecież wiesz jakie masz taktowanie procesora. W Bascomie obok czasu masz podaną ilość taktów, więc można to sobie przeliczać.
  • #15 6852817
    Jacek Rutkowski
    Poziom 28  
    A jak kolega rozróżnia który impuls jest pierwszy a który drugi? Bo według mnie to czas 900ns może być nie od pierwszego impulsu do drugiego tylko od drugiego do pierwszego, tzn czas 900ns to czas na wykonanie skoku z końca pętli na początek ! :D usuń impuls z końca a zostaw tylko pierwszy i wtedy zobacz na oscyloskopie i jaki będzie czas ewentualnie na końcu jak wystawisz wysoki stan daj 5 x NOP i dopiero niski, wtedy rozróżnisz który impuls jest pierwszy a który drugi.
  • #16 6852844
    devolt
    Poziom 21  
    nie no teraz już sobie poradziłem :) wstawiłem toggle zamiast ustawiania bitów(set reset) i wyszedł ładny sygnał prostokątny.
    Czas dla waitms 100 wyszedł 121 ms a dla waitms 20 czas wynosi 46 ms . To juz bedzie chyba dobrze :)
    Z tym symulatorem to miałem taki problem ze on latał w pętli i nie dało sie go tak idealnie zatrzymać na końcu pętli.
    Dawałem instrukcje po instrukcji i tez jakoś nie mogłem utrafić :) Ale chyba teraz juz jest dobrze.
    Ponizej zrzuty z ekranu, 1 - dla waitms 100ms
    2 fotka dla waitms 20ms

    Dzięki za pomoc :)
    100ms
    Wyznaczenie czasu pętli - jak to policzyć?
    20ms
    Wyznaczenie czasu pętli - jak to policzyć?
  • #17 6852865
    Jacek Rutkowski
    Poziom 28  
    W symulatorze można zaznaczyć punkt zatrzymania, bodajże naciskając F7 czy któryś z funkcyjnych lub klikając prawym klawiszem myszki na wymaganej linii. nie powiem dokładnie bo jestem na wyjeździe i nie mam Bascoma pod ręką.
  • #18 6852924
    sluka
    Poziom 2  
    Witam

    Pod prawym przyciskiem myszki, przed numeracją linii. Klikniesz, a w menu kontekstowym masz to co możesz zrobić przy debugowaniu. Pułapki na kodzie zakłada się F9, zdejmujesz ctrl+F9.
REKLAMA