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

[ATmega8] [ATmega8][Bascom] - Zastosowanie Timer0 zamiast Waitms w programie

yokoon 27 Wrz 2014 15:12 966 7
REKLAMA
  • #1 13995276
    yokoon
    Poziom 29  
    Witam.
    Czytałem wiele na ten temat, ale nie rozwiło to moich wątpliwości co do zastosowania timera0 w miejsce Waitms.

    Oto część programu w którym chcę wykorzystać Timer0:
    Oczywiści to tylko przykład.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Czy tak można zastosować Timer0 w miejsce Waitms 750 ?
  • REKLAMA
  • Pomocny post
    #2 13995482
    ZbeeGin
    Poziom 39  
    Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś.

    Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom".
    Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana Waitms 750 na Call 800_ms nie ma większego sensu. W dalszym ciągu program będzie blokowany na prawie 1s, a nie o to w stosowaniu przerwań chodzi.
  • REKLAMA
  • Pomocny post
    #3 13995566
    xury
    Specjalista automatyka domowa
    Istotą projektowania programu jest taka konstrukcja by nie przerywać działania, a jedyne odpytywać wtedy kiedy potrzeba. Da się to zrobić, ja kiedyś tu gdzieś pokazywałem taką konstrukcję kodu.
    Jak kolega powyżej uważam, że zamiana siekierki na kijek nie ma sensu.
  • REKLAMA
  • #4 13996055
    yokoon
    Poziom 29  
    Dziękuję Panowie za ustosunkowanie się do mego problemu.
    W jaki inny sposób przeczekać czas konwersji skoro jest niezbędna ?
    Ja podałem przykład z jednym DS'em a jak będzie więcej w układzie.

    Waitms'y występują także w innych programach jak je zastąpić ?
  • Pomocny post
    #5 13996325
    ZbeeGin
    Poziom 39  
    yokoon napisał:
    W jaki inny sposób przeczekać czas konwersji skoro jest niezbędna ?

    Zainicjuj pomiar. Program może w tym momencie zająć się czym innym. Jak upłynie już wymagany czas to program może odczytać sobie pomiar jak będzie miał na to "chwilę wolnego".

    yokoon napisał:
    Ja podałem przykład z jednym DS'em a jak będzie więcej w układzie.

    To postąpisz w ten sam sposób. Trzeba inicjować pomiary i potem sobie je przeczytać w wolnej chwili. Oczywiście nie hurtowo, bo podczas wykonywania polecenia CONVERT T jednego czujnika nie jest zalecana inna transmisja na szynie.

    yokoon napisał:
    Waitms'y występują także w innych programach jak je zastąpić ?

    To zależy jakie Waitms'y. Szczególnie długie nie są pożądane i jeśli są wymagane to trzeba odpowiednio skonstruować program, by go nadmiernie nie wstrzymywały.
    Walka z każdym Waitms czy Waitus albo @genus() w programie to jak walka z wiatrakami. Nie zawsze jest sensowna.
  • REKLAMA
  • Pomocny post
    #6 13996348
    xury
    Specjalista automatyka domowa
    Nie musisz czekać. Musisz zacząć trochę inaczej myśleć niż "linijka po linijce"
    Wykonaj konwersję i wystartuj timer. Pozwól programowi biec dalej. Odczytaj temperaturę, gdy timer odliczy te 800 ms.
    Pamiętaj, że program główny to zazwyczaj pętla. Niech nawet sobie bezproduktywnie biega w koło do czasu zanim nie będzie można odczytać temperatury. Później możesz coś dodać by się robiło w tym czasie, by się procesor "nie marnował".
  • Pomocny post
    #7 13996470
    zumek
    Poziom 39  
    xury napisał:
    Nie musisz czekać. Musisz zacząć trochę inaczej myśleć niż "linijka po linijce"...

    Dokładnie i nie jest to wcale takie proste :cry:
    Inaczej będzie to wyglądać dla prostego 'termometru', a zdecydowanie inaczej jeśli 'w tle' pracuje kilka przerwań, które rozwalą komunikację na 1wire na amen.

    Zerknij co kiedyś wykoncypowałem :D , żeby przerwanie obsługujące 4 wyświetlacze LED nie rozwaliło transmisji na 1wire.
    https://www.elektroda.pl/rtvforum/topic1623781.html#7897196
  • #8 13997094
    yokoon
    Poziom 29  
    Dziękuję Panowie za podpowiedzi. Zacznę się do nich stosować.
REKLAMA