Программирование ардуино с использованием только переключателей для получения 0 или 1
Я не слишком разбираюсь в работе arduino, но я знаю, что он включает данные на компьютерном языке (0 и 1).
У меня есть массив из 8 переключателей плюс несколько дополнительных. Поскольку я не могу (по некоторым причинам) запрограммировать его через свой компьютер, я хотел бы знать, можно ли вручную использовать переключатели для отправки данных и их программирования? (сложность не имеет значения).
Если да, то не могли бы вы рассказать мне, как я мог бы это сделать (принимая во внимание мои ограниченные знания).
Если нет, то почему?
@Vamsi Krishna, 👍-1
Обсуждение2 ответа
Лучший ответ:
Краткий ответ: Если вы не можете запрограммировать свой Arduino с помощью компьютера, вы вообще не сможете запрограммировать свой Arduino.
Arudino создан для программирования с использованием последовательного интерфейса (обычно USB), который взаимодействует с загрузчиком, плюс IDE на другом конце кабеля. Он не настроен на программирование с помощью переключателей.
Вы могли бы создать программатор Arduino, который позволил бы вам вводить программу, используя 8 переключателей плюс кнопку ввода. Такой программист собрал бы программу в буфер памяти, а затем загрузил бы ее в Arduino с помощью интерфейса USB, но потребовались бы НЕДЕЛИ постоянной работы, чтобы ввести простейшую из программ, и вероятность того, что вы сможете сделать это без множественных ошибок, практически равна нулю. Кроме того, создание такого программиста, вероятно, обошлось бы в несколько сотен долларов. Это было бы бессмысленным упражнением в мазохизме.
(Не говоря уже о том факте, что вам пришлось бы каким-то образом скомпилировать вашу программу Arduino в машинный код и преобразовать его в двоичный код, чтобы ввести его.)
Некоторые из самых ранних компьютеров требовали, чтобы оператор вводил первые несколько команд с помощью переключателей, как вы описываете, а затем компьютер считывал и начинал выполнять остальную часть своей программы с ленточного накопителя. У этих компьютеров было всего несколько тысяч байт памяти, и даже тогда инструкций, которые должен был ввести оператор, было достаточно, чтобы запустить загрузку машины с ленты.
Первый Arduino имел «последовательный» порт, а более поздние — последовательный интерфейс USB. Так что, если быть точным, Arduino запрограммирован с последовательным интерфейсом., @Mats Karlsson
@MatsKarlsson, спасибо за исправление. Я отредактировал свой ответ соответственно., @Duncan C
Хотя это и не является физически невозможным, было бы действительно глупо пытаться это сделать.
Однако, если бы я попытался это сделать, я бы, вероятно, использовал всего 3 переключателя (или, скорее, 2 переключателя и одну кнопку, хотя вы могли бы использовать переключатель вместо кнопки).
Я бы подключил его так, чтобы все контакты RESET, MISO и SCK были подключены к переключателям таким образом, чтобы я мог удерживать всю плату в режиме RESET в течение длительных периодов времени (т. Е. Переключаться между RESET и GND), устанавливать МАКСИМУМ или МИНИМУМ по мере необходимости на выводе MISO и переключите вывод SCK на ВЫСОКИЙ или НИЗКИЙ уровень (я не уверен, что вам нужно использовать часы на НИЗКОМ или ВЫСОКОМ холостом ходу - вам подскажет таблица данных).
Затем я стал чрезвычайно близок к протоколу ICSP ATmega328P.
Затем это позволило бы мне, очень медленно, действовать как программист аппаратного обеспечения и дать указание ATmega328P запрограммировать себя с помощью данных, которые я отправил.
Возможно, вам также захочется присоединить сдвиговый регистр к выводам MOSI и SCK с 8 светодиодами на нем, чтобы вы могли отслеживать ответы от Arduino во время программирования.
Загрузка даже самых простых программ заняла бы целую вечность, а частота ошибок была бы очень высокой, но это можно было бы сделать, если бы вы действительно были в отчаянии и вам больше нечего было делать (включая еду или сон) в течение нескольких дней.
О... большое спасибо! По крайней мере, теперь я немного знаком с внутренней работой ардуино... Но, конечно, я не буду пытаться., @Vamsi Krishna
Ух ты. Это очень примитивно. Однако вам понадобятся переключатели с отключенным дребезгом. Интересно, сколько КБ данных вам нужно будет отправить через последовательный интерфейс, чтобы ввести тривиальную программу, такую как «мигание»? Не говоря уже о работе по ручной компиляции кода, а затем сопоставлении программы с потоком данных, необходимым для ее программирования., @Duncan C
@DuncanC Ага. Физически возможно. Эмоционально возможно? Неа. Вам нужно быть *очень-очень* отчаянно нуждающимся в чем-то, чем можно было бы занять ваше время, плюс кофе внутривенно и калоприемник..., @Majenko
@DuncanC: Вы можете написать «blink» на ассемблере менее чем за десять 16-битных инструкций. Сборка своими руками не займет много времени. Но тогда накладные расходы протокола ICSP могут быть намного больше, чем сама программа..., @Edgar Bonet
но если вы сконструируете считыватель перфокарт, чтобы переключать переключатели... :-), @Juraj
Эти проекты очень похожи на попытки программировать на языке Brainf*ck (погуглите, если не знакомы. Это реальная вещь)., @Duncan C
@DuncanC Я хорошо это помню... Однажды я *написал* в нем настоящую программу..., @Majenko
О, это возвращает меня на 45-50 лет назад, когда я делал это с процессором Z80, это было утомительно и весело... Я бы выбрал другой процессор, чем семейство Atmel AVR., @Mats Karlsson
@MatsKarlsson, что сделал? Запрограммировал Z80 со сдвиговыми регистрами и переключателями? Или вы имеете в виду написание машинного кода вручную и ввод его в шестнадцатеричном формате? Я сделал изрядное количество этого сам, но в основном на 6502. (Я сделал немного Z80, но на ассемблере), @Duncan C
Он писал ассемблер на бумаге, преобразовывал его в двоичный код, а затем с помощью двухпозиционных переключателей или тумблеров вводил код, а затем переходил к следующему адресу для следующей строки. После этого я сделал шестигранную клавиатуру и 7-сегментный светодиодный дисплей., @Mats Karlsson
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Добро пожаловать. Я не понимаю вашего вопроса. Что вы хотите запрограммировать? Для программирования Arduino вам нужен ПК. Вы можете использовать переключатели без Arduino, но я также не понимаю, что вы имеете в виду под «отправить данные» (куда?)., @Michel Keijzers
Хорошо, это вызывает вопрос, почему вы не можете использовать компьютер. Поскольку вы можете приобрести Arduino, я думаю, вы также можете купить другие электронные компоненты. Если ПК слишком дорог, вы можете использовать одноплатный компьютер, такой как Raspberry Pi. В зависимости от того, какую плату Pi вы покупаете, она стоит 10 или 35 долларов. 1 стандартное USB-зарядное устройство (более 1,5 А), SD-карта (которую можно купить с установленной ОС), дешевая комбинация USB-клавиатура/мышь и любой дисплей с поддержкой HDMI. И, конечно же, USB-кабель для Arduino. Тогда вы можете идти. Это как полноценный ПК, только меньше и не такой быстрый., @chrisl
@chris Спасибо за предложение! Ну, в настоящее время у меня серьезные проблемы с моим компьютером, так что он не компилирует и не интерпретирует какой-либо код. Вот почему я искал альтернативу, @Vamsi Krishna