Доброго времени суток, даже не знаю с чего начать:
Имеются две ATTINI2313 и ATMEGA16 , есть небольшой опыт программирования на Си.
И есть конкретная задача:
(один ATTINI2313 управляет выходным напряжением блока питания
при помощи ШИМ.
второй ATTINI2313 крутит шаговый двигатель.
ATMEGA16 подключена к компъютеру через UART.) -зто все работает но по одельности.
Я же хочю что-бы Атмегой 16 можно было управляь этим блоком питания и двигателем.Помогите мне их связать , по какому интерфейсу? Вроде как SPI надо использовать. Но с чего начать не знаю ?
Всем спасибо!
Последний раз редактировалось elf Чт фев 04, 2010 23:00:54, всего редактировалось 1 раз.
Если програмно реализовывать протокол то почему именно UART с таким же успехом можно связать все три устройства по I2C или по однопроводному 1-wire.
А вообще очень мало информации.
Где тип процессораПК?какая материнка?
Даи вообще какогоцвета системныйблок?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Процессор Атлон 3000 Материнка АСУС к8н- а зачем это???
Согласен что можно по I2C и 1-wire. Но сразу вопрос будут ли две
ATTINI2313 самостоятельно передавать информацию или их надо опрашивать Атмегой16 - это важно.
Стыкуйте по SPI. Начинать надо с систематизации принимаемой и передаваемой информации на каждый МК. На основе этих данных формируете протокол обмена, разрабатываете программу. Заливаете и отлаживаете в железках.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
А есть ли какой-нибудь суперасинхронный протокол? Нужно нечто подобное, только ведомых контоллеров от четырёх до восьми, и в каждом могут совершенно непресказуемо образовыватся прерывания. Теоритически прерывания можно упорядочить без особого ущерба алгоритма работы устройства.
Для >ТЕНЬ<, а зачем асинхронный протокол? Кому как но сам предпочитаю синхронные протоколы типа SPI. Единстенно нужно исключать обработку пустых сообщений от адресата. А определять передачу "Васе или Гале" можно по флагам.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Длина посылки в одну точку какая? Да и собстенно какая разница? Протокол синхронный. Ведущий прервался, но сигнал выбора не снял, аппаратно байт выдует до конца. Ведомый его примет и будет ждать чего ему еще скажут. Ведущий выйдя из прерывания завершит свой диалог с ведомым, снимет сигнал выбора и пусть там ведомый уже обкатывает что ему на уши повесили.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
а в ATTINI2313 есть SPI?Наверное есть). Что-то я не могу понять
пользуюсь мастером CVAVR.Как выбрать чтобы чип Slave был?
У меня такой код генерит
(
// Universal Serial Interface initialization
// Mode: Three Wire (SPI)
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x10;
)
А разве ведущий/ведомый это не условность? Вроде который начал передачу тот и ведущий. У себя бы я их вообще по 232 связал, да вот только посылка у меня занимает минимум 4 байта, чтобы работал буфер надо отключать прерывания, чего делать ну никак нельзя
При обмене по SPI ведущим может выступать один МК, ведомых может быть масса, которая легко расширяется до большего размера. Протокол синхронный и тактовый сигнал (SCK) генерится ведущим. В его присутствии ведущий выдает в линию (MOSI) данные, а по линии (MISO) принимает данные от выбранного сигналом (#SSi) ведомого.
Ни один ведомый не может начать передачу без разрешения ведущего. В общем виде (во временном разрезе) получается что ведущим указывается новая задача ведомому, в то время как ведомый сообщает результат полученный на предыдущую команду (посылку длиной N байт).
Подобные протоколы хороши в распределенных системах, где есть центральный узел и куча периферийных подузлов, например, когда один МК принимает данные от ПК и раздает на несколько устройств управления ШД, отрабатывающих перемещение в своих координатах.
Что касается протокола RS232 то конечно он асинхронен, но получить простым соединением в звезду такой "сетки" , без лишних деталей, невозможно
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже