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

BASCOM Atmega16 rc5 i pwm na Timer0 przy 16MHz nie działa?

LARGO 22 Gru 2009 16:26 2800 12
  • #1 7422770
    LARGO
    Poziom 11  
    Witajcie.
    Mam następujący problem.
    Otóż przy obsłudze przerwania od rc5(Int0) oraz pracy Pwm na timerze0
    przy częstotliwości 1MHz wszystko działa, natomiast gdy zastosuję 16MHz mikrokontroler nie odczytuje komend od rc5?
    Dodam, że po wycięciu fragmentu z konfiguracją timera rc5 działa, natomiast co oczywiste przestaje działać pwm.

    Czyżby zła konfiguracja Timera?

    Config Timer0 = Pwm , Prescale = 1 , Compare Pwm = Clear Down
    Set Tccr0.pwm0
    Set Tccr0.com00
    Set Tccr0.com01
    Set Tccr0.cs00


    Będę wdzięczny za każda odpowiedź która pomoże mi w rozwiązaniu problemu ;)
  • #2 7423132
    Freddy
    Poziom 43  
    A przestawiasz fuse bity przy zmianie z 1 na 16MHz ?
  • #3 7423183
    LARGO
    Poziom 11  
    Tak fusebity jak sadzę ustawione poprawnie bo pozostałe PWMy oraz cała reszta działają poprawnie.

    Konflikt występuje jedynie przy Int0 i Ocr0 działających na tym samym timerze przy tych 16MHz ;/
  • #4 7423489
    janbernat
    Poziom 38  
    Nie ma czegoś takiego w ATMega16:
    Set Tccr0.pwm0.
    a kompilator nie daje ostrzeżenia.
    Albo wierzysz że Bascom zrobi wszystko- a wiara czyni cuda.
    Albo- tak jak słusznie uczyniłeś od 2 linijki- zrób to sam.
    Ja tam jestem niedowiarkiem.
  • #5 7423548
    kamyczek
    Poziom 38  
    W każdym programie jest help a w nim nie dość że opisano tam wszystkie komendy to jeszcze umieszczono wiele przykładów. Może przed pisaniem bzdur warto zerknąć co napisał autor programu w help-ie ?
  • #6 7423662
    janbernat
    Poziom 38  
    Kamyczek:
    "co napisał autor programu w help-ie ?"
    Strasznie (niechcący) wpuszczasz nas w "maliny".
    Autor tego programu nie pisał help-a.
    Autor tego programu nic nie napisał w help-ie.
    Napisz zamiast:
    "Może przed pisaniem bzdur warto zerknąc co napisał autor programu w help-ie ?
    Napisz:
    "Może w help-ie warto zerknąc?
    Przed pisaniem bzdur co napisał autor programu?
    Poza tym w Bascomie można zmiennić Timer0 na Timer2 (jeśli jest)
  • #7 7424088
    kamyczek
    Poziom 38  
    Przeczytaj kolego co napisałem , bo odnoszę wrażenie że nie zrozumiałeś tego co napisałem. Skierowałem autora tematu do help-a umieszczonego w programie , bo od tego powinien zaczynać się proces rozwiązywania wszelkich wątpliwości dotyczących samego oprogramowania. Większość problemów , opisywanych w postach można rozwiązać czytając help-y dołączone do programów, lub noty katalogowe samych mikrokontrolerów. Moim zdaniem 75% postów to lenistwo autorów a 25% to faktyczne problemy autorów wynikające z braku odpowiedniej dokumentacji. Help nie gryzie i jest kierowany do użytkowników oprogramowania i warto się z nim zapoznać przed rozpoczęciem pracy w każdym programie.
  • Pomocny post
    #8 7424743
    M. S.
    Poziom 34  
    No to kawa na ławę.
    Cytat:
    Instrukcja Getrc5 w czasie działania używa jest licznika TIMER0 i związanego z nim przerwania. Licznik ten jest służy do generacji wymaganych opóźnień podczas próbkowania sygnału. TIMER0 może być dalej używany przez program, lecz należy się liczyć z wynikłymi opóźnieniami, gdy wykonywana będzie funkcja GETRC5(). Jest tylko jeden warunek: przerwania licznika TIMER0 nie mogą być używane.
    Tyle help.
  • #9 7429417
    LARGO
    Poziom 11  
    Po uwagach kolegów aby zerknąć do helpa znalazłem również w opisie Funkcji GETRC5() fragment zacytowany przez M. S..
    Wiedziałem iż PWMy wykorzystują Timery, nie brałem pod uwagę że wykorzystuje także przerwania?! :|

    Zacytowany fragment wyjaśniał by skąd może brać się konflikt,
    Jednak jak w jak najprostszy sposób obejść problem?

    Pozostałe PWMy są zaprzęgnięte, Jedyna opcje jaką widzę to Programowy PWM.
    Jednakże procesor jest już dość zapracowany i wolał bym uniknąć dodatkowego obarczania go.


    Macie jakieś pomysły?
    Dzięki za wszelką Pomoc :D
  • #10 7429976
    kamyczek
    Poziom 38  
    Cały problem polega na tym że programy typu Bascom i C mają już napisane procedury których wadą jest zazwyczaj brak możliwości wyboru układów peryferyjnych, które wykorzystują . W przypadku Bascoma jest najgorsza sytuacja, Nie ma do niego kilku bibliotek RC5, tylko jedna. pozostaje więc napisanie wstawki z asemblera , lub kawałka kodu w bascomie rezygnując przy tym z gotowych funkcji. Podczas pisania kodu w asemblerze można dowolnie wybierać co i w jaki sposób realizujemy.
  • #11 7430069
    nouki
    Poziom 25  
    Witam.

    Mam temat w którym ten sam problem sie pojawia.
    Chciałem na mega88 zrobić sobie 6xpwm +rc5 ale po symulacji zrezygnowałem ostatecznie z gotowego sprzętowego rozwiązania i zastosowałem mege8 i programowy pwm bo nie byłem w stanie sam napisać pod bascomem swojej funkcji rc5.
  • #12 7430120
    M. S.
    Poziom 34  
    Cytat:
    W przypadku Bascoma jest najgorsza sytuacja


    Nie do końca.

    Cytat:
    CONFIG RC5 = PINx.y [ , TIMER = 2 ]

    Parametr TIMER=2 jest opcjonalny. Powoduje on, że do generowania wymaganych opóźnień podczas odbierania danych będzie wykorzystany licznik TIMER2 (w procesorach w których występuje) zamiast domyślnego TIMER0.


    Koledze najwyraźniej sprzętu brakło, a na to nie poradzi nawet asembler.
  • #13 7430759
    kamyczek
    Poziom 38  
    Kolego M.S. wiem ze dla wielu programistów bascom jest rewelacyjnym środowiskiem programistycznym, jednak nie zdają oni sobie sprawy z tego że te banalne polecenia niosą za sobą dziesiątki czy setki linijek kodu w asemblerze i to bez względy czy z danej deklaracji wykorzystujecie jedno czy wszystkie polecenia. W asemblerze w programie jest to co jest potrzebne , w bascomie ,C jest tego cała biblioteka ,która kompilator dołącza bez względu na stopień jej wykorzystania ...
REKLAMA