Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

bascom i liczniki

MichalKl 05 Nov 2003 20:44 1686 12
  • #1
    MichalKl
    Level 16  
    Hej Ludzie
    mam pewien problem.z tego co sie orientuje ustawione liczniki:
    Config Timer0 = Timer , Mode = 1 , Gate = Internal
    Config Timer1 = Timer , Mode = 1 , Gate = Internal

    Start Timer0
    Start Timer1

    Do
    Loop

    powinny zliczac taka sama wartosc.a w symulacji programowej wychodzi, ze jeden zlicza o polowe szybciej niz drugi np: T0=100 to T1=50,T0=10 to T1 = 5.
    Pytanko:tak ma byc czy moze czegos nie dokladnie jaze?
    Procek to 89C2051
  • #2
    szymtro
    Level 30  
    odpalilem ten fragment kodu i u mnie w symulatorze zliczja razem TH0 i TH1 (jest to samo). Czy masz cos jeszcze dopisane do tego kodu(jakies dodatkowe procedurki)? No i napisz ktorejwersji uzywasz.
    Pozdrawiam
  • #3
    MichalKl
    Level 16  
    Witam.
    Wersja 2.0.10.0.
    Ten kod zachowuje sie tak samo w bardziej rozbudowanym programie jak i w tym co wyzej jest napisany (napisalem sobie to odzielnie bo takze myslalem ze cos napisane jest zle w dalszym programie)


    Pozdrawiam
  • #4
    kamyczek
    Level 38  
    A czy koledzy zastanowili sie ze co 2 przerwanie t1 wystapi podczas obsługi przerwania t2 tj mniejwiecej cykl zegarowy po T0 i wtedy moze zostac nie wykonane ze wzgledu na kolejnosc wykonywania przerwań włączanie obu liczników równocześnie i to z wielokrotną liczbą 2*5=10 prowadzi do takich anomalii zreszta wszystko co robia dwa przerwabnia mozna zrobic jednym tym szybszym aplikujac warunek poza nim lub wewnatrz należy pamietać aby nie rozwodzic sie zbyt w obrebie przerwania aby miedzy przerwaniami zostal wolny czas na wykonanie programu poza przerwaniem jest to szczególnie dokuczliwe czesto przy 51 bo nawet 24MHz /12 to tylko 2MHz czyli takt procka 51 a przy 4 MHz to juz nawet nie bede liczył ...AVR to rakieta przy nim 5 razy szybszy bo np 2313 10MHz na zegarze i wiekszosc instr w jednym cyklu zegara trzeba inaczej pisac prigram i to jest wada nie pakietu tylko brak zrozumienia procesora który potrafi tylko jedną operacje wykonac w tym samym czasie (cyklu zegara )wiec 2 przerwan nie obsłuży a nie pamieta liczby przerwan ktorych obsługe zawiesza tylko jednego z danego przerwania !!!
  • #5
    MichalKl
    Level 16  
    Zmienlem program na nowsza wersje.
    Do kamyczek: problem w tym, ze przerywanie jeszcze nie wystapilo (licznik sie nie przepelnil) i te dwa sie rozjezdzaja.I tak koledze szymtro wszystko chodzi wporzadku-wiec to ja mam problem z moim softem lub hardem.
    Tak na marginesie-terz programuje Avr-y i takich jaj to jeszcze na nim nie mialem-a z 51 to taki "skok w bok"-taniej wychodzi dla mniej wymagajacych programow.

    Pozdrawiam
  • #6
    Tdv
    Level 34  
    kamyczek: Coś chyba niedokładnie odrobiłeś zadanie domowe... Co z tego, że wystąpią równocześnie? Po prostu najpierw będzie obsłużone to o wyzszym priorytecie (T0), a potem te i niższym. Zresztą co ma obsługa przerwań do ilości zliczonych przez tajmer impulsów?
    Co podmiot liryczny ma na myśli: "..włączanie obu liczników równocześnie i to z wielokrotną liczbą 2*5=10 prowadzi do takich anomalii.."?
  • #7
    kamyczek
    Level 38  
    może i masz racje ale nie do konca bo nie ma licznika ilosci przerwan licznika i jak w trakcie obslugi t0 wystąpi 2 przerwania od t1 to jedno zostanie opuszczone wiec to ty zle odrobiles zadanie domowe ustawienie bitu zgłoszenia przerwania moze wystąpic tylko raz podczas obslugi inbnego przerwania w przeciwnym razie wykona sie tylko raz po skończeniu obslugi przerwania od T0 bez wzgledu czy wystapiło raz czy 1000000 razy w tym czasie poczytaj sobie notki katalogowe i komentarze ja programuje 51 od kilku lat i przerwania przegryzłem wielokrotnie poza tym kto wykorzystuje dwa przerwania do wykonania 2 operacji o czasach wielokrotnych stosuje sie jedem timer i dodatkowy bit ustawiany co 2 zgłoszenie przerwania wiec pomyśl a potem pisz
  • #8
    szymtro
    Level 30  
    Panowie - w tym przykladziezniema przerwan - nawet sa nie wlaczone wiec to nie jest napewno to. Zapomnialem dodac zejasprawdzalem na wersji 2.0.8 i wszystko gra(obaliczniki licza tak samo). Jezeli ktos ma wersje 2.0.10 to niechsobiewrzuci kawalek kodu wcisnie F7 a potem F2, uruchomi symulacje i niech poobserwuje stanrejestrow TH0, i TL0,1. Powinny obaliczyc tak samo.
  • #9
    Tdv
    Level 34  
    kamyczek: Hmm jak długo Ci trwaja procedury obsługi przerwań??? Że aż drugi tajemer się przepełni 10 razy? To znaczy że po prostu je źle piszesz od tych kilku lat!
    ".. kto wykorzystuje dwa przerwania do wykonania 2 operacji o czasach wielokrotnych stosuje sie jedem timer.." z tym się zgodze, ale kolega MichalKl chciał to chyba zrobić w celach edukacyjnych.
  • #10
    MichalKl
    Level 16  
    Witam.
    Panowie-klucicie sie o przerywania- o oto tu nie chodzi.Choc nawet jest plus-czegos mozna sie nauczyc o 51.Moze to rozwieje wszystkie problemy z wielokrotnymi przerywaniami:

    Config Timer0 = Timer , Mode = 1 , Gate = Internal
    Config Timer1 = Timer , Mode = 1 , Gate = Internal

    Enable Interrupts
    Enable Timer0
    Enable Timer1

    Start Timer1
    Start Timer0

    On Timer0 A
    On Timer1 C

    Do
    Loop

    A:
    nop
    Return
    C:
    nop
    Return

    Z symulacji wynika, ze przerywania moga sobie wystepowac rownoczesnie i oba zostana opsluzone- i to wielokrotnie moga wystepowac podczas obslugi innego przerywania.Poprostu brak komendy disable interrupts.I zostana osluzone w kolejnosci takiej w jakiej wystapily (chyba zgloszenia sa odkladane na stosie o ile dobrze pamietam)
    To byl taki maly przyklad aby rozwiazac spor na temat wielokrotnego przerywania (mam nadzieje, ze tu mam racje) i prosze o powrot do glownego problemu

    Pozdrawiam
  • #11
    Tdv
    Level 34  
    No nie bardzo. Nie ma żadnego licznika przerwań nieobsłużobych. Trzeba tylko panować nad tym co się robi i nie pisać proedur obsługi przerwan na 6 hektarów - procedura powinna być jak najktósza i wtedy nie ma problemu.
  • #12
    kamyczek
    Level 38  
    W celach edukacyjnych to korzysta sie z jednego przerwania co do 2 to jak zle cos pracuje to przewaznie wynika ze ktos pozostawia jakis timer samemu sobie a on potrafi narobic bigosu co do obsługi przerwań bywaja dwie szkoły jedni piszą spore procedury w przerwaniu inni w głównej pętli programu moje zdanie jest takie piszczie jak chcecie byle program działał bez zarzutu poza tym nie bijmy już piany bo szkoda czasu dwa tajmery wykorzystuję wtedy gdy potrzebuję liczyć znacząco różne zjawiska których nie da sie policzyć tym samym timerem lub korzystam z przerwania zewnetrznego i wewnętrznego . Do wypowiedzi Michała masz część racji ale nie do końca przerwania to temat który jest rozległy i potrafi sporo namieszać w żle napisanym programiewolę rozwiązywać problemy kąkretnych programów i zagadnień niż bić pianę w próżni powodzenia Kamil
  • #13
    szymtro
    Level 30  
    Jeszcze raz. Ja mam wersje 2.0.8 i u mnie oba liczniki licza tak samo w symulacji. Jak ktos ma wersje 2.0.10 to niech sobie wrzuci pierwszy post i niech sprawdzi czy w symulacji oba liczniki zliczja w tym samym tempie - bedzie to widac najlepiej na rejestrach TH0 i TH1. Koledzy(kolezanki) z innymi wersjami Bascom8051 tez bardzo zapraszamy - bo moze sie okazac ze v10 sie myli a v11 dziala dobrze albo odwrotnie.