нужно неприрывно посылать строку с частотой 250кгц, но при этом обрабатывать кнопки, это возможно на ардуинке?

Kirushka98
Offline
Зарегистрирован: 04.01.2018

Нужно как-то настряпать код, который будет непрерывно посылать строку в виде импульсов аля RS485, но при этом обрабатывая кнопки на этом же контроллере, которые будут менять строку. Проблема в том, что я боюсь, что длинна сигнала всего в 4мс по условию будет сильно варьироваться в связи с обработкой кнопок, если делать это простым attachinterrupt, я примерно представляю, как это все реализовать на шапре через поток и событие  в майне, но здесь, я так понимаю, нельзя сделать прямых потоков, да еще и с локом на переменной при считывании. Подскажите, как это можно реализовать средствами ардуинки, хотя бы идеи покдкиньте, потому что пока я вообще не представляю, как это разрабатывать

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Kirushka98, для начала научитесь корректно переводить  частоту в период.

Kirushka98
Offline
Зарегистрирован: 04.01.2018

Ну да, ввсмысле 4мкс, но это не так важно

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Kirushka98, всё важно. В частности важно ясно понимать что 4µS -это  64 такта МК. Что может успеть сделать МК за 64 такта? . Чуть больше чем ничего.  О каких строках и обработке кнопок вообще можно говорить?

Kirushka98
Offline
Зарегистрирован: 04.01.2018

В том и проблема, что не успеет он, если произойдет нажатие, обработать его и вернуться к передаче. Вопрос в том, можно ли это реализовать паралельно, не накладываясь

Kirushka98
Offline
Зарегистрирован: 04.01.2018

и есть ли где-то документация по тому, сколько тактов занимает та или иная комманда, например, если все правильно по делеям посчитать, а считывание сделать последовательным в перерыве между выводом числа

ssss
Offline
Зарегистрирован: 01.07.2016

Kirushka98 пишет:

Вопрос в том, можно ли это реализовать паралельно, не накладываясь

На слабеньком стм8 можно... на мега328 - нельзя...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Kirushka98 пишет:

Нужно как-то настряпать код

Как-то настряпать не получится, даже не пытайтесь. Сделать это можно, но работать надо серьёзно и аккуратно. А "как-то настряпать" - это Вы на шарпе стряпайте - на процессоре с восемью ядрами по 3ГГц каждое.

Kirushka98 пишет:

и есть ли где-то документация по тому, сколько тактов занимает та или иная комманда

Вы не поверите, но всё это написано в даташите!

nik182
Offline
Зарегистрирован: 04.05.2015

Даже если вы используете скорость 1000000 бит/сек передача одного символа строки займёт 10 мкс. Это уже 100 кГц передачи одного(!) символа. Строка с терминатором будет ещё медленее. Надо быть реалистом. Даже STM32 не сможет по последовательному протоколу обеспечить 250кГц передачу строк. Да и никто на приемлимое расстояние.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Портируй свой шапр и 8 ядер в свою адруину

Kirushka98
Offline
Зарегистрирован: 04.01.2018

однако как-то же производят подобные штуки, и даже мощнее. Правда там не ардуино, разумеется, но сам факт того, что псоылают, даже по 2 юниверса одновременно с каждого устройства

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что Вам вообще нужно делать, объясните толком. Не уверен в том, что нет другого решения кроме как строками из пулемёта пулять.

Kirushka98
Offline
Зарегистрирован: 04.01.2018

Я пытаюсь собрать небольшой тестер световых приборов, т.к. работаю часто с концертным светом. Весь свет управляется по протоколу dmx 512, в котором по стандарту необходимо посылать строку, описывающую состояние 512 каналов 8 битами кода+служебный код. Так же в стандарте указано, что длина каждого бита равна 4 мкс. Сами же биты передаются по средствам разности потенциалов на 2 пинах дмх шнура (+-5в) чередуются, передавая 1 и 0

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, что-то подобное я и предполагал, когда писал пост #7  - у Вас передача одного бита занимает 4 мкс! А так как Вы это описали раньше, все поняли, что строки (целые строки) выдаются с частотой 205kНz! И именно потому, Вам совершенно справедливо написали в посте №8, что для такой скорости этот контроллер слишком медленный.

Тогда, конечно же сделать можно. Но именно сделать, а не "как-то настряпать"  (см. мой пост №7).

 

nik182
Offline
Зарегистрирован: 04.05.2015

Ну так 4 мкс × 10 бит + 4 мкс× 10 бит = 12.5 кГц ну ни как не 250....

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я так понял, что каждый бит - 4мкс, т.е. часы работают на 250 и ТС имел в виду именно это.