| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Программный приемник по UART
20.06.2012, 11:26
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Программный приемник по UART
Сообщение от Fair88Play
|
|
#pragma vector = TIM0_OVF_vect
|
это директива, определяющая праграмму обработчика прерывания по переполнения таймера 0, т.е. void interrupt TimerOvf(void), а как это в Вашем случае, зависит от компилятора.
Сообщение от Fair88Play
|
|
#define RX_DDRX TRISIO
|
Имейте ввиду, что в AVR порты настраиваются иначе чем в PIC, точнее наоборот, к тому же, чтобы избежать путаницы, да и просто для приличия, хорошо бы Вам поменять названия связанные с регистрами AVR(DDRx :1-выход, 0- вход) на PIC (TRIS: 1 -вход, 0- выход).
|
|
|
|
20.06.2012, 11:38
|
|
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Re: Программный приемник по UART
Сообщение от nonamedov
|
|
Имейте ввиду, что в AVR порты настраиваются иначе чем в PIC, точнее наоборот, к тому же, чтобы избежать путаницы, да и просто для приличия, хорошо бы Вам поменять названия связанные с регистрами AVR(DDRx :1-выход, 0- вход) на PIC (TRIS: 1 -вход, 0- выход).
|
Спасибо за ответ, это я в курсе, просто значит не правильно изложил свой вопрос. В AVR 3 регистра: PORTx, DDRx и PINx, а у Пика 2: TRISIO и GPIO, поэтому и возник вопрос, правильно ли я их определил.
"Далее я сделал проект в IAR`е, подключил к нему полученную «либу» программного UART`а и написал пару строк кода для проверки результатов" - как подключается? В source files вторым Сишным файлом?
P.S. Извините за детские вопросы
|
|
|
|
20.06.2012, 12:28
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Программный приемник по UART
Сообщение от Fair88Play
|
|
Согласен, что почти ничего не понимаю, и поэтому хочу разобраться! Когда спрашивал, как организовать приемник, мне дали пример, типа сиди и разбирайся, что я и делаю, что не понятно, спрашиваю здесь же, что в этом плохого?
|
Так вам нужен программный приемник или аппаратный? Программный - сидите в цикле, ждете, когда придет стартовый бит. По перепаду фронта начинаете захватывать дынне через определенный промежуток времени, зависящий от частоты передачи.
|
|
|
|
20.06.2012, 12:29
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Программный приемник по UART
1. Да.
2. Сделайте свой заголовочный файл (softUart.h) и подключите его в основной программе (директива #include), заодно и скопируйте файл библиотеки (uart.c) в проектную папку.
|
|
|
|
20.06.2012, 12:58
|
|
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Re: Программный приемник по UART
Сообщение от Easyrider83
|
|
Так вам нужен программный приемник или аппаратный? Программный - сидите в цикле, ждете, когда придет стартовый бит. По перепаду фронта начинаете захватывать дынне через определенный промежуток времени, зависящий от частоты передачи.
|
Мне нужен программный приемник, так как в pic12f675 нет аппаратного.
На программный приемник дали пример, с которым я сейчас и пытаюсь разобраться. Спасибо за ответы, буду дальше пыхтеть-разбираться
|
|
|
|
20.06.2012, 14:02
|
|
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Re: Программный приемник по UART
Подскажите, пожалуйста, где я накосячил?
|
|
|
|
20.06.2012, 14:11
|
|
|
Прописка
Регистрация: 29.06.2005
Сообщений: 153
Сказал спасибо: 111
Сказали Спасибо 46 раз(а) в 32 сообщении(ях)
|
Re: Программный приемник по UART
Как-то так. Для приема можно использовать вывод MCLR с прерыванием по изменению состояния входа.
/************************************************** ********************
Функция приема данных
Возвращает FF при ошибке стартового бита.
************************************************** ********************/
unsigned char RS45Rx (void)
{
#define Bit 0x5E
#define Half_Bit 0x30
unsigned char Rcv_byte =0;
unsigned char count ;
DelayUs(Half_Bit);
if (Bit_Rxd) //Старт-бит?
return (0xFF); //Нет.
for(count=8;count›0;count--) //Да!
{
Rcv_byte ››=1;
DelayUs(Bit);
if (Bit_Rxd){
Rcv_byte = (Rcv_byte | 0x80);
}
}
DelayUs(Bit); //Ждем стоп-бит
return (Rcv_byte);
}
|
|
|
|
20.06.2012, 15:18
|
|
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Re: Программный приемник по UART
Сообщение от Picman
|
Как-то так. Для приема можно использовать вывод MCLR с прерыванием по изменению состояния входа.
/************************************************** ********************
Функция приема данных
Возвращает FF при ошибке стартового бита.
************************************************** ********************/
unsigned char RS45Rx (void)
{
#define Bit 0x5E
#define Half_Bit 0x30
unsigned char Rcv_byte =0;
unsigned char count ;
DelayUs(Half_Bit);
if (Bit_Rxd) //Старт-бит?
return (0xFF); //Нет.
for(count=8;count›0;count--) //Да!
{
Rcv_byte ››=1;
DelayUs(Bit);
if (Bit_Rxd){
Rcv_byte = (Rcv_byte | 0x80);
}
}
DelayUs(Bit); //Ждем стоп-бит
return (Rcv_byte);
}
|
А что здесь подразумевается под Bit_Rxd? И почему Bit = 0x5E, а Half_Bit = 0x30?
|
|
|
|
20.06.2012, 16:04
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
|
Re: Программный приемник по UART
BitRxd - длительность передачи одного бита в микросекундах. Half_bit - половина битового интервала. После приема стартового бита нужно выждать 1,5 битовых интервала, чтобы данные считывались в момент, когда нет изменений входного сигнала.
Возможно автор откорректировал значение задержки с учетом расхода времени на выполнение команд чтения порта и сдвига принимаемых данных
__________________
misterdi<@>i.ua
Последний раз редактировалось MisterDi; 20.06.2012 в 16:06.
|
|
|
|
20.06.2012, 16:14
|
|
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Re: Программный приемник по UART
Всем большое спасибо, криво-косо, но все таки как-то реализовал
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:41.
|
|