Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 05.10.2014, 11:28  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: uart и rs232

пульт китайского телека на несколько кнопок даёт один код
2A 00 01
часть 2A 00 всегда одинакова, крайний байт иногда меняется
Реклама:
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
Непрочитано 05.10.2014, 11:36  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: uart и rs232

Я в предыдущем сообщении добавил, что если смотреть твою же ссылку на устройство, то можно понять, что первый байт со значением 2А - это просто ASCII-код символа *, не имеющего отношения к реальным кодам с пульта. Это замена, по которой можно опознать, что принимаемые по UART коды будут являться кодами управления с пульта.
Тот, кто придумал это устройство, че-то там понаписал такого, в чем сам толком не разобрался, видимо.
Попробуй ту прошивку, которая выдает на UART выдает только один байт, соответствующий коду нажатой кнопки.
Если на несколько кнопок выдается один код, значит, у того пульта, возможно, другой протокол, или меняется адрес, который не выводится на UART

Последний раз редактировалось NewWriter; 05.10.2014 в 11:49.
NewWriter вне форума  
Непрочитано 05.10.2014, 15:20  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: uart и rs232

сделал, теперь отображается только третий байт из таблицы кодов
https://kazus.ru/forums/showpost.php...32&postcount=6
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
Непрочитано 05.10.2014, 16:33  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: uart и rs232

а как обрабатывать приходящие данные?
так не выводятся
а код из урока http://avr-start.ru/?p=550 вешает эмулятор


Код:
#include ‹mega8.h›



char uart_data[5];
int i=0,j=0;

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1‹‹FE)
#define PARITY_ERROR (1‹‹UPE)
#define DATA_OVERRUN (1‹‹OVR)
#define DATA_REGISTER_EMPTY (1‹‹UDRE)
#define RX_COMPLETE (1‹‹RXC)

#define RX_BUFFER_SIZE 32
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE‹256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

bit rx_buffer_overflow;

interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   }; 
  uart_data[i]=data;
  i++;
  if(i›4)
  {
  i=0;
  } 
}
#ifndef _DEBUG_TERMINAL_IO_
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}

#pragma used-
#endif
#include ‹stdio.h›

void main(void)
{
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

#asm("sei")

PORTB=0x00;
DDRB=0xFF;
 
PORTD=0x00;
DDRD=0x00;

while (1)
 { 
      while(j==D5)
      {
      PORTB=0xFF;
      }
   
  while(j==C5)
      {
      PORTB=0x00;
      }
 };
}
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
Непрочитано 05.10.2014, 16:34  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: uart и rs232

просто портом управлять
D5 включить C5 выключить
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
Непрочитано 05.10.2014, 18:14  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: uart и rs232

Как обрабатывать входящие данные? А вот так: принятый по UART байт (для однобайтного кода кнопки) сравнивается с таблицей действий. В этой таблице прописано, какому значению байта какое действие соответствует.
Например:
- байт принят?
- если да, то...
- ...значение принятого байта = D5 ?
- если да, то на порт подать "1" (включить) и ждать приема по UART другого байта,
- значение принятого байта = С5 ?
- если да, то на порт подать "0" (выключить) и ждать приема по UART другого байта,
- иначе, если принят байт с другим значением, то не делать ничего и ждать приема по UART.

Если обрабатывать трехбайтный код, как в той таблице, то действия немного другие.
- байт принят?
- если да, то...
- ...его значение равно 2A ?
- если да, то ждем приема следующего (второго) байта, иначе (если нет), то либо ошибка приема по UART, либо принимаемые байты не являются кодами от конвертера, либо первый байт со значением 2А был пропущен и надо снова ждать прихода значения 2А.
- следующий (второй) байт принят?
- если да, то сохраняем его где-то во временном месте и ждем следующего байта
- следующий (третий) байт принят?
- если да, то инвертируем его и сравниваем с ранее сохраненным байтом.
- эти байты равны?
- если да, то всё норм и переходим к определению действия по значению сохраненного (второго) байта
- если нет, то принятый по ИК код был ошибочным или нестандартным (не Nec и не Samsung протокола).

Последний раз редактировалось NewWriter; 05.10.2014 в 18:34.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
AVRkin (05.10.2014)
Непрочитано 05.10.2014, 18:45  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: uart и rs232

прошивка 1 байтная

Код:
#include ‹mega8.h›
#include ‹stdio.h›
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char data;
data=UDR;

if (data=='D7') PORTC=0b00000001;
if (data=='15') PORTC=0b00000010;
if (data=='7D') PORTC=0b00000100;
if (data=='9D') PORTC=0b00001000;
if (data=='6F') PORTC=0b00010000;
if (data=='47') PORTC=0b00100000;

}

void main(void)
{
// Port C initialization

DDRC=0b11111111; 
PORTC=0b00000000; 

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// Global enable interrupts
#asm("sei")

while (1)
{
};
}

проблема в
if (data=='D7') PORTC=0b00000001;
if (data=='15') PORTC=0b00000010;
if (data=='7D') PORTC=0b00000100;
if (data=='9D') PORTC=0b00001000;
if (data=='6F') PORTC=0b00010000;
if (data=='47') PORTC=0b00100000;

если вместо 16ричных значений стоит 0 или 1 всё работает
а если коды пульта - ошибку пишет
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
Непрочитано 05.10.2014, 20:01  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: uart и rs232

#include ‹mega8.h›
#include ‹stdio.h›
#include ‹delay.h›
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char data;
int data1;

data=UDR;


int data1;
char data;
data = (char) data1;



if (data1=='D5') PORTC.0=1;
if (data1=='C5') PORTC.0=0;


/*
PORTC.3=1;
delay_ms(100);
PORTC.3=0; */

}

void main(void)
{
// Port C initialization
PORTC=0x00;
DDRC=0x01;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// Global enable interrupts
#asm("sei")

while (1)
{
};
}

преобразование типа не работает
__________________
Самое главное умение - умение радоваться жизни.

Последний раз редактировалось AVRkin; 05.10.2014 в 20:13.
AVRkin вне форума  
Непрочитано 05.10.2014, 21:24  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,928
Сказал спасибо: 2,544
Сказали Спасибо 11,827 раз(а) в 5,929 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: uart и rs232

Сообщение от AVRkin Посмотреть сообщение
преобразование типа не работает
С чего такой вывод? Даже без явного преобразования в "чар" роместится только младший байт "инта".
Сообщение от AVRkin Посмотреть сообщение
если вместо 16ричных значений стоит 0 или 1 всё работает
а если коды пульта - ошибку пишет
Код будет не 'D7', а 0xD7
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 05.10.2014, 23:32  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: uart и rs232

Сообщение от akegor Посмотреть сообщение
Код будет не 'D7', а 0xD7
уже пробовал
ошибку писал
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AVR, UART и режим IDLE anpaza Микроконтроллеры, АЦП, память и т.д 14 25.07.2011 03:04
ATMEGA простой UART (RS232) без max232 EXIS Микроконтроллеры, АЦП, память и т.д 39 09.12.2010 18:51
Нужно 2 UART на мк , как быть? Zemlyanov Микроконтроллеры, АЦП, память и т.д 77 04.05.2010 19:26
Подключение передатчика CAN и RS232 к одному UART Haster Микроконтроллеры, АЦП, память и т.д 9 16.04.2009 21:24
Помогите разобраться с UART masterpc Микроконтроллеры, АЦП, память и т.д 10 13.02.2007 17:49


Часовой пояс GMT +4, время: 21:30.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot