Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
23.01.2010, 23:31
|
|
Частый гость
Регистрация: 07.12.2009
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
|
ATmega48-ATmega32 связь по SPI
В данной теме приводится пример связи микроконтроллеров ATmega48 и ATmega32 по интерфейсу SPI
|
|
|
|
23.01.2010, 23:42
|
|
Частый гость
Регистрация: 07.12.2009
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: ATmega48-ATmega32 связь по SPI
Добрый день всем.
Привожу тут свой пример для связи двух микроконтроллеров типа ATmega по интерфейсу SPI.
В данном примере МК ATmega48 является ведущим (master), а ATmega32 - ведомым (slave).
Оба МК работают на частоте 8 МГц.
Для индикации и тестирования программы к МК ATmega48 дополнительно подключен двухразрядный семисегментный индикатор (общий катод).
С той же целью к МК ATmega32 подключен LCD MT-16S2D.
В прикрепленных файлах есть все исходники и файл проекта в Proteus.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Pavel_xx за это сообщение:
|
|
|
30.01.2010, 17:12
|
|
Временная регистрация
Регистрация: 10.11.2007
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
Спасибо давно искал эту тему
|
|
|
|
02.02.2010, 19:09
|
|
Прохожий
Регистрация: 22.06.2009
Сообщений: 5
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
А кто нибудь в курсе на какое расстояние будет в таком случае работать SPI?
Хочу связать два контроллера метра 3-4
Сомневаюсь будет ли работать
|
|
|
|
03.02.2010, 11:50
|
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
Нет, работать не будет.
Для работы SPI используют частоту работы проца деленная на предделитель, по-моему до 128. При работе проца под 8Мгц или даже 16Мгц, сами понимаете скорость потока данных через "ШНУРОК". SPI по спецификации - внутресхемный интерфейс - внутри одной платы. И не надо его разносить на 3 метра.
Переходи на USART or UART.
Там все очень просто. Не хуже чем на SPI.
Идея та же. В один буфер запихиваешь то что отправить - со второго читаешь что получил.
Сделай еще один пин для общего отключения UART, скорее для ручного обнуления его буфера по таймеру. Так же это поможет отследить начало фрейма.
Правда будет гемор на счет прерывания. - если сделаешь ввод на слейв по сходу Int'n' тогда будет проще:
выставил мастером на эту ногу слейву единицу - в слейва будет начата процедура прослушивания UART, и начинаешь обмен данными мастером.
Разрешаешь прерывания от приемника UART и от переполнения таймера. После каждого приема байта по прерыванию от приемника UART обнуляешь таймер, который настроенный на прием в общей сложности 8-м бит + задержка. Все принятые байты пихаешь в общий стек - желательно программный - "свой". Если происходит прерывание от таймера - все, весь набор байтов принят, его можно обработать.
Наилучший вариант - ищи исходники MODBUS RTU для мастера и слейва под мегу. Когда-то находил... гугл знает все.
Там все очень просто, но... даже есть проверка по четности на ошибки и не только. Описал для каждого МК таблицы переменных и все - дал слейву команды типа:
"номер слейва" "идентификатор команды" "пачка байт данных" "проверка срс"
или
слейв номер "1" запиши себе значения 20-ти байт начиная с адреса №4001 и соответственно эти 20 байт данных + проверка на четность.
После отправки такого меседжа просто проверил ответ слейва. Он вернет тоже самое, только с установкой "1" на самом начале фрейма.
|
|
|
Сказали "Спасибо" ua_gruzin
|
|
|
04.02.2010, 12:08
|
|
Прохожий
Регистрация: 22.06.2009
Сообщений: 5
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
Однако попробую просто чтоб убедится
Шнурок программирования на 1.5 метра работает всё таки
|
|
|
|
14.02.2010, 20:29
|
|
Частый гость
Регистрация: 19.05.2009
Сообщений: 17
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
Глядя на представленный в этой теме пример решил сделать аналогичный вариант, но так что бы информация передавалась в обоих направлениях т.е. как от masterа к slave так и от slave к master.
Мне нужно что бы один МК передавал другому некоторое число и получал в ответ от него другое число. Написал прогу в CodeVision и смоделировал это дело в протеусе, но первый байт данных от слейва к мастеру упорно не передается а все последующие проходят Код и модель прикреплены. Подскажите что делаю не так?
|
|
|
|
16.02.2010, 16:50
|
|
Прохожий
Регистрация: 01.07.2004
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
Неужели никто не знает!!!
я боролась с этой проблемой неделю и бесполезно, нашел только вот это:
"В направлении передачи данных система выполнена как однобуферная, а в направлении приема используется двойная буферизация. Это означает, что передаваемые байты не могут быть записаны в регистр данных SPI, прежде чем полностью завершится цикл сдвига. Во время приема данных необходимо следить, чтобы принятая посылка была считана из регистра данных SPI, прежде чем завершится цикл входящего сдвига новой посылки. В противном случае первый байт будет потерян."
Но как это реализовать на «С» я не знаю.
Подскажите, пожалуйста!!!
|
|
|
|
16.02.2010, 18:06
|
|
Заблокирован
Регистрация: 08.08.2007
Сообщений: 2,843
Сказал спасибо: 378
Сказали Спасибо 1,368 раз(а) в 746 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
Сообщение от Igor_w77
|
Но как это реализовать на «С» я не знаю.
|
А что требуется реализовать? Какая разница С или asm. Главное - алгоритм. В атмегах всё очень просто, работаешь или по прерываниям (это когда одновременно несколько задач выполняются) или по флагам. В даташите примеров достаточно.
|
|
|
|
17.02.2010, 13:28
|
|
Прохожий
Регистрация: 01.07.2004
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ATmega48-ATmega32 связь по SPI
Спасибо за ответ.
Даташит я изучал, там описан пример и на «с» и на «asm», передачи от мастера к слейву а мне надо наоборот!!! Надо чтобы по запросу мастера, слейв передал данные.
Делаю все точно как описано, но передаю обратно и теряю первый бит!!!
Да, а когда передает мастер то все в порядке.
Вот в чем загвоздка!!!!!!
Без подсказки мне не разобраться.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:15.
|
|