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 - Stabilność funkcji Waitms w generowaniu powtarzalnych impulsów na Atmega8a/Attiny25

vstm 02 Lut 2021 23:48 750 10
  • #1 19229641
    vstm
    Poziom 15  
    Witam doświadczonych kolegów.
    Potrzebuję zrobić bardzo prosty tester. Ma za zadanie wygenerować dwa impulsy, w których czas pomiędzy zboczami opadającymi będzie wynosił 103mS. Właściwie pomiędzy narastającymi bo tranzystor je odwróci. Wiem, że Waitms nie jest dokładne ale ważniejsze jest to by te interwały były takie same, powtarzalne. Zatem czy Waitms jest stabilny. Dryft temperaturowy kwarcu i całego układu pomijam bo pomiar to kilka "strzałów" w ciągu minuty, temperatura nie zdąży się zmienić. Niech to będzie 102.8 , 102.8 , 102.8. Oby nie np. 102.8 , 103.1 , 102.9 Kwarc mam dość dokładny 12M z pięcioma zerami (12.00000). Kod mniej więcej jakiś taki;
    PortC.1 = 1
    waitms 10
    portC.1 = 0
    waitms 93
    portC.1 = 1
    waitms 10
    portC.1 = 0
    Nic ponad to co niezbędne, żadnych timer'ów itp. Chyba, że włączę timer'y i tak będę odmierzał czas ale czy to coś zmieni? Użyję Atmegi8a albo Attiny25 (bo mam dużo), któryś będzie lepszy do tego? Muszę zrobić dwa takie testery; 103mS i 3360mS.
  • Pomocny post
    #2 19229880
    Press
    Poziom 24  
    Funkcja WAITMS nie jest odporna na przerwania. Jeśli masz jakieś to każde wystąpienie przerwania w trakcie WAITMS rozjedzie go.
    Niezależnie od stabilności tej funkcji, a nie ma powodu, żeby nie była powtarzalna jeśli nie jest przerywane wykonanie przerwaniami, to i tak lepsza praktyką będzie wykorzystanie timera.
  • #3 19230664
    vstm
    Poziom 15  
    Dzięki za odpowiedź!
    Press napisał:
    nie ma powodu, żeby nie była powtarzalna

    Czyli bez różnicy, którą wersję zrobię bo nic poza tym interwałem nie będzie.
    Zatem biorę się za zrobienie na gotowo i spróbuję dwie wersje; waitms i timer. Drążę prosty temat, bo ten wzorzec ma iść do GUM, oni sprawdzą, zapłacę, wystawią świadectwo, zaplombują i koniec grzebania.
    Zamierzam zrobić tak by mogli wprowadzić korektę (jeśli będzie potrzebna) i zapisać w eeprom. czy to dobry pomysł? Jakoś tak;

    $Crystal=12000000
    Config Timer1 = Timer , Prescale = 8
    On Timer1 Inter_1mS
    Inter_1mS:
    Counter1 = Counter1 + Licznik (64036 - wychodzi z obliczeń, że da to 1ms)
    /tu odliczę sobie 103/

    Ta wartość 'Licznik' byłaby na początku pobierana z eepromu a przed zaplombowaniem byłaby możliwość jej ustawienia i zapisania.
    Wychodzi mi, że zmiana wartości 'Licznik' o 1 zmieni 103ms o 68,(6)uS na + lub - Mój oscyloskop zmierzy mS ale po przecinku ma tylko 0 lub 5 (mimo, że ma zakres us ale się nie mieszczę), dlatego słabo, nie mam czym dokładnie zmierzyć.
    Biorę się, napiszę co wyszło.
  • Pomocny post
    #4 19238180
    Konto nie istnieje
    Poziom 1  
  • #5 19239708
    vstm
    Poziom 15  
    emarcus super wykład, dziękuję!
    Starałem się wytłumaczyć ale faktycznie powinienem napisać - dwa niesymetryczne impulsy masowe w okresie 103ms (jednak wciąż nie jestem pewien czy precyzyjnie).
    Urządzenie już zrobione, działa. Ale napotkałem problem, o którym wspomniałeś. Mianowicie zawartość Counter1 w momencie rozpoczęcia cyklu jest przypadkowa. Nie mogę wykonać dokładnego pomiaru, mój oscyloskop ma 4 pozycje pomiarowe na każdym zakresie, w tym ostatnia cyfra to 0 lub 5. W moim przypadku dokładność do dziesiątej części ms w całym okresie 103 jest wystarczająca, jednak tester odwiedzi GUM, niech będzie jak najdokładniej.

    Nieco zmieniły się założenia, okres nie 103 tylko 100ms, impulsy masowe start, stop po 10ms.
    I drugi okres tak samo zbudowany - 3360ms.

    BASCOM - Stabilność funkcji Waitms w generowaniu powtarzalnych impulsów na Atmega8a/Attiny25
    BASCOM - Stabilność funkcji Waitms w generowaniu powtarzalnych impulsów na Atmega8a/Attiny25

    Użyłem trybu NORMAL, z CTC nie chciałbym teraz robić doświadczeń bo mało mam czasu. Pozostając z trybem NORMAL czy nie byłoby rozwiązaniem poprzedzić cykl poleceniem Counter1=0 ? Widziałem gdzieś Reset TIMER1 - co to robi? Nie znajduje nigdzie opisu, kompilator przyjmuje tę komendę ale nie widzę żadnych zmian na oscyloskopie i nie zobaczę z powodu jego dokładności.
    I ostatecznie takie miałbym pytania; czy użyć Couner1 = 0? I co to ten Reset TIMER1?
  • Pomocny post
    #6 19239776
    bart-projects
    Poziom 29  
    Reset i Set odnoszą się tylko do Bitów. W przypadku kiedy nie podajesz który bit to przy Reset zostanie skasowany tylko najmłodszy czyli Tobie nic nie da bo z, na przykład, 65535 zrobi się 65534. Używaj więc wersji "= 0"

    Do takich zadań najlepiej jest kupić na portalu aukcyjnym klon Saleae za około 30zł. Zmierzysz sobie dokładnie ;)
  • #7 19241697
    vstm
    Poziom 15  
    Zmieniłem na Counter1 = 64036 ("=0" to błąd). U mnie (q)12M / (pres)8 / (65536-64036) = 1kHz.
    Wysłałem do GUM, napiszę co zmierzyli. Może to potrwać do 4 tygodni.
    A jeśli chodzi o Saleae to zamówiłem, tylko skąd mieć pewność co do dokładności. Ale będę miał z czym porównać.
  • #8 19241716
    bart-projects
    Poziom 29  
    Pytałeś o różnicę między Reset a "= 0" więc..
    Co do Timera to w Bascom jest komenda ułatwiająca jego ładowanie. Nie trzeba odejmować na piechotę. Przy Presc=8 wpisujesz Load Timer1 , 1500
    Przy Presc=1 Load Timer1 , 12000 i powinno być 1kHz bo z 12000_000Hz zostają trzy zera i można to policzyć w głowie, albo na palcach :D
    Kompilator sam to sobie odejmie przy kompilacji od pojemności Timera chyba, że użyjesz zmiennej.
  • #9 19282676
    vstm
    Poziom 15  
    Zamykając temat wrzucam Świadectwo Wzorcowania. Tak to wygląda, trwało 1,5 tygodnia i kosztowało 500 netto.
    Dziękuję za zainteresowanie i zamykam temat. BASCOM - Stabilność funkcji Waitms w generowaniu powtarzalnych impulsów na Atmega8a/Attiny25 BASCOM - Stabilność funkcji Waitms w generowaniu powtarzalnych impulsów na Atmega8a/Attiny25 BASCOM - Stabilność funkcji Waitms w generowaniu powtarzalnych impulsów na Atmega8a/Attiny25
  • #10 19282957
    BlueDraco
    Specjalista - Mikrokontrolery
    I pomyśleć, że gdybyś zaprojektował to poprawnie, miałbyś dokładność taką, jak kwarc, czyli jakieś 30 ppm, nie płac
    c ani złotówki więcej... ;)
REKLAMA