سلام دوستان . :applause: 
من برای ره اندازی ریموت لرن فرکانس 433 ماژولهای ask استفاده کردم.
برنامه توسط تایمر 1 ای وی ار 32 آ.ابتدا بیتهای premble رو چک میکنه در صورت درست بودن نسبت صفر به یک وارد مد دیگه میشه که تو اون مد یک و صفر ریموت رو چک میکنه.و 24 بیت بعد که شامل کد مخصوص ریموت و دیتای مربوطه هست رو بدست می آره و میریزه توی متغیر code.
من برنامه رو برای 16 بیت اول جهت رفع اشکال گذاشتم براتون. این برنامه رو بستم و کار میکنه در عمل .مشکل اینه که وقتی ریموت رو فشار میدم و بعد ولتاژ مدار رو وصل میکنم برنامه تشخیص میده که اون دیتای مورد نظر من رسیده(متغیر Ref 16 بیت اول ریموت منه که تعریف کردم) یعنی بار اول که میکرو روشن میشه ریموت رو میشناسه و روی ال سی دی نشون میده که ریموت رو تشخیص داده اما بعد که دستم رو از روی ریموت بر میدارم.و برای بار بعد فشار میدم دیگه مثل همون بار اول تازه میکرو روشن شده بود تشخیص نمیده.
و مثلا بین 5 تا 9 بار باس فشار بدی ریموت رو و نگه داری تا بخونه و تشخیص بده.
به نظرتون مشکل کجاس؟
{
ال سی دی کاراکتری به پورت A طبق تنظیمات کد ویزارد
دیتای ماژول گیرنده با مقاومت پول پ به اینتراپت 0.
و یک کلید همینجوری با :biggrin: پول پ به پورت b.0 با فشار دادن این پایه صفر میشه.
فرکانس کاری میکرو 8 مگاهرتز و کلاک تایمر 1مگاهرتز.
}
[hr]
[code=c][code=c][/][/#include <mega32a.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
// Declare your global variables here
unsigned int H1=0,L1=0xFFFE,H2=0,L2=0xFFFE;
bit m=0,read=0,mode=0,r=0;
unsigned short code[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned short ref[16]={1,0,0,0,0,0,1,0,1,0,0,0,1,0,0};
unsigned short i=0,j=0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(m==0){
if(mode==0){
L1=TCNT1-H1;}
else if(mode==1){
L2=TCNT1-H2;
read=1;}
TCNT1=0;
MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
m=1;}
else if(m==1){
if(mode==0){
H1=TCNT1;}
else if(mode==1){
H2=TCNT1;
read=0;}
MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
m=0;}
if(read==1){
if(((H2/L2)<=5)&&((H2/L2)>=2)){r=1;}
else if(((L2/H2)<=5)&&((L2/H2)>=2)){r=0;}
if(i<16){
code[i]=r;
i++;}}
}
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
TCNT1=0;
}
void main(void)
{
// Declare your local variables here
char number[];
unsigned short tru=0;
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(1<<DDD7) | (1<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 65.536 ms
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: Off
// INT2: Off
GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
MCUCSR=(0<<ISC2);
GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);
// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);
// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei"
while (1)
{
// Place your code here
if(((L1/H1)<=36)&&((L1/H1)>=27) && mode==0){
mode=1;
i=0;
}
if(i==16){
tru=0;
#asm("cli"
for(j=0;j<16;j++)
{
if(code[j]==ref[j]){tru++;}
lcd_gotoxy(j,0);
sprintf(number,"%d",code[j]);
lcd_puts(number);
}
if(tru==15){lcd_gotoxy(0,1);
lcd_putsf("ok"
;
PORTD.6=1;
}
i=0;
mode=0;
delay_ms(2000);
PORTD.6=0;
lcd_clear();
m=0;
H1=0;
L1=0xFFFE;
H2=0;
L2=0xFFFE;
#asm("sei"
}
if(PINB.0==0){
lcd_clear();
H1=0;
L1=0xFFFE;
H2=0;
L2=0xFFFE;
mode=0;
for(i=1;i<16;i++){code[i]=0;
}i=0;
//#asm("sei"
}
}}][/code]
:job:

من برای ره اندازی ریموت لرن فرکانس 433 ماژولهای ask استفاده کردم.
برنامه توسط تایمر 1 ای وی ار 32 آ.ابتدا بیتهای premble رو چک میکنه در صورت درست بودن نسبت صفر به یک وارد مد دیگه میشه که تو اون مد یک و صفر ریموت رو چک میکنه.و 24 بیت بعد که شامل کد مخصوص ریموت و دیتای مربوطه هست رو بدست می آره و میریزه توی متغیر code.
من برنامه رو برای 16 بیت اول جهت رفع اشکال گذاشتم براتون. این برنامه رو بستم و کار میکنه در عمل .مشکل اینه که وقتی ریموت رو فشار میدم و بعد ولتاژ مدار رو وصل میکنم برنامه تشخیص میده که اون دیتای مورد نظر من رسیده(متغیر Ref 16 بیت اول ریموت منه که تعریف کردم) یعنی بار اول که میکرو روشن میشه ریموت رو میشناسه و روی ال سی دی نشون میده که ریموت رو تشخیص داده اما بعد که دستم رو از روی ریموت بر میدارم.و برای بار بعد فشار میدم دیگه مثل همون بار اول تازه میکرو روشن شده بود تشخیص نمیده.
و مثلا بین 5 تا 9 بار باس فشار بدی ریموت رو و نگه داری تا بخونه و تشخیص بده.
به نظرتون مشکل کجاس؟
{
ال سی دی کاراکتری به پورت A طبق تنظیمات کد ویزارد
دیتای ماژول گیرنده با مقاومت پول پ به اینتراپت 0.
و یک کلید همینجوری با :biggrin: پول پ به پورت b.0 با فشار دادن این پایه صفر میشه.
فرکانس کاری میکرو 8 مگاهرتز و کلاک تایمر 1مگاهرتز.
}
[hr]
[code=c][code=c][/][/#include <mega32a.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
// Declare your global variables here
unsigned int H1=0,L1=0xFFFE,H2=0,L2=0xFFFE;
bit m=0,read=0,mode=0,r=0;
unsigned short code[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned short ref[16]={1,0,0,0,0,0,1,0,1,0,0,0,1,0,0};
unsigned short i=0,j=0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(m==0){
if(mode==0){
L1=TCNT1-H1;}
else if(mode==1){
L2=TCNT1-H2;
read=1;}
TCNT1=0;
MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
m=1;}
else if(m==1){
if(mode==0){
H1=TCNT1;}
else if(mode==1){
H2=TCNT1;
read=0;}
MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
m=0;}
if(read==1){
if(((H2/L2)<=5)&&((H2/L2)>=2)){r=1;}
else if(((L2/H2)<=5)&&((L2/H2)>=2)){r=0;}
if(i<16){
code[i]=r;
i++;}}
}
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
TCNT1=0;
}
void main(void)
{
// Declare your local variables here
char number[];
unsigned short tru=0;
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(1<<DDD7) | (1<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 65.536 ms
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: Off
// INT2: Off
GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
MCUCSR=(0<<ISC2);
GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);
// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);
// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei"

while (1)
{
// Place your code here
if(((L1/H1)<=36)&&((L1/H1)>=27) && mode==0){
mode=1;
i=0;
}
if(i==16){
tru=0;
#asm("cli"

for(j=0;j<16;j++)
{
if(code[j]==ref[j]){tru++;}
lcd_gotoxy(j,0);
sprintf(number,"%d",code[j]);
lcd_puts(number);
}
if(tru==15){lcd_gotoxy(0,1);
lcd_putsf("ok"

PORTD.6=1;
}
i=0;
mode=0;
delay_ms(2000);
PORTD.6=0;
lcd_clear();
m=0;
H1=0;
L1=0xFFFE;
H2=0;
L2=0xFFFE;
#asm("sei"

if(PINB.0==0){
lcd_clear();
H1=0;
L1=0xFFFE;
H2=0;
L2=0xFFFE;
mode=0;
for(i=1;i<16;i++){code[i]=0;
}i=0;
//#asm("sei"

}
}}][/code]
:job: