Мелкие вопросы по МК и ПЛИС.
Вешать можно на любую лапку, все равно там свой протокол.
Docendo discimus
- Реклама
Всем привет. Возможно это было ранее, возможно и глупо, но все же...
Я ещё не достаточно изучил USART, но я так понял что для его реализации нужны только 2 ноги МК (RxD и TxD)? С учетом того, что я делаю проект с последующим наращиванием функций, встал такой вопрос. Могу ли я использовать USART и параллельно подключить нагрузку, но так чтобы ничто друг другу не мешало???
Уточняю: мне нужно подключить LCD дисплей на порты D у Atmega8 и в тоже время пользоваться USART'ом, а это порты D.0 и D.1. Если поставить резисторы в 4.7кОм, на именно эти 2 порта идущие к LCD - это поможет?
Заранее спасибо)
Я ещё не достаточно изучил USART, но я так понял что для его реализации нужны только 2 ноги МК (RxD и TxD)? С учетом того, что я делаю проект с последующим наращиванием функций, встал такой вопрос. Могу ли я использовать USART и параллельно подключить нагрузку, но так чтобы ничто друг другу не мешало???
Уточняю: мне нужно подключить LCD дисплей на порты D у Atmega8 и в тоже время пользоваться USART'ом, а это порты D.0 и D.1. Если поставить резисторы в 4.7кОм, на именно эти 2 порта идущие к LCD - это поможет?
Заранее спасибо)
Самое гениальное - всегда самое простое
Что-то я опять затупил...
Можно как-то сложить знаковое 8-битное число с беззнаковым 16-битным без условных переходов?
Можно как-то сложить знаковое 8-битное число с беззнаковым 16-битным без условных переходов?
От чего поможет?резисторы в 4.7кОм, на именно эти 2 порта идущие к LCD - это поможет?
Вообще говоря - нет, поскольку одним выходом вы собираетесь управлять двумя входами. Ясен пень они оба будут ловить инфу. Но! Если продумать как следует, то возможно, что одно другому и не помешает или будет не мешать работать как надо. Все зависит от ваших возможностей.
2ploop: Навскидку: знаковый бит размножить на старший байт и сложить два двухбайтных числа.
Docendo discimus
Типа этого?
Код: Выделить всё
; r16 - LSB беззнакового 16-битного
; r17 - MSB беззнакового 16-битного
; r18 - знаковое 8-битное
clr r19
bst r18,7
bld r19,0
neg r19
add r16,r18
adc r17,r19
- Реклама
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Вот что значить асм мышление, я бы о подобном подходе и не подумал
:
Код: Выделить всё
clr r19
sbrc r18, 7
ldi r19,0xFF
Если Вы говорите именно про USART, то, исходя из названия, он может работать как в асинхронном, так и в синхронном режиме.Volgol_555 писал(а):Я ещё не достаточно изучил USART, но я так понял что для его реализации нужны только 2 ноги МК (RxD и TxD)?
Для асинхронного режима достаточно двух пинов (выводов) - RxD и TxD, вы правы. А для синхронного режима задействуется третий пин - XCK (вроде, так он называется) для подачи синхроимпульсов.
Я настоятельно не рекомендую так делать. Во-первых, это моветонVolgol_555 писал(а):С учетом того, что я делаю проект с последующим наращиванием функций, встал такой вопрос. Могу ли я использовать USART и параллельно подключить нагрузку, но так чтобы ничто друг другу не мешало???
Уточняю: мне нужно подключить LCD дисплей на порты D у Atmega8 и в тоже время пользоваться USART'ом, а это порты D.0 и D.1.
Если да, то для управления таким дисплеем пины микроконтроллера, как правило, переключаются в режим выходов.
Таким образом, для подачи управляющего сигнала на дисплей Вам будет нужно переключить пин RxD в режим выхода, а это можно сделать, только отключив USART. При этом, скорее всего, потребуются добавочные схемотехнические решения для исключения конфликтов наподобие подачи логических уровней на выходные цепи драйвера преобразования интерфейса USART TTL в RS-485/422/232. И Вы сможете, во-первых, потерять байт(ы), поступившие на USART в то время, когда Вы управляете дисплеем. Во-вторых, из-за отключения USART при этом Вы не сможете организовать отправку данных по USART, используя прерывания по передаче байта.
Я понимаю, что у Вас, скорее всего, есть готовые подпрограммы для работы с дисплеем, рассчитанные для подключения дисплея к порту D. Поверьте, гораздо проще будет внести изменения в эти подпрограммы и перенести дисплей на другой порт. Тем более, что изменения не так уж и велики.
Угу, просто спать больше надоВот что значить асм мышление, я бы о подобном подходе и не подумал
Проканало? А то вломы проверять.Типа этого?
Docendo discimus
Спасибо, я тоже так думал - переделать программу на другой порт, - но мне дозволяется в CodeVisionAVR у Atmega8 выставить LCD на порты B или D. Но мне нужны порты D.0 и D.1 для USART и порты B.6 и B.7 для внешнего кварца, т.е. конфиг портов B и D не подходит. Остается только порты C. Но к нему относится порт С6-reset, поэтому CodeVision не позволяет выполнить подключение к C, но есть С.3, который по идее свободный и можно было бы его поставить вместо С6. Так вот вопрос: как в CodeVision поменять порт С6 c С3 для LCD дисплея. Пробовал в библиотеки залезть, но там ничего конкретного нету(Alkul писал(а):
Я понимаю, что у Вас, скорее всего, есть готовые подпрограммы для работы с дисплеем, рассчитанные для подключения дисплея к порту D. Поверьте, гораздо проще будет внести изменения в эти подпрограммы и перенести дисплей на другой порт. Тем более, что изменения не так уж и велики.
Вот как в CV проходит инициализация портов для B
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
Как сделать для портов C ?
Самое гениальное - всегда самое простое
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
.. заглянуть в datasheet или файл mega8.h в папке inc.Volgol_555 писал(а):Как сделать для портов C ?
Код: Выделить всё
#asm
.equ __lcd_port=0x15 ;PORTС
#endasmда, нашел) Остался один вопрос. Можно ли С6 заменить на С3?, скажем переопределить заново? И так чтобы это сработало с LCD дисплеем, т.е. в каком-то смысле его обмануть посылая сигнал не С.6, как это должно быть,а на С3, соответственно туда ногу подключив. При этом сделать наиболее просто не переправляя библиотеки. Если да, то как это можно сделать на Си?ChipKiller писал(а):.. заглянуть в datasheet или файл mega8.h в папке inc.Volgol_555 писал(а):Как сделать для портов C ?Код: Выделить всё
#asm .equ __lcd_port=0x15 ;PORTС #endasm
Самое гениальное - всегда самое простое
Проблема не в том, чтобы вешать на лапку - это я и сам понимаю, корень вопроса звучал:pyzhman писал(а):Вешать можно на любую лапку, все равно там свой протокол.
"подходит ли USI для работы с DS18B20" ??
мысли мысли штош вы вйотесь
над мойейу головойу
вы там мосга нинайдете
нед там мосга! йа тупойе (БОР)
над мойейу головойу
вы там мосга нинайдете
нед там мосга! йа тупойе (БОР)
Проще с нуля написать 1-Wire, чем колдовать с USI.DJ_Kiridza писал(а):"подходит ли USI для работы с DS18B20" ??
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Вот так вот:pyzhman писал(а):Проканало? А то вломы проверять.Типа этого?
Код: Выделить всё
clr r19
sbrc r18, 7
ldi r19,0xFF
add r16,r18
adc r17,r19
Код: Выделить всё
sbrc r18, 7Docendo discimus
Так и говорил бы - покороче, а не морочить голову людям. Расстроил ты меня. Пойду водку пить, вчера мне обещали. 
Docendo discimus


