Сигналы с микросекундной задержкой
- Войдите на сайт для отправки комментариев
Ср, 17/02/2021 - 11:50
Доброго времени суток!
Какую плату лучше выбрать для проекта, где нужно подать несколько сигналов с задержкой 1-4 мкс?
Про 16 МГц читал, что у них разрешение 4 мкс и на менее 3 мкс работа не гарантированна.
4мкс - это шаг для функции micros(). Сама железяка работает быстрее, и такие задержки получить можно, если не завязываться на функционал Wiring.
Т.е через MATLAB Stateflow или MATLAB and Simulink вполне реально задать?
Или лучше что-то другое?
Какую плату лучше выбрать для проекта, где нужно подать несколько сигналов с задержкой 1-4 мкс?
Если планируете программировать сами, то начните и проверьте подходит ли вам плата с которой у вас больше всего опыта работы.
Т.е через MATLAB Stateflow или MATLAB and Simulink вполне реально задать?
Я не знаю, что означают все эти слова. В простой программе на С/С++ или на ассемблере - как два пальца. А с этими словами ... наверняка по ним есть специальные форумы, спросите там.
Т.е через MATLAB Stateflow или MATLAB and Simulink вполне реально задать?
Или лучше что-то другое?
лучше научиться программировать без автоматического генератора кода. Про него нет никаких данных - умеет ли он задавать микросекундные задержки на Ардуино. Проверить это - доверяем тебе!
Какой-нить ds18b20 - ну чем не мкс задержки! 1 мкс - это 16 команд Ардуино как - никак.
Какой-нить ds18b20 - ну чем не мкс задержки! 1 мкс - это 16 команд Ардуино как - никак.
Гы! Помню мне один раз пришлось набирать nop-ами аккуратно задержки с высокой точностью. Чтобы именно по одному nop-у градация - по 62.5 нс. Забыл уже - для какого проекта :((. Но на ослике красиво было!
4мкс - это шаг для функции micros(). Сама железяка работает быстрее, и такие задержки получить можно, если не завязываться на функционал Wiring.
4мкс длится переключение состояния вывода при прямой работе с портом.
Так что не только micros().
Это кто ж Вам такое сказал?
62.5 нс не хотите? При 16 мгц.)
62.5 нс не хотите? При 16 мгц.)
да какая разница какая частота, обычно - один такт процессора
Правильно ли понял, что можно, на той же меге, использовать delayMicroseconds() и не извращаться?
Marcion19 скорее всего нет, так как delayMicroseconds() имеет минимальный порог
См _delay_us()
Правильно ли понял, что можно, на той же меге, использовать delayMicroseconds() и не извращаться?
А кто не дает использовать
Вы будете смеяться. Человеку нужно было 500 кгц на выходе.
#include "main.h" #include "timer.h" #include "int.h" #include "comp.h" #include "adc.h" #include "config.h" set_config(); volatile bool start; void main() { comp_off(); adc_init(VOLUME); off(FREQ); out(FREQ); off(PULSE); out(PULSE); timer_init(); int_enable(); pin_change_en(1<<RISE | 1<<FALL); while (true) { sleep(); if (start) break; } start = false; pin_change_dis(); timer_start(); on(PULSE); // frequency generation freq_init(); while (true) { freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); freq_toggle(); } } void interrupt service() { static uint8_t cnt; if (timer_int()) { //прерывание от таймера timer_int_clear(); #if DEBUG if (++cnt >= 1) { #else if (++cnt >= PULSE_TIME) { #endif off(PULSE); reset(); } } if (pin_change()) { //по изменению на пине pin_change_clr(); if (pin(RISE) || !pin(FALL)) start = true; } }При этом.
#define freq_init() do { off(FREQ); asm("movlw 1<<0"); } while (false) //FREQ #define freq_toggle() asm("xorwf 5")Жаль что нету что то типа IRP директивы.)
А что таймер в режиме CTC не катит?
Как пример, на таймере 2, на PORTB,3 (он же вывод 11 ардуино нано) :
А нету СТС. Это из другой оперы. Просто пример когда приходится тупо считать такты.
Там 1 мгц всего тактовая, а нужно дёргать пином на 500 кгц в течение 15 сек.
Как то я упустил что это PIC гребанный... Не досмотрел что его ассемблер.
Да, есть ещё пикоманы. Некоторые так AVR на дух не переносят.)