1k Пространства Программы, 64 байта RAM. Действительно ли 1 проводная связь возможна?

(Если Ваши ленивые видят нижнюю часть для TL; DR)

Привет, я планирую создать новое (прототип) контакт проекта с физическими вычислениями. В основном у меня есть провода. Эти провода вся потребность считать их напряжение одновременно. Различие больше чем нескольких сотен микросекунд между чтениями каждого провода полностью завинтит его. Ардуино занимает приблизительно 114 микросекунд. Таким образом, большинство, которое я мог считать, является 2 или 3 проводами, прежде чем задержка скосила бы точность чтений.

Таким образом, мой план состоит в том, чтобы иметь Ардуино как "ведущее устройство" массива ATTinys. arduino довольно не хватает места, но это - крупная детская площадка по сравнению с tinys. ATTiny13A имеет 1k флэш-ROM (пространство программы), 64 байта RAM и 64 байта (не - длительный и медленный) EEPROM. (Я выбираю это за цену, а также размер),

ATTinys в моей системе не сделает многого. В основном все, что они сделают, является ожиданием сигнала от Ведущего устройства, и затем считайте напряжение 1 или 2 проводов и сохраните его в RAM (или возможно EEPROM, если это - ограниченный). И затем отправьте его Ведущему устройству, использующему только 1 провод для данных. (никакая комната для больше, чем это!).

До сих пор затем все, что мне придется сделать, реализовать тривиальный код чтения напряжения (использующий созданный в ADC). Но эта коммуникация укусила, я волнуюсь по поводу. Сделайте Вы думаете протокол связи (использующий всего 1 провод!) мог даже быть реализован в таких ограничениях?

TL; DR: В меньше, чем 1k пространства программы и 64 байтах RAM (и 64 байтах EEPROM) Вы думаете, что возможно реализовать 1 протокол проводной связи? Я должен был бы опуститься до блока, чтобы заставить его соответствовать?

Я знаю, что в настоящее время мои программы Ардуино, связывающиеся с библиотекой Wiring, по 8k, таким образом, я немного заинтересован.

5
задан Earlz 18 April 2010 в 09:41
поделиться

7 ответов

1 Кбайт программного пространства должно быть достаточно, учитывая, что ваш протокол должен быть достаточно сложным, чтобы отправлять одно целое число при щелчке. Посмотрите Манчестерское кодирование .

2
ответ дан 18 December 2019 в 09:05
поделиться

Возможно, вам удастся обойтись без компилятора C, ориентированного на эту архитектуру, но вам придется создать свою собственную среду выполнения, а не полагаться на ту, которая поставляется вместе с компилятором. Это выполнимо, но я не уверен, перевешивает ли дополнительная работа по созданию вашей собственной мини-ОС преимущество в производительности от использования C перед ассемблером.

2
ответ дан 18 December 2019 в 09:05
поделиться

Да, возможно, но если вы очень хорошо знаете свой компилятор, возможно, вам удастся обойтись без c.

Что вы могли бы сделать, так это использовать компилятор для создания любых автономных функций, которые вам нужны, на основе кода c, а затем склеить их вместе с небольшим количеством собственных. (Вам, безусловно, придется самостоятельно выполнить настройку среды выполнения c - стеки и т. Д.)

1
ответ дан 18 December 2019 в 09:05
поделиться

Поскольку вам нужно только отправлять данные (что проще, чем получение), и вы можете выбрать свой собственный протокол, не должно быть проблем с размещением кода в доступном пространстве памяти.

Однажды я создал программное обеспечение для промышленной панели управления, которая содержала 8x14-сегментный ЖК-дисплей, несколько светодиодов, несколько кнопок, последовательный (I2C) EEPROM и последовательный интерфейс для хоста. Использовался 4-битный процессор. Устройство не имело последовательного интерфейса, поэтому и интерфейс RS232C, и шину I2C пришлось реализовать программно. Вдобавок к этому был протокол Modbus (который, среди прочего, требует точного расчета CRC) и прикладная программа.

Устройство имело примерно 128 x 4 бита ОЗУ и 1 кВт, 2 кВт, 3 кВт или 4 кВт ПЗУ (10 бит на слово). Размер финальной программы составлял около 1100 слов, поэтому она не совсем уместилась на самом маленьком устройстве. Конечно, я использовал Ассемблер.

Однако вместо использования нескольких микроконтроллеров вы можете рассмотреть возможность использования аппаратного решения .

Вы можете использовать схему выборки и хранения . Для этого вам понадобится набор аналоговых переключателей и конденсаторов и, возможно, операционные усилители. Просто нажмите триггер, чтобы зафиксировать все напряжения на конденсаторах. Затем вы можете использовать столько времени, сколько вам нужно, чтобы считывать напряжения с помощью вашего мастер-процессора.

Обновление: Забыл упомянуть, что есть готовые усилители выборки и хранения , для которых требуется очень мало или совсем не требуется внешних компонентов. Это, наверное, самое простое решение.

9
ответ дан 18 December 2019 в 09:05
поделиться

Я занимался встроенным программированием с аналогичными ограничениями. Я использовал Borland Turbo C (это было очень давно) в крошечной модели и получил код, который был едва ли более громоздким, чем я мог бы сделать на ассемблере, с небольшими усилиями. Я хочу сказать следующее: использовать C в качестве ассемблера высокого уровня вполне реально и разумно.

Однако, как и я, вы столкнетесь с проблемой предоставления C (крошечной) среды выполнения. В идеале вам нужно будет настроить только стек и несколько регистров. Кроме того, у вас не будет места для библиотеки C, поэтому вам придется самостоятельно программировать все необходимые функции.

1
ответ дан 18 December 2019 в 09:05
поделиться

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

1
ответ дан 18 December 2019 в 09:05
поделиться

Вы можете рассмотреть возможность обновления до ATTiny25 . Это более мощный 8-контактный AVR, который включает универсальный последовательный интерфейс Atmel. Он способен аппаратно поддерживать однопроводную последовательную связь, имея всего несколько байтов программного обеспечения.

1
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: