|
|
|
|
Есть 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 |
|
|
|
|