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

Attiny2313 prosty generator 36kHz bez żadnych dodatków

zuba1 03 Gru 2011 15:35 4046 16
  • #1 10213278
    zuba1
    Poziom 13  
    Witam.
    Robię czujnik odbiciowy na attiny2313 i tosp1736 z częstotliwością 36kHz bez żadnych dodatków, czyli sama falę nośną. Siedzę już 2 dni i nie mogę nic wymyślić.. :cry: Czujnik ma być wykorzystany w robocie omijającym przeszkody. Znalazłem już generatory na ne555, ale mi trzeba coś bardziej stabilnego. Więc proszę was bardzo o pomoc. Jestem zdesperowany. :cry:
  • #2 10213343
    mirekk36
    Poziom 42  
    No więc skoro masz ATtiny2313 to po cóż jeszcze jakieś wynalazki typu NE555 ???? ;) Toż masz sprzętowe timery w procku na których bez mrugnięcia oka można taką nośną wygenerować i to jeszcze nawet nie będzie ani na 0,00000000001% obciążało programu, bo będzie działać sprzętowo ;)
  • #3 10213640
    zuba1
    Poziom 13  
    A mógłbym prosić o gotowy kod, albo wyjaśnienie w bascom bo nie mogę tego pojąć trzeba mi zrobić samą falę nośną na dowolnym porcie D.
  • #4 10214656
    SylwekK
    Poziom 32  
    Tak na szybko - 8000000/8/28= w przybliżeniu 35714 kHz (czujnik, który podałeś spokojnie to obsłuży). Ustaw zegar na 8000000, Prescaler 8, a Counter odświeżaj wartością 242. Dlaczego 242 ?, bo 256-242=14. Dlaczego wynikiem ma być 14, a nie 28 ? Jeśli w przerwaniu użyjesz Toggle PortX.Y to z urzędu częstotliwość na pinie będziesz miał dwa razy niższą, bo co każde przerwanie wykonuje się tylko jedna zmiana stanu, a więc trzeba przerwanie wywoływać dwa razy gęściej.
  • #5 10214684
    mirekk36
    Poziom 42  
    SylwekK napisał:
    Tak na szybko - 8000000/8/28= w przybliżeniu 35714 kHz (czujnik, który podałeś spokojnie to obsłuży). Ustaw zegar na 8000000, Prescaler 8, a Counter odświeżaj wartością 242. Dlaczego 242 ?, bo 256-242=14. Dlaczego wynikiem ma być 14, a nie 28 ? Jeśli w przerwaniu użyjesz Toggle PortX.Y to z urzędu częstotliwość na pinie będziesz miał dwa razy niższą, bo co każde przerwanie wykonuje się tylko jedna zmiana stanu, a więc trzeba przerwanie wywoływać dwa razy gęściej.


    A po co tak się męczyć i programowo cokolwiek tu w ogóle robić? jakieś przerwanie zciągać do roboty?

    Czy nie lepiej użyć trybu CTC i toglowania na pinie OCx w całkowicie sprzętowy sposób. Ale oczywiście te obliczenia mniej więcej się zgadzają. dla 8MHz wystarczy preskaler = 8 oraz raz ustawić wartość OCRx na 14. Oczywiście jeszcze bity ustawić toglowanie na wyjściu za pomocą odpowiednich bitów COMxx.

    I poza inicjalizacją timera nie trzeba ani linijki kodu programu tracić na generowanie samej nośnej ;)
  • #6 10214837
    SylwekK
    Poziom 32  
    Muszę o tym CTC trochę poczytać :) Do tej pory nie było mi to potrzebne, ale widzę w tym dla mnie potencjał na przyszłość :D
  • #7 10214846
    mirekk36
    Poziom 42  
    SylwekK napisał:
    Muszę o tym CTC trochę poczytać :) Do tej pory nie było mi to potrzebne, ale widzę w tym dla mnie potencjał na przyszłość :D


    Oj masz 100% racji ;) ..... jak raz skorzystasz z CTC to nie dość, że już nigdy nie przyjdzie ci do głowy używanie trybu licznika i przeładowywania TCNT w przerwaniu tylko wybór CTC to jeszcze będzie jedna zaleta ;)

    Nie kupisz już więcej ATmega8 tylko ATmega88 albo podobny ATmega168. Ponieważ m8 jest pozbawiona w ogóle trybu CTC dla Timera0 , za to nowsze procki już mają i CTC, PWM itp .... nie wspominając o innych udogodnieniach.
  • #8 10214862
    Brutus_gsm
    Poziom 25  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak wygląda generowanie 36kHz na attiny2313 przy rezonatorze 8MHz. Nie jest to bascom (tylko C), ale widać, które bity są ustawiane i w jakich rejestrach ;) Nic więcej. Po tych trzech linijkach na pinie OC1A mamy sygnał prostokątny o f=36kHz.

    Dodam jeszcze, że funkcja ta to większa część kodu nadajnika RC5. Wewnętrzny generator w zupełności wystarcza. Nie potrzeba większej stabilności.
  • #10 10215010
    Brutus_gsm
    Poziom 25  
    Oczywiście. Ustawiany jest bit CS00, czyli brak preskalera. Po prostu jakiś chochlik mi się wkradł w komentarz ;) Nie zaglądałem w ten kod od kilku lat. Przepraszam więc za wprowadzenie niejako w błąd ;)
  • #11 10215930
    zuba1
    Poziom 13  
    Nie do końca zrozumiałem wasze obliczenia (programuję dopiero 2 miesiące i nie za bardzo wiem jak ustawić ten timer). Chcę napisać program w bascom a nie w c .Nie wiem jak generować timer tak aby działał na dowolnym porcie D na dowolny port.
  • #12 10216472
    Brutus_gsm
    Poziom 25  
    Kolego, nie wiem jak to się robi w bascomie, ale jeśli masz rezonator 8MHz, tow rejestrze TCCR0A musisz ustawić bity COM0A0 i WGM01. W rejestrze TCCR0B bit CS00 a do rejestru OCR0A wpisać wartość 110. To wszystko. Prościej się nie da...
    Po tym zabiegu na pinie OC1A (PB3) masz sygnał prostokątny o częstotliwości 36kHz. Pin ten musi być ustawiony jako wyjście.

    Edit:
    Specjalnie przejrzałem parę tematów dot. Bascoma, żeby zobaczyć jak to się robi. Można na wiele sposobów:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Albo za pomocą Config Timer0 itd. W to się nie zagłębiałem.

    zuba1 napisał:
    generować timer tak aby działał na dowolnym porcie D na dowolny port

    Nie rozumiem tego zdania...
  • #13 10218191
    zuba1
    Poziom 13  
    W attiny2313 masz wyjścia b i d a ja potrzebuję generować to na port d bo akuratnie będzie mi łatwiej wszystko podpiąć.
  • #14 10219798
    Brutus_gsm
    Poziom 25  
    No to musisz kombinować inaczej. Ja bym wolał jednak użyć sprzętowego rozwiązania i nie martwić się niczym.
  • #15 10219961
    Konto nie istnieje
    Poziom 1  
  • #16 10221097
    zuba1
    Poziom 13  
    Znalazłem coś takiego jak go przerobić aby dobrze działało:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #17 10221121
    Brutus_gsm
    Poziom 25  
    Kolego. Najgorszy błąd, to przerabianie jakiś znalezionych w internecie programów. Gdzie ktoś tworzył coś w całkiem innym celu niż ty. Przeczytaj notę katalogową układu Attiny2313 o timerach i trybie CTC. To tylko kilka stron. Wszystko stanie się od razu jasne.
REKLAMA