اطلاعیه

Collapse
No announcement yet.

راهنمایی در مورد مدار لرن کد

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راهنمایی در مورد مدار لرن کد

    با سلام
    یک مدار خریدم در مورد سیستم ریموت کنترل رادیویی به صورت لرن کد هست !!! با توجه به اینکه این سیستم ها کد فیکس نیستند و با برنامه نویسی الگوریتم خاص خوداش نوشته شده است ! پیچیده هستند !!! من میخواستم یک بازر به خروجی اضافه کنم که قبل از رله 1 ثانیه بوق بزند !!!به عنوان هشدار دهنده!!
    یک تغییراتی دادم ولی جواب نداد !! لطفا هرکی بلد هست راهنمایی کند!

    تغییرات من:
    [code=c]
    void key_press (void)
    {
    TCCR2=TCCR2 & 0B11111110;
    if (data[20]==1){
    buzzer = 1;
    delay_ms(1000);
    buzzer = 0;
    relay1=!relay1;
    delay_ms(200);
    //relay1=0;
    }
    else if (data[21]==1){
    buzzer = 1;
    delay_ms(1000);
    buzzer = 0;
    relay2=!relay2;
    delay_ms(200);
    //relay2=0;
    }
    else if (data[22]==1){
    buzzer = 1;
    delay_ms(1000);
    buzzer = 0;
    relay3=!relay3;
    delay_ms(200);
    //relay3=0;
    }
    else if (data[23]==1){
    buzzer = 1;
    delay_ms(1000);
    buzzer = 0;
    relay4=!relay4;
    delay_ms(200);
    //relay4=0;
    };
    //TCCR2=TCCR2 | 0B0000001;


    }

    [/code]

    کد اصلی برنامه:
    [code=c]
    /************************************************** *****
    This program was created by the
    CodeWizardAVR V3.12 Advanced
    Automatic Program Generator


    Project : learning remut Decoder
    Version : 5
    Comments: this is a learning project about deoding ASk learning remut
    Chip type : ATmega8
    Program type : Application
    AVR Core Clock frequency: 8/000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    ************************************************** *****/

    #include <mega8.h>
    #include <delay.h>
    #include <io.h>

    // Declare your global variables here
    bit change1 , change0 , start , save_remut , read_remut , error;
    char eeprom remut [10][21];
    char temp_remut [10][21];
    char data[24];
    char i , j , n;
    unsigned int dataH , dataL , H , L , number_remut ;

    #define RF PIND.0
    #define save_key PINB.0
    #define delet1_key PIND.7
    #define delet_key PIND.6
    #define save_led PORTC.0
    #define delet_led PORTC.1
    #define delet1_led PORTC.2
    #define relay1 PORTB.1
    #define relay2 PORTB.2
    #define relay3 PORTB.3
    #define relay4 PORTB.4
    //#define buzzer PORTC.3


    void read (void)
    {
    TCCR2=TCCR2 & 0B11111110;
    read_remut=0;
    dataH=0;
    dataL=0;
    start=0;
    TCNT2=0;
    TCCR2=TCCR2 | 0B0000001;
    while (read_remut==0);
    TCCR2=TCCR2 & 0B11111110;
    }

    int check (void)
    {
    char d=0;
    TCCR2=TCCR2 & 0B11111110;
    for (i=0 ; i<10 ; i++)
    {
    if (remut[i][0]==1){
    for(j=1 ; j<21 ; j++)
    {
    if (temp_remut[i][j]==data[j-1])
    d++;
    }
    if (d==20)
    {
    number_remut=i;
    i=10;
    d=0;
    return 1;
    }
    d=0;
    }
    }
    return 0;
    //TCCR2=TCCR2 | 0B0000001;
    }

    void delet (void)
    {
    delet_led=1;
    TCCR2=TCCR2 & 0B11111110;
    for (i=0 ; i<9 ; i++) {
    temp_remut[i][0]=0;
    remut[i][0]=0;
    delay_ms(10);
    }
    delay_ms(500);
    delet_led=0;
    }

    void delet1 (void)
    {
    delet1_led=1;
    read();
    if (check()==1)
    {
    temp_remut[number_remut][0]=0;
    remut[number_remut][0]=0;
    }
    delay_ms(300);
    delet1_led=0;
    }


    void key_press (void)
    {
    TCCR2=TCCR2 & 0B11111110;
    if (data[20]==1){
    relay1=!relay1;
    delay_ms(200);
    //relay1=0;
    }
    else if (data[21]==1){
    relay2=!relay2;
    delay_ms(200);
    //relay2=0;
    }
    else if (data[22]==1){
    relay3=!relay3;
    delay_ms(200);
    //relay3=0;
    }
    else if (data[23]==1){
    relay4=!relay4;
    delay_ms(200);
    //relay4=0;
    };
    //TCCR2=TCCR2 | 0B0000001;


    }

    void save (void)
    {
    read();
    if (check()==0)
    {
    save_remut=0;
    save_led=1;
    for (i=0 ; i<=9 ; i++)
    {
    if (temp_remut[i][0]==0)
    {
    for (j=1 ; j<=20 ; j++)
    {
    temp_remut[i][j]=data[j-1];
    remut[i][j]=data[j-1];
    delay_ms(10);
    }
    temp_remut[i][0]=1;
    remut[i][0]=1;
    i=10;
    save_remut=1;
    }
    }
    if (save_remut) {
    save_led=0;
    }
    else
    {
    save_led=1;
    delay_ms(250);
    save_led=0;
    delay_ms(250);
    save_led=1;
    delay_ms(250);
    save_led=0;
    delay_ms(250);
    save_led=1;
    delay_ms(250);
    save_led=0;
    }
    }
    else
    {
    save_led=1;
    delay_ms(500);
    save_led=0;
    delay_ms(500);
    save_led=1;
    delay_ms(500);
    save_led=0;
    delay_ms(500);
    save_led=1;
    delay_ms(500);
    save_led=0;
    }
    }


    // Timer2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    // Reinitialize Timer2 value
    TCNT2=0xD8;
    // Place your code here
    if (RF) {
    if (change1) {
    ++dataH;
    }
    if (change0) {
    H=dataH;
    dataH=1;
    L=dataL;
    dataL=0;
    if (start){
    if (error==1)
    {
    error=0;
    start=0;
    i=0;
    }
    if (H>L)
    {
    n=H/L;
    if (n>1 && n<6)
    {
    data[i]=1;
    i++;
    }
    else
    {
    error=1;
    }
    if (i>23)
    {
    i=0;
    start=0;
    read_remut=1;
    }
    }
    if (L>H)
    {
    n=L/H;
    if (n>1 && n<6)
    {
    data[i]=0;
    i++;
    }
    else
    {
    error=1;
    }
    if (i>23)
    {
    i=0;
    start=0;
    read_remut=1;
    }
    }
    }
    else if (L>H) {
    n=L/H;
    if (n>18 && n<40)
    {
    start=1;
    i=0;
    }
    }
    }
    change1=1;
    change0=0;
    }
    if (RF==0) {
    if (change0) {
    dataL++;
    }
    if (change1) {
    dataL=1;
    }
    change0 = 1;
    change1 = 0;
    }

    }

    void main(void)
    {
    // Declare your local variables here


    {
    // Input/Output Ports initialization
    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=In
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (0<<DDB0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=P
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (1<<PORTB0);

    // Port C initialization
    // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
    DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
    // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
    PORTC=(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=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=T Bit2=T Bit1=T Bit0=P
    PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (1<<PORTD0);

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Disconnected
    // OC1B output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // 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) | (0<<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: 8000/000 kHz
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    // Timer Period: 5 us
    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (1<<CS20);
    TCNT2=0xD8;
    OCR2=0x00;

    //تایمر 2 را متوقف میکنیم
    TCCR2=TCCR2 & 0B11111110;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (1<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

    // 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<<ADFR) | (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);

    // Global enable interrupts
    #asm("sei&quot
    }


    if (delet_key==0)
    {
    delet();
    }


    for (i=0;i<9;i++) {
    for (j=0;j<21;j++) {
    temp_remut[i][j]=remut[i][j];
    delay_ms(10);
    };
    };


    while (1)
    {
    // Place your code here
    read();
    if (check()==1)
    {
    key_press();
    }
    if (save_key==0)
    {
    save();
    }
    if (delet_key==0)
    {
    delet();
    }
    if (delet1_key==0)
    {
    delet1();
    }

    }
    }


    [/code]
    سپاس
لطفا صبر کنید...
X