Нужно получить сигнал с частотой следования прямоугольного импульса 10 кГц с длительностью сигнала равной 36 мкс. И на каких пинах это возможно сделать?
на таймере желательно
На любых, кроме A6 и A7. D0 и D1 тоже лучше не трогать.
В Вашу “длительность сигнала” (100 микросекунд) даже один период не поместится.
Или 36 мкс - это не длительность подачи сигнала, а длительность высокого уровня? Тогда неясно в чём именно Ваша проблема. Показывайте, что Вы сделали и объясняйте, что не получается.
Получил от руководителя следующее задание:
Разработать программу для микроконтроллера ATmega328 отладочной платы Arduino Nano, которая реализовывала бы функцию автоколебательного мультивибратора с одним выходом. Частота следования прямоугольных импульсов f-10 кГц, длительность токового импульса сигнала 36мксек. Через каждые 20 мксекунд производить опрос кнопки с помощью таймера, и если кнопка нажата, то импульсы выключить, а если кнопка не нажатой окажется, то генератор включить снова.
Для начала я пытаюсь понять как сделать этот самый импульс и посмотреть те самые импульсы благодаря светодиоду (если это возможно). Начал читать про автоколебательные мультивибраторы, вроде можно было бы использовать команду digitalwrite(LedPin, hight) и т.п., но меня напрягает частота следования импульса и его длительность, так же не хотел использовать команду delay т.к. нам объясняли что из за нее простаивает мк. Про кнопку еще не думал, т.к. надо для начала решить вопрос с импульсом Ощущение что работа не трудная и я ее усложняю
Не видел, как Вы это пытались сделать. Предъявитесь…
Пытался по своему, но для здешнего комьюнити я туповат, если мягко выразится.
Благодари DIMAX, всё давно придумано до нас, остальное сам напишешь…
//https://arduino.ru/forum/programmirovanie/upravlenie-chastotoi-i-skvazhnostyu-shim-signala#comment-211459
// Терминальная версия генератора от DIMAX
uint16_t x = 10000;
float y = 36.0;
void setup() {
Serial.begin(115200);
pinMode(9,OUTPUT);
TCCR1A=(1<<COM1A1)|(1<<WGM11);
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);
OCR1A = ((float) y / 0.0625 ) -1;
ICR1 = (F_CPU/x)-1;
}
void loop() {
}
каждые 20 микросекунд опрос кнопки по таймеру?
на атмеге328 сильно сомнительно
наверно преподаватель сказал миллисекунд
Преподаватель написал “мс”. А что еще может быть “мс” кроме микросекунд?
Отчего же?
Прерывания можно генерить с частотой, минимум в 110 кГц, а 20 мкс - это всего 50 кГц. Так что вполне реально. Другое дело - кому может понадобиться опрашивать кнопку с такой частотой…
сдаётся мне, что преподаватель озвучивал сделать всё это на одном и том же таймере…
PS студенту пора учиться мотать портянки…ИМХО
Мне в любом случае надо их учиться мотать… Не зависимо от моих познаний XD
Зачем опрашивать кнопку с дикой частотой по таймеру, когда можно просто повесить прерывание на пин?
работу усложняет незнание, советую минут тридцать почитать этот сайт , но раздел прогрммирование, к стати а что за работа у вас такая я б к вам пошел
может ты великий специалист по Kubernetes, тогда сия участь может и миновать
Получили - исполняйте. Мы то здесь каким боком?
Нууу… Если у тебя такой настрой, мог бы и мимо пройти, чай пойти попить. Естественно мне ни кто готовый код не скинет, это понятно. Но мне подсказали и я сейчас читаю про таймеры, прерывания, как настроить таймер и т.п. Я только начинаю изучать это… На мой взгляд, в твоем ответе была нотка неприязни ко мне
Мог бы. Но, не прошёл.
И не только к Вам, а ко всем Вам подобным.