Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » управление роботом ДУ

Страниц (4): « 1 [2] 3 4 »
 

16. alex91 - 23 Сентября, 2010 - 22:12:52 - перейти к сообщению
Пульт вскрыл увидел что там "нормальной микросхеме" вот фото пульта и фото микросхемы
LT1338N на нее дотащит не нашел
http://www.imghost.in/images/bp3...s7puycyypko.jpeg
http://www.imghost.in/images/0i0...ruxu0apfftd.jpeg
17. nest - 23 Сентября, 2010 - 22:23:43 - перейти к сообщению
LT1388 вообще то.
упоминается тут
Можете там где нибудь и поинтересоваться, что за кодировка у этого пульта. Телевизионщики вообще уже по внешнему виду пульта скажут Улыбка

Ну или просто перепробуйте остальные пульты.
18. alex91 - 23 Сентября, 2010 - 22:40:07 - перейти к сообщению
nest спасибо проглядел Смущение
я поинтересовался, даже если он не rc-5 завтра на барахолке куплю еще несколько пультов разных производителей
19. mihail - 23 Сентября, 2010 - 22:55:12 - перейти к сообщению
В архиве программа для ATmega8535. Переделать эту программу под ATtiny2313 выше моих сил Грустный Светодиоды припаивайте к порту А или С.
20. alex91 - 24 Сентября, 2010 - 00:00:41 - перейти к сообщению
mihailспасибо большое сейчас опробую
(Добавление)
Вот зараза не работает Грустный
Наверно все же этот пульт не RC-5
Сегодня уже утром придется парочку других купить
подключил светодиоды к портам PAO-7 а TSOP к порту PD3
порт AVCC подсоединил к +5в
21. mihail - 24 Сентября, 2010 - 01:41:56 - перейти к сообщению
Не знаю, что и сказать. Схема, вроде, соответствует программе. Программу я почти не менял. Правда, после более близкого знакомства с ней, она мне не понравилась. Микроконтроллер точно на 8 мегагерцах работает? TSOP на пульт с большого расстояния реагирует?
(Добавление)
Есть программа для RC5 написанная самими ATMELовцами (AVR410: RC5 IR Remote Control Receiver). Но она на ассемблере рёв в три ручья
22. alex91 - 24 Сентября, 2010 - 01:59:13 - перейти к сообщению
микроконтроллер выставлен по этим фьюзам
http://myrobot.ru/forum/topic.ph...13&topic=318
на пульт устройство вообще не как не реагирует Грустный
Ничего, может утром разберусь с другими пультами
23. mihail - 24 Сентября, 2010 - 02:22:25 - перейти к сообщению
alex91 пишет:
на пульт устройство вообще не как не реагируе
Я имел ввиду свою "универсальную" программу. Расстояние реакции на пульт должно быть большим (метров 5).
alex91, EEPROM записать не забыли?
24. mihail - 24 Сентября, 2010 - 05:18:25 - перейти к сообщению
Изобрел я велосипед Ухмылка alex91, проверьте. Если работает, напишите. Я из за этого велосипеда уснуть не могу Грустный

/* ************************************
RC5
************************************* */

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

int main(void) /* начало основной программы */
{

DDRA = 0xff; /* порт A сконфигурировать как выход */
PORTA = 0x00; /* установить "0" на всех выводах порта A */

DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, TSOP */
PORTD |= (1<<3); /* установить "1" на PD3, включаем подтягивающий резистор */

volatile unsigned char byte_high;
volatile unsigned char byte_low;

while(1) /* бесконечный цикл */
{

byte_high = 0;
byte_low = 0;

while( PIND & (1<<3) ); /* проверка TSOP */

_delay_us(200); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 32;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 16;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 8;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 4;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 2;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 1;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 128;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 64;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 32;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 16;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 8;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 4;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 2;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 1;
_delay_ms(40); /* задержка */

PORTA = byte_low; /* вывести младший байт на порт A */

} /* закрывающая скобка бесконечного цикла */

return 0;

} /* закрывающая скобка основной программы */
25. alex91 - 24 Сентября, 2010 - 11:28:15 - перейти к сообщению
я вообще привык программировать микроконтроллер программой понипрог
и открываю программу и файл и программирую сразу и flach и eeprom
а от первой программы видит где-та на 7 метров зажигает светодиод
спасибо вам большое сейчас попробую последнюю программу
(Добавление)
работает высший восторг
Работает значит так
если нажимать на кнопку 2 пульта то зажигаются только два светодиода PA3 и PA6

остальные светодиоды включаются если нажать на кнопку 1 и держать тогда светодиоды
PA0-PA7 зажигаются поочередно с большой скоростью
Если нажать на кнопку 0 пульта то также зажигаются PA3 и PA6 и если еще раз нажать то PA3 будет гореть постоянно а PA6 только при нажатии а если держать кнопку 0 они медленно зажигаются поочередно PA0-PA7
26. mihail - 24 Сентября, 2010 - 17:47:54 - перейти к сообщению
То что есть прогресс - хорошо [очень грустная улыбка]
Работать эта программа должна так:
- если нажать и удерживать кнопку пульта, то должны постоянно гореть несколько светодиодов;
- если кнопку отпустить все светодиоды гаснут;
- разные кнопки пульта дают разную комбинацию светодиодов.

Программа написана по мотивам нижеприведенного описания протокола RC5.
http://www.sbprojects.com/knowledge/ir/rc5.htm

Программа на столько проста и примитивна, что даже не знаю где я там мог ошибиться.

Проверить бы программу пультом гарантированно работающем на RC5. Случайно не можете у друзей одолжить 2-3 пульта от техники Philips Улыбка Желательно разных лет выпуска.

В Makefile проверьте F_CPU = 8000000
Пульт от какой техники?
27. alex91 - 24 Сентября, 2010 - 23:31:57 - перейти к сообщению
у меня пульт от телевизора vesta model : DT-2126
купил я сегодня пару пультов от тв samsung sony lg
они работают также как и мой
наверно надо было брать по старее
уже у друга попрошу на время его пульты от домашней техники
в принципе при нажатие и удерживании кнопки 1 они все и зажигаются по очереди с большой скоростью и гаснут а ели отпустить светодиоды не гаснут
28. mihail - 25 Сентября, 2010 - 04:24:32 - перейти к сообщению
Программа для пульта SONY

/* ************************************
Sony SIRC Protocol (12 bit)
************************************* */

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

int main(void) /* начало основной программы */
{

DDRA = 0xff; /* порт A сконфигурировать как выход */
PORTA = 0x00; /* установить "0" на всех выводах порта A */

DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, TSOP */
PORTD |= (1<<3); /* установить "1" на PD3, включаем подтягивающий резистор */

volatile unsigned char byte_command;
volatile unsigned char byte_address;

while(1) /* бесконечный цикл */
{

byte_command = 0;
byte_address = 0;

while( PIND & (1<<3) ); /* проверка PD3, TSOP */

_delay_us(3700);

/* command bit 1 */
if( !(PIND & (1<<3)) )
{
byte_command |= 0b00000001;
_delay_us(600);
}

/* command bit 2 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_command |= 0b00000010;
_delay_us(600);
}

/* command bit 3 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_command |= 0b00000100;
_delay_us(600);
}

/* command bit 4 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_command |= 0b00001000;
_delay_us(600);
}

/* command bit 5 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_command |= 0b00010000;
_delay_us(600);
}

/* command bit 6 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_command |= 0b00100000;
_delay_us(600);
}

/* command bit 7 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_command |= 0b01000000;
_delay_us(600);
}

/* address bit 1 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_address |= 0b00000001;
_delay_us(600);
}

/* address bit 2 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_address |= 0b00000010;
_delay_us(600);
}

/* address bit 3 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_address |= 0b00000100;
_delay_us(600);
}

/* address bit 4 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_address |= 0b00001000;
_delay_us(600);
}

/* address bit 5 */
_delay_us(1200);
if( !(PIND & (1<<3)) )
{
byte_address |= 0b00010000;
_delay_us(600);
}

_delay_ms(18);

PORTA = byte_command; /* вывести байт комманды на порт A */

} /* закрывающая скобка бесконечного цикла */

return 0;

} /* закрывающая скобка основной программы */

Описание протокола http://www.sbprojects.com/knowledge/ir/sirc.htm
(Добавление)
alex91 пишет:
если отпустить светодиоды не гаснут
Правильно. Я в описании программы ошибся Замешательство
29. alex91 - 25 Сентября, 2010 - 14:05:18 - перейти к сообщению
последняя программа что-то вообще не работает
устройство вообще не реагирует на пульт SONY зато от моего пульта vesta реагирует но работает не понятно как

Может использовать другой способ управление роботом а не rc-5?
30. nest - 25 Сентября, 2010 - 16:16:18 - перейти к сообщению
alex91 пишет:
Может использовать другой способ управление роботом а не rc-5?
может.
написать свой кодер и декодер.

да хоть UART сделать на ИК-лучах. Кстати, неплохая идея, так как никаких програмных телодвижений, всё на аппаратном уровне. ... медленновато будет, но пару байтов переслать хватает.

alex91, у вас вообще что за комманды предпологаются?
типа "вперёд-назад-влево-вправо, включить фары" и тому подобное?

какую дальность вам необходимо?