реклама на сайте
подробности

 
 
> IR NEC protocol для ATmega88, нормально не работает :(
VAHOO
сообщение Mar 28 2008, 11:15
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



Всем привет! помогите пожалуйста, вот написал протокол для пульта NEC,
но непонятно работает, оригинал пульт у меня есть, сначало TSOP1736
подключил к саунд карту и на sound forge 7.0 считал импулси и написал
протокол, но когда на mega88 припаю инфракрас. диод и счытиваю на
sound forge 7.0, незнаю что получается, вот код, но очень строго не судите

/*****************************************************
Chip type : ATmega88
Clock frequency : 1,000000 MHz
*****************************************************/

#include <mega88.h>

unsigned int count=0,k=0;
unsigned char ac = 0x00, address = 0x00;
signed int i=0;
/* commands */
unsigned char playkey = 0x42;
/*
PORTB.0 OUT impuls
PORTB.1 button
address = 0b00000000
invers address = 0b11111111
commands play = 0b01000010
invers commands play = 0b10111101
*/

void one();
void zero();
void header();
void paket();
void play();

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xBA; // 560 mks ïðåðûâàíèå
count++;

}
void one() // visoki uroven

{

TIMSK0=0x01;
count = 0;
PORTB.0 = 0;
TCNT0=0xBA;

while (1) // 560mks

{ if(count == 1) break; };

PORTB.0 = 1;
count = 0;
TCNT0=0xBA;
while (1){ if(count == 3) break; }; // 2250 - 560 = 1690mks

TIMSK0=0x00;

}

void zero() // nizki uroven

{

TIMSK0=0x01;
count = 0;
PORTB.0 = 0;
TCNT0=0xBA;
while (1) { if(count == 1) break; }; // 560mks

PORTB.0 = 1;
count = 0;
TCNT0=0xBA;
while (1) { if(count == 1) break; }; // 560mks
TIMSK0=0x00;
}

void header()

{

count = 0;
PORTB.0 = 1;
TIMSK0=0x01;
TCNT0=0xBA;

while (1) { if (count == 16) break; }; // 9000 mks = 16 X 560

PORTB.0 = 0;
count = 0;
TCNT0=0xBA;

while (1) { if (count == 8) break; }; // 4500 mks = 8 X 560

TIMSK0=0x00;

}

void paket()

{

for (i = 7; i>-1; i--) // ðàçðàáîòàåò 8 áèò

{
k = (ac >> i) & 1;

if (k == 1)
{

one();

}

if (k == 0)
{

zero();

}
}
}


void play()

{ header();
ac = address;
paket();
ac = ~address;
paket();
ac = playkey;
paket();
ac = ~playkey;
paket(); }

void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTB=0x00;
DDRB=0x01;

TCCR0A=0x00;
TCCR0B=0x02; // cpu div 8
TCNT0=0xBA;

ACSR=0x80;
ADCSRB=0x00;

#asm("sei")

PORTB.0 = 0;
PORTB.1 = 1;

while (1)
{

PINB.1 = 1;

if (PINB.1 == 0 )

{ play(); }

};
}
Прикрепленные файлы
Прикрепленный файл  NEC_protocol.rar ( 27.31 килобайт ) Кол-во скачиваний: 39
 


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AST
сообщение Mar 29 2008, 05:21
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 5-04-06
Из: Penza
Пользователь №: 15 852



Цитата(VAHOO @ Mar 28 2008, 14:15) *
Всем привет! помогите пожалуйста, вот написал протокол для пульта NEC,
но непонятно работает, оригинал пульт у меня есть, сначало TSOP1736
подключил к саунд карту и на sound forge 7.0 считал импулси и написал
протокол, но когда на mega88 припаю инфракрас. диод и счытиваю на
sound forge 7.0, незнаю что получается, вот код, но очень строго не судите

Если Вы хотите сделать свой пульт, то знайте, при передаче по ИК-каналу 0 и 1 передаются не просто выключенным или включенным ИК-диодом, а модулируется этими самими 0 и 1 несущая частота 30 - 40 кГц. То что Вы видете на выходе TSOP1736 это уже демодулированный сигнал. Посмотрите в сети информацию по работе пультов ИК.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016