Котуинко

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3970849#p3970849"]Только вот чегой-то мне не особо верится, что шаг в 1 Герц возможен для всего диапазона...[/uquote]
исходник либы tone если посмотреть - используется режим таймера CTC - шаг в 1Гц имхо не получится.

Оказывается есть STM8 ардуины -sduino
https://github.com/roybaer/sduino_uno
стандартная ардуино IDE поддерживает - хитрО используется SDCC (он без C++)
Изображение
к стати ардуино IDE можно сделать темной (очень легко) и трудиться становиться веселей и приятней для глаз :)
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15562
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Относительно точности до герца в низкочастотной части все же соответствие, а вот где-то от 10 килогерц и более есть смысл помудрствовать...
Да и не СТС, а что-то вроде быстрого ШИМ с потерей 50% скважности на +/- 1-2 периода тактовой частоты...
:roll:

STM8 я видел, но как-то.... не в таком виде -
больше вот такие:
https://vk.com/market-79970674?section= ... 19%2Fquery
:dont_know:

Ну то кому как приятнее/привычнее - светлый или темный фон...
:wink:
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3971775#p3971775"]Да и не СТС, а что-то вроде быстрого ШИМ с потерей 50% скважности на +/- 1-2 периода тактовой частоты...[/uquote]
откуда дровишки? Вижу исходник - там явно CTC
https://github.com/arduino/ArduinoCore- ... o/Tone.cpp

Код: Выделить всё

if (_timer != -1)
  {
    // Set timer specific stuff
    // All timers in CTC mode
    // 8 bit timers will require changing prescalar values,
    // whereas 16 bit timers are set to either ck/1 or ck/64 prescalar
    switch (_timer)
    {
      #if defined(TCCR0A) && defined(TCCR0B) && defined(WGM01)
      case 0:
        // 8 bit timer
        TCCR0A = 0;
        TCCR0B = 0;
        bitWrite(TCCR0A, WGM01, 1);
        bitWrite(TCCR0B, CS00, 1);
        timer0_pin_port = portOutputRegister(digitalPinToPort(_pin));
        timer0_pin_mask = digitalPinToBitMask(_pin);
        break;
      #endif
...........
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15562
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Это адуринка как "задачник вопроса" проявилась...
8)
А вот далее....
У меня идейка вытрясти из AVRкина Т1 максимум возможного в смысле генерации последовательности частот с минимальным шагом между ними...
Просто из интереса - "а чего таки можно вытянуть"?
Понятно, что там таки будет в некоторых случаях более 1 Гц/на добавленную единицу счетного импульса, но вот количество тех градаций, да варианты управления счетчиком...
Не теоретически расчетом, а на реальной пищалке и осциллограммке полюбоваться....
Ежли "по примитиву" - один период результата равен двум переполнениям таймера (скважность сигнала 50%).
Т.е. минимальный интервал - 2 периода счетного сигнала (генератора МК)...
А ежли "быстрый ШИМ" - там только 1 период счетного интервала критичен - ессно и градаций при всем том же в два раза больше...

:roll:
Ну и возможные программные "умножайкины трюки" - совместное использование аппаратного и программного счетчиков для расширения диапазона "мягких лапок"...
8)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

DDS-ом генерируют синус до 20 кГц с шагом в 1Гц (а особо гениальные и с 0,1 Гц), так что меандр и подавно можно сделать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

у Л.И. есть генератор - диапазон генерируемых частот 1…50000 Гц, минимальный шаг установки частоты 0.01 Гц
DDS реализован программно на микроконтроллере ATmega8 фирмы "Atmel". Быстродействие этого контроллера является достаточным, чтобы при тактовой частоте 16 МГц реализовать 34-разрядный накопитель фазы, работающий на частоте 216 кГц. Такой накопитель фазы обеспечивает шаг перестройки частоты примерно 0.00001 Гц. Реально используется шаг сетки 0.01 Гц,
http://www.leoniv.diod.club/projects/me ... g-530.html
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Котуинко

Сообщение OKF »

DDS - это слишком жирно. Там ведь и другие задачи при звучащем тоне.
При CTC никакого 1 гц шага. Как обычно кто то бредит.)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15562
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

OKF писал(а):DDS - это слишком жирно. ...
Воть... оставим тот DDS "на остаточное" - а для начала чего таки можно из простого подручного материала выжать.
Насчет 1Гц/на шаг - это уже зависит от диапазона частот.
В "низкочастотной" части вполне себе возможно, а вот "повыше" пока интерес как можно меньший шаг обеспечить.
8)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

тут кроме основной задачи DDS в прерывании от таймера T1 кнопки опрашиваются, еще и индикатор есть
https://radiokot.ru/circuit/digital/measure/20/
насчет
вытрясти из AVRкина Т1 максимум возможного в смысле генерации последовательности частот с минимальным шагом между ними...
имхо как не крути - все равно через OCR, на высоких частотах шаг больше 1Гц получится.
Простенький расчет на любимом ардуинщиками Processing

Код: Выделить всё

 int ocr;
     for (int freq = 7900; freq < 8000 ; freq++) { 
        ocr = 8000000/freq - 1;
        freq = 8000000/(ocr+1);
        println("ocr= " + ocr);
        println("freq= " + freq);
    }  
..........
ocr= 1003
freq= 7968
ocr= 1002
freq= 7976
ocr= 1001
freq= 7984
ocr= 1000
freq= 7992
ocr= 999
freq= 8000
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Котуинко

Сообщение Sergi »

Проще посчитать корень из тактовой таймера. Все что выше - шаг больше 1 Гц,ниже - меньше 1 Гц.
Делал DDS на 2313 с тактовой 19,5 МГц. Опрос 500 кГц с шагом 1 Гц. Автоматический перестраиваемый фильтр НЧ. Выше 20 кГц не пробовал,не нужно было.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

значит чем выше тактовая таймера, тем лучше. Можно взять 8 ног STM32G031J6M6 - там 16-ти разрядный TIM1 можно 128МГц тактировать. Есть 32-ти разрядный TIM2 64МГц. В киосках в продаже есть такой - имхо вытрясти из такого максимум возможного поинтереснее будет. 8)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15562
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

При "простом делителе" важна не только тактовая частота, но и разрядность самого делителя.
Но в то же время не "переусердствовать" - собственно из-за простенькой задачи ставить DDS или осваивать новое семейство МК на уровне аппаратной начинки...
8)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

пределитель там 16-ти разрядный - любое значение в диапазоне 0...65535, а если цель "вытрясти" - можно мышкой натыкать без особого осваивания
Изображение
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15562
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Предделитель особо не котируется - это всего лишь "размер единицы отсчета".
Без дополнительного байтика в счетчике и в регистре цифрового сравнения собо и не важен...
:roll:
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

тю, а кто написал
При "простом делителе" важна не только тактовая частота, но и разрядность самого делителя.
а как же без пределителя низкие частоты делать. Вот примерчик формировать ноты
http://avr-start.ru/?p=3876
там таймер4 сидит на шине APB1, далее обычные расчеты (выше подобные уже были)
Допустим, нужно посчитать сколько нужно тиков, чтобы сформировать частоту, например нота До 1 октавы 261Гц. Для этого исходные 4 000 000 таймера делим на предделитель 50. Предделитель просто позволяет сделать величины нот в разумными, т.е. в пределах uint16_t.
4000 000/50= 80 000 это рабочая частота после всех делителей.

Теперь нужно найти число, которое нужно положить в ARR, чтобы из исходных 80 000 получить нужные нам 261Гц.
(80 000/(261*2))-1= 152

Почему тут умножаем на 2, потому что при достижении таймером регистра ARR, ножка инвертирует свое состояние, а нам нужно чтобы она успела включиться и выключиться.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15562
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Для низких - то как раз вопрос и не стоит.
Тот же Т1 АВРки с досчетом до 30651 при 8 Мгц на входе даст 261,0029 Гц...
Это более для частот за 5 КГц актуально.
:roll:
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

дык тратить драгоценный авркин T1 на тон, уж лучше T0, T2 делителем (имхо), чего изначально в ардуино по умняку и сделано

Код: Выделить всё

#define USE_TIMER2
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15562
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Там вполне себе и программный DDS на базе T2 может уместиться...
:roll:
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

ну у них не было задачи "вытрясти максимум возможного", а так да, там DDSа того - 6 строк ассемблера

Код: Выделить всё

; Output frequency (using 24 bit accumulator) :
;
;	f = deltaPhase * fClock/2^24
;
;   fClock is in this case the CPU clock divided by the
;	number of cycles to output the data ( 9 cycles )
;
;	f = r24/r25/r26 * (11059200/9)/16777216
;
;	f = r24/r25/r26 * 0.073242188
;
;	fMax (theoretical) = 0.5 * fClock
......
; main loop
;
;	r28,r29,ZL is the phase accumulator
;  	r24,r25,r26 is the adder value determining frequency
;
; 	add value to accumulator
;	load byte from current table in ROM
;	output byte to port
;	repeat 
LOOP1:
		add		r28,r24			; 1
		adc		r29,r25			; 1
		adc		ZL,r26			; 1
; note: LPM will read (ZH, ZL). r30 is constantly changing (MSB, but LSB of ZH)
		lpm						; 3
		out		PORTB,r0		; 1
		rjmp	LOOP1			; 2 => 9 cycles
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Котуинко

Сообщение oleg110592 »

глянул - появились у нас в базарном киоске soic8 ATtiny212 ATtiny202, чуть дороже ATtiny13 - а там навалили таймеров для генерации тона
– One 16-bit Timer/Counter Type A with Dedicated Period Register, Three Compare Channels
(TCA)
– One 16-bit Timer/Counter type B with Input Capture (TCB)
– One 12-bit Timer/Counter type D Optimized for Control Applications (TCD)
– One 16-bit Real Time Counter (RTC) Running from External Crystal or Internal RC Oscillator
еще и ЦАПчик есть синусы генерить
– 8-bit Digital to Analog Converter (DAC)
еще и это может к делу приобщить
– Configurable Custom Logic (CCL) with Two Programmable Lookup Tables (LUT)

Ардуинщики на высоте, поддерживают, есть ядро, программатор на обычной ардуине делается
https://github.com/SpenceKonde/megaTinyCore
Ответить

Вернуться в «Разные вопросы по МК»