Змінюй хід війни! Допомагай ЗСУ!

Хочу попробовать освоить микропроцессоры. Поможете советами?

  • Автор теми Автор теми Jonhson
  • Дата створення Дата створення
1-wire это не библиотке, а интерфейс. И он не предназначен для связи контроллеров между собой. Для этого есть более простые и удобные способы: SPI, I2C, UART. 1-wire для периферии от которой не требуется много информации и большой скорости. Датчики, электронные ключи, и прочее.
 
Ну, в данном случае мне важен не результат, а процесс ;-) так что вариант специалистов - не выход.

Ок. Смотри в сторону дифференциальных шин.
Таких шин на данный момент имеется 2 основных вида с подвидами.
Более дешевые (на основе UART) - RS485, RS422 (это 2 RS485 - полный дуплекс для мастера. 485 - все абоненты висят паралельно, а значит нужна синхронизация, чтобы не мешались )
Дороже, но с нормальными скоростями - LVDS.

P.S. Для высоконадежного обмена есть ещё CAN, но не думаю, что он тебе надо.
 
Апну темку.
Немного разобрался с проектом Ардуино.
Для тех, кто будет наступать на грабли - буду рад помочь советом.
Есть несколько моментов, которые надо учитывать:
1. Ардуиновский софт очень криво работает с прошивкой микросхем по ISP. Особенно, младших моделей. Сторонний софт (у меня ПониПрог) решает эту проблему.
2. Прошивок (бутлоадеров) есть две. Причем, обе входят в комплект поставки. Основная - большая и тормознутая. порядка 1 кб. и 8 секунд старта. Вторая (optiboot) - в два раза меньше и стартует сразу. Но! Не смотря на то, что прошивки есть в комплекте, надо править ручками файлы.
3. Начиная с варианта UNO - стоит уже продвинутый бутлоадер
 
На Ардуиновские кривые грабли тут наступать никто не будет :)

Ну, можно было мне это тактичнее сказать, нарисовать, например ;-)
142613.jpg


Кстати, вопрос уже в тему...
Есть программка. Есть нех-файл.
В ардуино я загружаю его через ее интерфейс и не вникаю в детали. Загрузчик сам передает ей управление и т.д.
Если я буду работать без загрузчика (мне как раз чуток памяти не хватает), я должен сам отслеживать адрес, с которого начинается выполнение программы?! Где-то его указывать? Или там по умолчанию старт идет с начала, с какого-то адреса?!
Порылся в научно-популярных описаниях фьюзов, но, то ли не заметил, то ли не там рылся, но не увидел, где там адрес прошивается?
 
Адрес старта шьется вместе с таблицей прерываний начиная с нулевого адреса.
 
Не обижайся, я не со зла. Просто Ардуина как кривой конструктор нелюбима многими. И мной в частности.

Если прошивку шьешь программатором, то адрес программы начинается с нуля. Бутлоадер сидит по адресу определяемому настройками фьюзов.
 
Не обижайся, я не со зла. Просто Ардуина как кривой конструктор нелюбима многими. И мной в частности.
Да я и не обижаюсь ;) Я уже тоже начинаю видеть в ней грабли...
Но пока я уже влез, хочу доделать то, что начал... Из очередного примера.
Есть АЦП на борту. Получаю с него число. Перевожу в напряжение *(5/1023) (пять вольт, 10 бит). переменная напряжения - с плавающей точкой... На выходе - болт. Танцы с бубном, разбор примеров. Обращаю внимание, что в примерах написано *(5/1023,0) Добавляю запятую и ноль - все работает... Сижу, думаю, матерюсь тихо... ;-)

Если прошивку шьешь программатором, то адрес программы начинается с нуля. Бутлоадер сидит по адресу определяемому настройками фьюзов.
переформулирую. Если буду использовать другой софт, мне надо будет этим озадачиваться? Или компилятор это делает сам?
 
Из очередного примера.
Есть АЦП на борту. Получаю с него число. Перевожу в напряжение *(5/1023) (пять вольт, 10 бит). переменная напряжения - с плавающей точкой... На выходе - болт. Танцы с бубном, разбор примеров. Обращаю внимание, что в примерах написано *(5/1023,0) Добавляю запятую и ноль - все работает... Сижу, думаю, матерюсь тихо... ;-)
Ардуина тут не при чем. Учите С и преобразование типов ;)
переформулирую. Если буду использовать другой софт, мне надо будет этим озадачиваться? Или компилятор это делает сам?
Обычно сам.
 
переформулирую. Если буду использовать другой софт, мне надо будет этим озадачиваться? Или компилятор это делает сам?
Сначала надо будет отключить бутлодырь,сняв галку с фьюза BOORST.
Если будешь писать на асме,то в таблице прерываний для вектора RESET прописываешь jmp на метку начала выполнения программы,если в С - выполнение программы начнется с main(), но до этого компилер может воткнуть в код функцию чистки секции .bss (ОЗУ).
 
Ну, можно было мне это тактичнее сказать, нарисовать, например ;-)
142613.jpg
Нет, диод тут не причем. Он имел ввиду, что тут тусят люди, уоторые платки по сложнее ардуино сами клепали и клепают.
У нас не найти советов по ардуине, так как мы не юзеры - мы креаторы :) Мы не покупаем готовые поделки втридорога - мы их сами делаем :) Потому граблей у нас своих хватает и отвлекаться на дураино нам просто уже впадлу :D

Если понадобится хороший бутлоадер - обназательно обращусь :)
Если начнешь играться с GSM-модемом на SIM900A с залоченой прошивкой под Азию - обращайсо :)

Сначала надо будет отключить бутлодырь,сняв галку с фьюза BOORST.
Если будешь писать на асме,то в таблице прерываний для вектора RESET прописываешь jmp на метку начала выполнения программы,если в С - выполнение программы начнется с main(), но до этого компилер может воткнуть в код функцию чистки секции .bss (ОЗУ).

А зачем ему отключать лодыря, если он шить через него собирается?
Если через ISP - конечно придётся. А так - какая разница какой лодырь, или у ардуины какой-то свой взгляд на мир и их лодырь не подходит?

Если прошивку шьешь программатором, то адрес программы начинается с нуля. Бутлоадер сидит по адресу определяемому настройками фьюзов.

Адрес программы начинается не с нуля, а с директивы org (если это асм).
В С тоже настраивается как-то, но я лодерами не шью и не знаю как :)

Сначала надо будет отключить бутлодырь,сняв галку с фьюза BOORST.
Если будешь писать на асме,то в таблице прерываний для вектора RESET прописываешь jmp на метку начала выполнения программы,
Это в любом случае делается, независимо от оффсета адреса начала.

если в С - выполнение программы начнется с main(), но до этого компилер может воткнуть в код функцию чистки секции .bss (ОЗУ).
Он и воткнет, если не отключить специально. И правильно воткнет - я возрадовался, когда на нее наткнулся. В асме я сам её писал :)
Правда у меня в асме короче получалось, скорость старта не климатит вообще, она однопенисуально быстрая, так как ОЗУ мало.

А вот как компилер в С заставлять учитывать бутлоадер - мне тоже интересно. Ни когда этого не делал.
Не проясните тему для общего развития?
 
В CodeVision визард тебя сам спрашивает что ты пишешь апликейшн или лоадер, потом потребует еще от тебя максимальный размер планируемого лоадера потому как потом в скомпиленый асм-файл вставляет директиву .org с правильным адресом. Естеесно юзер сам должен правильно настроить фьюзы, чтоб при старте ты ввалился на этот адрес и начал выполнятся код лоадера. Лоадер шьется в дно памяти, то есть откусывается под него кусок в 512, 1кб 2к. Как пожелаешь.
В апликейшне можно хоть непосредственно прыгнуть на адрес лоадера (инлайн асм команда), можно обявить лоадер функцией и взять на нее указатель (адрес лоадера), можно включить сторожевую псину и через while(1) ждать пока проц ресетнется и сам стартанет с лоадера. Как то так. Если нужен будет готовый лоадер, обращайся их есть у меня. Писал его с расчетом на RS-422/485. Кодом софтины загрузчика тоже поделюсь. Писано в шестом билдере.

ЗЫ. Сейчас у меня сделано так: плата стартует, лоадер лезет в ЕЕПРОМ и смотрит наличие флага смены ПО. Если такового не имеется, передаем управление основной программе, если есть, ловим код пачками и прошиваемся.

Нет, диод тут не причем. Он имел ввиду, что тут тусят люди, уоторые платки по сложнее ардуино сами клепали и клепают.
В точку! :клас:
 
Останнє редагування:
Возможно,но я как-то не юзал такое.
В принципе,все зависит от скрипта линкера,хоть в гцц,хоть в яре,хоть в космике - ведь он раскладывает код по полкам.
 
Назад
Зверху Знизу