Помогите с управлением по RS232, плиз!

Обсуждаем цифровые устройства...
Ответить
anthony3d
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вт май 05, 2009 00:44:06

Помогите с управлением по RS232, плиз!

Сообщение anthony3d »

Мне нужно придумать (или использовать готовое) устройство для управления другим устройством по RS232.

Подробнее:
Есть устройство, которое управляется по RS232.
Нужно каким-то образом (без компьютера) эти команды подавать. Это должен быть отдельный модуль управления.
Команд всего 5 - 01, 02, 03, EA, EF. Соответственно, будет 5 кнопочек для управления. Каждая - на свою команду.

Основной мотив - устройство должно быть простое, дешевое, малогабаритное.
Еще, если это важно, уровни ком-порта должны быть TTL.

Подскажите, куда копать? Что искать?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Помогите с управлением по RS232, плиз!

Сообщение Engineer_Keen »

Копайте в сторону МК. Например attiny2313 - подходит с избытком. Есть UART - тот самый ком-порт с ТТЛ, куча выводов для кнопочек. Простой (вся схема - МК+кнопки), дешевый, малогабаритный (особенно если найти в соик-корпусе). Прога на ассемблере будет размером в пару окон редактора...
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Помогите с управлением по RS232, плиз!

Сообщение a_skr »

а прога на C на полэкрана: ;)

Код: Выделить всё

#include <avr/io.h>
#include <util/delay.h>

void txbyte(uint8_t byte)
{
  while((UCSRA & (1<<UDRE)) == 0);
  UDR = byte;
}

void main(void)
{
  PORTB = 0x1F;
  UCSRB = 1 << TXEN;   
  UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
  UBRRL = 12; // 4800 at 1MHz
  while(1)
  {
    if((PINB & 0x01) == 0) txbyte(0x01);
    else if((PINB & 0x02) == 0) txbyte(0x02);
    else if((PINB & 0x04) == 0) txbyte(0x03);
    else if((PINB & 0x08) == 0) txbyte(0xEA);
    else if((PINB & 0x10) == 0) txbyte(0xEF);
     _delay_ms(400);
    while((PINB & 0x1F) != 0x1F);
  }
}
Последний раз редактировалось a_skr Чт окт 14, 2010 13:42:24, всего редактировалось 1 раз.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Помогите с управлением по RS232, плиз!

Сообщение Engineer_Keen »

Я с размером немного погорячился :))) Кстати про антидребезг не стоит забывать, хотя бы софтовый (метка DELAY), иначе после нажатия на кнопку полезет целая пачка одного и того же кода.

Код: Выделить всё

.include "tn2313def.inc"

.cseg
.org 0
   LDI   R16,low(ramend)
   OUT   SPL,R16
   LDI   R16,0x1F
   OUT   PORTB,R16
   LDI   R16,0x00
   OUT   UBRRH,R16
   LDI   R16,0x06
   OUT   UBRRL,r16
   LDI   R16,(1<<TXEN)
   OUT   UCSRB,R16
   LDI   R16,(1<<USBS)|(3<<UCSZ0)
   OUT   UCSRC,R16
   CLR   R31
LOOP:
   RCALL   DELAY
   IN   R16,PINB
   ANDI   R16,0x1F
   LDI   R30,0x05
L0:   ROR   R16   
   BRCS   L1
   RCALL   UART_TX
   RJMP   LOOP
L1:   DEC   R30
   BRNE   L0
   RJMP   LOOP
UART_TX:
   ADIW   ZH:ZL,0x30
   ADIW   ZH:ZL,0x30
   LPM   R16,Z
TX1:   SBIS   UCSRA,UDRE
   RJMP   TX1
   OUT   UDR,R16
   RET
DELAY:   LDI   R17,0xC0
D0:   LDI   R16,0xFF
D1:   DEC   R16
   BRNE   D1
   DEC   R17
   BRNE   D0
   RET
.org 0x30
   .db 0x00,0xEF,0xEA,0x03,0x02,0x01


Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Помогите с управлением по RS232, плиз!

Сообщение Jack_A »

anthony3d писал(а):Мне нужно придумать (или использовать готовое) устройство для управления другим устройством по RS232.


Во-первых, если уровни TTL, то это будет уже не RS232, а UART. Но это детали.
Почему без МК? Препод требует знания логики? Правильно требует, иначе спецы превратятся в сборщиков из конструктора Лего, к этоиу идет.
Схему рисовать мне лениво, схема будет простая : генератор с частотой, определяемой заданным baud-rate. сдвиговый регистр, шифратор и счетчик. По нажатию кнопки в сдвиговый регистр заносится параллельный код посылки, в счетчик - число бит, включая стартовый и стоповый - в зависимости от режима приемного устройства. По отпусканию кнопки генератор двигает в регистре код, декрементируя счетчик до его обнуления. И на выходе ( старший или младший разряд - зависит от выбранного направления сдвига) получаем последовательный код и ловим кайф.

Или взять готовый ВВ51. Но так на листе рисовать нечего будет :-)

У меня студент попросил программку сделать простую, я ему сделал - уместилось на одной перфокарте ( еще были такие времена! ) - так он обреченно: "Ну и что мне преподу показывть? "

Перечитал исходное - там "без компьютера", про "без МК" ничего не сказано. Поэтому соглашусь с вышесказанными товарищами насчет tiny . Только на кнопки городить только ничего не надо, защита от дребезга легко делается программно.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Помогите с управлением по RS232, плиз!

Сообщение a_skr »

Кстати про антидребезг не стоит забывать, хотя бы софтовый (метка DELAY), иначе после нажатия на кнопку полезет целая пачка одного и того же кода.

Уговорили. Подправил.
anthony3d
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вт май 05, 2009 00:44:06

Re: Помогите с управлением по RS232, плиз!

Сообщение anthony3d »

Супер!
Думаю, так и сделаю.

Устройство это будет называться "Аудио-экскурсовод". Будет стоять в музее в Крыму.
Я нашел в сети платочку, которая воспроизводит MP3 с флешки, и управляется по RS232 TTL.
Нужно всего 5 команд. [Старт трех вариантов озвучки], [пауза-продолжить] и [полный стоп].
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Помогите с управлением по RS232, плиз!

Сообщение a_skr »

Не забудь скорость правильную выставить.
Ответить

Вернуться в «Цифровая техника»