Почему Ардуино получает 10 бит, а передаёт 8 бит?
- Войдите на сайт для отправки комментариев
Объясните пожалуйста логику разработчиков, почему Ардуино принимает сигналы в 10 битном формате, а передаёт только 8 бит? Ведь это не аппаратные ограничения (типа вольтметр у них способен 1024 градации напряжения измерить, а генератор настолько не точен что только 256 значений дать может). В чём логика? Это же так не логично...
Из-за этого столько приходится кода писать...
(сейчас кто-нибудь обязательно скажет - "Совсем и не много кода")
Во всяких примерах видишь: ПосылаемЗначение = Округлить( ПолученныйСигнал / 4.1), чтобы при округлении 1023/4 в большую сторону не получить 256.
Ну это примерно как получать время в сишном формате секунд, а передавать в паскалевском формате где день это 1, а чтобы получить минуты и секунды надо 1/24/60/60, в резултате получаешь собсвенноручно переданный сигнал и он не совпадает с тем что ты отослал (может совпасть только если его пытаться опять преобразовывать, и то не факт что при этом своё значение получишь).
Привыкнуть можно ко всему, и писать 1/х+10.0+2.0, и "жалюзИ" говорить, и название валюты писать перед суммой, но у всего должно быть логическое обоснование. А тут ни как не понимаю...
Честно искал в сети ответ на этот вопрос, но так и не нашёл.
Может местные гуру проработавшие с Ардуино более 10 лет, где-то когда-то слышали причину этого?
Зарегистрирован:24.12.2014
блин - полтора года оставаться дыбилом.
кто куда передаёт/получает? - данные передаются по интерфейсам.
то, что ты называешь "отправкой/передачей" на самом деле оным не является и обусловлено аппаратно
analogRead()
Функция считывает значение с указанного аналогового входа. Большинство плат Arduino имеют 6 каналов (8 каналов у платы Mini и Nano, 16 у Mega) c 10-битным аналого-цифровым преобразователем (АЦП). Напряжение поданное на аналоговый вход, обычно от 0 до 5 вольт будет преобразовано в значение от 0 до 1023, это 1024 шага с разрешением 0.0049 Вольт.
analogWrite()
период рабочего цикла значение между 0 (полностью выключено) and 255 (сигнал подан постоянно).
*нелогично? - разработай, построй по всему миру заводы и начинай выпускать логичные МК.
Объясните пожалуйста логику разработчиков, почему Ардуино принимает сигналы в 10 битном формате, а передаёт только 8 бит? Ведь это не аппаратные ограничения (типа вольтметр у них способен 1024 градации напряжения измерить, а генератор настолько не точен что только 256 значений дать может). В чём логика? Это же так не логично...
Из-за этого столько приходится кода писать...
(сейчас кто-нибудь обязательно скажет - "Совсем и не много кода")
Во всяких примерах видишь: ПосылаемЗначение = Округлить( ПолученныйСигнал / 4.1), чтобы при округлении 1023/4 в большую сторону не получить 256.
Логики там нет, был 10-битный АЦП его и поставили, 16-битный был бы слишком дорог на 8-битном МК.
А кода не много, Вы наверное, пишите неправильно. Если делить целые переменные int8_t int16_t то 1023/4 всегда 255. Для других типов есть способы задать округление вниз, и не морочить голову с 4.1 делителем.
http://www.cplusplus.com/reference/cmath/floor/
Для Клапауций 232: Твоего уровня интелекта не хватает ни на что кроме как только привести выжержку из мануала, который повторяет то что я тебе сказал...
Для MagicianT: Ну а почему посылает только 8 бит?
А про код, я просто посмотрел пару уроков
https://www.youtube.com/watch?v=N0jbLZbynjA&feature=youtu.be&t=4m10s
Саму ардуину я даже в глаза не видел.
Для MagicianT: Ну а почему посылает только 8 бит?
Есть у меня теория. ТС - это ранний твинк одного из Ардуино-хейтеров.
Вот сейчас он "непонимает", почему ШИМ восьмибитный, а потом ему откроются глаза, что существуют микроконтроллеры с более продвинутым ШИМом. Ну или "костыли" окажутся во всем виноваты...
предпочитаю вместо /4
написать >>2
InterSky, если вы имеете ввиду почему у ардуиновской функции analogWrite разрядность 8 бит (0..255) -потому, что больше обычно и не нужно. Кому нужно больше, тот сам сделает. На 16 битном таймере можно сделать любую разрядность вплоть до 16 бит (0..65535). PS: Не советую использовать программы, подобные той, что на вашем видео. Вместо того, что-б учить язык СИ и изучать аппаратную сторону М.К. забивают голову людям какой-то ненужной хренью. Лучше уж смотрите уроки от Джереми Блюма, к нему тоже есть претензии, но в целом для обучения годится.
Из-за этого столько приходится кода писать...
Сколько?
Во всяких примерах видишь: ПосылаемЗначение = Округлить( ПолученныйСигнал / 4.1), чтобы при округлении 1023/4 в большую сторону не получить 256.
Покажите, пожалуйста, такие примеры. Очень хочется увидеть. Пока же мне кажется, что Вы приболели и бредите :))))
Вы это ... выздоравливайте, негоже болеть-то!
Есть у меня теория. ТС - это ранний твинк одного из Ардуино-хейтеров.
Не исключено. Может "многоэсный" уже старые ники скупает. Посмотрим что дальше ...
А ща проверим!!
Скажите, уважаемый InterSky, а STM - это круто?
Я как раз читаю и очень внимательно. А вот видео не смотрю. Не понимаю что можно показать на видео о программе. Мне нужно не видео, а примеры программ в которых "ПосылаемЗначение = Округлить( ПолученныйСигнал / 4.1), чтобы при округлении 1023/4 в большую сторону не получить 256."
Жень, Вы напрасно не посмотрели видео - все стало бы на свои места: там 7-летний ребенок рассказывает для своих сверстников, как бороться с Ардуино при помощи Скретча. Рассказывает, естественно, в меру своего понимания.
Это не "сивая кобыла", это всего лишь маленький ребенок. Ну, возможно, в немного перевранном пересказе.
andriano, ну на видео может и маленький ребёнок, не видел, а здесб в первом посте темы ... вполне себе взрослый участник форума.
Ну как бы для него это обучающее видео. Воспринимает, как истину в последней инстанции (хотя и не до конца понимает).
Тогда понятно почему видео боялись открыть...
Тогда понятно почему видео боялись открыть...
та, да - испугался, что ты покусишься на его бесценную математическую безграмотность.
Во, блин, ещё один прогер завёлся.