Всем привет! помогите пожалуйста, вот написал протокол для пульта 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(); }
};
}