Свежие обсуждения
Микроконтроллеры

MSSP(IIC) и USART

1 13

Есть PIC. У него один последовательный I2C(IIC). И один приёмо-передатчик (USART).
Можно ли увеличить их колличество? Тех и других! Не меняя PIC?!
Нужно ДВА USART и ТРИ I2C.
Т.к. два устройства с RX/TX и ТРИ микрохи (без уникальных номеров и адресов) на I2C.

Ваши предложения! (Не предлогать ручное написание I2C и RX/TX - Ну если предложите, то материал по написанию!)

 

i2c может обслуживать более одного устройства на шине

для авр есть код для софтового уарт, про пики не знаю
можно взять ключи и коммутировать 2 девайса на 1 пик для усарт

 

i2c легко делается программно. UART тоже, но получается не очень быстрый
Я бы всё же поменял пик.

 

Tim18:
Ваши предложения
В 9-м номере журнала, за этот год, есть статья "Com to MIDI, или преобразователь скорости UART". Там один UART - аппаратный, а второй - програмный.

 

Можно алгоритм и принцип действия UART увидеть?

 

Tim18:
Можно алгоритм и принцип действия UART увидеть?
Если вопрос ко мне, то вроде я уже дал ссылку на статью.
А на ихнем ФТП, и прошивка, и исходник, и печатка.

 

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

 

chav1961:
Да какой там алгоритм
Да не всё так просто, как кажется.
Вот, например, предлагаете запускать приём по перепаду. А если в этот момент уже передача идёт? И наоборот, надо очередной бит передавать, а ещё обработка приёма не завершена.
Лично я, всё сделал от одного таймера, и все ветки программы выровнены до М.Ц., вплоть, до корректировки входа в обработку прерывания.
К сожалению, не получил пока разрешения на публикацию авторского варианта статьи, а в журнальном её довольно сильно отредактировали. В частности, убрали некоторые полезные, на мой взгляд, диаграммы.

 

А DTR/DSR и RTS/CTS на что? Не нужно делать прием/передачу асинхронными - не будет и проблем. В 90% случаев это вполне возможно. На остальные 10 % случаев есть еще один вариант, посложнее - поднять частоту тиков таймера в 8 раз. В программировании это немного посложнее (именно немного!). Нужны подробности - могу выложить прогу, только к концу недели.

 

Я делал программный полнодуплексный UART на голом таймере И не выверял ничего
Вот, приложил.

116319.c