Skocz do zawartości

AVR-Generator przebiegu prostokątnego.


Pomocna odpowiedź

Napisano

Witam, krótka piłka z mojej strony: Czy mógłby ktoś przybliżyć jak w Bascom AVR generować przebieg prostokątny o jakiejś częstotliwości? np.500Hz. Jak ustawić zegar, jaką komendę w bascomie użyć. Niestety nie mam oscyloskopu więc muszę zrobić właśnie taki generator.

Pozdrawiam.

Najszybciej chyba poleceniem sound, z tego co się orientuję działa to w miarę dokładnie. W helpie jest wzorek jakie wpisać parametry dla jakiejś częstotliwości. Jeśli potrzebujesz dokładniejszej częstotliwości to już jest zabawa z doborem odpowiedniego rezonatora i dzielnika do niego, potem podział na timerze.

Np.: dajesz rezonator powiedzmy 4MHz, dzielisz go wewnętrznym dzielnikiem przez 8 co da ci 500kHz, potem dajesz timer z podziałem 1024, i na nim będziesz miał 488Hz. Gdybyś miał rezonator 4,096MHz to timer będzie się przepełniał z częstotliwością idealnie 500Hz.

  • Pomogłeś! 1

No właśnie w poradniku do bascoma jest napisane:

Uwaga! Instrukcja SOUND nie jest przeznaczona do generowania przebiegów o określonej częstotliwości. W tym celu najlepiej użyć jednego z sprzetowych liczników

Wszystko zależy od tego jakiej potrzebujesz dokładności, wiem po sobie jak szukałem kwarcu do obsługi serw przez sprzętowy PWM i wcale łatwo nie było, szczególnie, że gdzieś jest schowany podział przez 2, o którym zapomniałem wspomnieć wyżej.

Więc obliczenia z mojego poprzedniego postu są niepoprawne, nie wiem gdzie, ale dochodzi jeszcze gdzieś podział przez 2, dlatego przy użyciu takich dzielników jak wyżej timer przepełniałby się 250 razy na sekundę nie 500.

Zastanawiam się czy nie zrobić "na pałę" czyli użyć polecenia wait ms i dawać na przemian jeden i zero. Co wy na to?. Bardziej niż dokładność zależy mi na powtarzalności, ale to jedno z drugim się wiąże... częstotliwości jakie muszę generować to 400Hz do 2400hz.

I okazuje się że mikro kontroler nagle nie może zrobić tak prostej rzeczy... 🙂

Znaleziony w sieci przykład do generowania 36kHz.

$regfile = "attiny2313.dat"
$crystal = 4000000
Config Portd.5 = Output 'musi być ustawiony jako wyjście , by można go podłączyć do przerzutnika OC0B

Ocr0b = &H37 'wartość obliczyć tak:$crystal/(36000*2)
'Powyższa wartość nie musi być taka jak wychodzi z wyliczenia , ale nie może być większa.
Ocr0a = &H37 'tyle taktów zegara potrzeba , by timer0 "obracał się" 72000 razy na sekundę.
Tccr0a = &B00010010 'Włącz tryb CTC dla timer0 i podłącz Pinb.5 do przerzutnika OCR0B w trybie TOGGLE(zmień stan na przeciwny do bieżącego).
Tccr0b = 1 'preskaler=1i start zliczania timer0

Chyba będzie pomocne 😉

  • Pomogłeś! 1
Gość
Ten temat został zamknięty.
×
×
  • Utwórz nowe...