Любителям радеоуправляемых игрушек посвещается!

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Алексей, 5 янв 2012.

  1. Что нам надо:
    1) дуно железка думаю есть у всех,цена не интересует
    2) мотор шилд 690 руб
    3) Инфракраный приёмник TSOP22 40 руб

    Алгоритм:
    */
    #define F_CPU 16000000UL
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include <stdint.h>
    #include <stdio.h>

    #include <avr/eeprom.h>
    volatile unsigned char num = 0,nump = 0,nump_next = 0,nump_old =0,nump_next_old =0;
    volatile unsigned int arr[256];

    unsigned int arr_patterns[10][2] = {{0b00010100,0b00000010},{0b00010100,0b00000011},{0b00010100,0b00000001}};

    unsigned int time;
    char str[100];
    int adr = 0x0000;

    void SendByte(char byte)
    {
    while(!(UCSRA & (1<<UDRE)));
    UDR=byte;
    }

    void SendStr(char *string)
    {
    while (*string!='\0')
    {
    SendByte(*string);
    string++;
    }
    }

    ISR(USART_RXC_vect)
    {

    }

    ISR(USART_TXC_vect)
    {

    }

    ISR(INT0_vect){
    //num = 0;
    //PORTC |= _BV(PC1);
    }

    ISR(INT1_vect){

    TCCR1B = (0<<CS12)|(0<<CS11)|(0<<CS10);
    time = TCNT1;
    TCNT1 = 0;
    TCCR1B = (0<<CS12)|(1<<CS11)|(0<<CS10);
    arr[num] = time;
    num++;
    PORTC ^= _BV(PC0);

    }

    ISR (TIMER1_COMPA_vect)
    {
    TCCR1B = (0<<CS12)|(0<<CS11)|(0<<CS10)|(0<<WGM12); таймера СТС
    TCNT1=0x00;
    PORTC &= ~_BV(PC0);

    /*if(num != 0){

    SendStr(\"=== Start ===\n\r\");
    int i;
    for(i = 1; i<num;i++){
    //arr = arr/1.5;
    eeprom_write_word ((uint16_t*) adr, arr);
    adr++;
    //eeprom_write_byte ((unsigned char*) adr, ((unsigned int *)arr)[0]);
    adr++;
    sprintf(str,\"%u\n\r\",arr);
    SendStr(str);
    }
    SendStr(\"=== End ===\n\r\");
    }*/

    //num = 0;
    //num = 0;
    //int i;
    //for(i = 0; i<= 254; i++){
    // arr = 0;
    //}

    /*arr[0] = 0;
    arr[1] = 0;
    arr[2] = 0;*/
    //PORTC &= ~_BV(PC1);
    PORTC |= _BV(PC0);
    //num = 0;

    //PORTC ^= 1<<PC1;

    /*if (((PORTC&(1<<PC1))>>1)==1)
    {
    PORTC &= ~_BV(PC1);
    }else{
    PORTC |= _BV(PC1);
    }*/
    //led_2000_1();

    }

    int main(void)

    {

    #define XTAL 18000000L
    #define baudrate 9600L
    #define bauddivider (XTAL/(16*baudrate)-1)
    #define HI(x) ((x)>>16)
    #define LO(x) ((x)& 0xFF)

    UBRRL = LO(bauddivider);
    UBRRH = HI(bauddivider);
    UCSRA = 0;
    UCSRB = 1<<RXEN|1<<TXEN|1<<RXCIE|0<<TXCIE;
    UCSRC = 1<<URSEL|1<<UCSZ0|1<<UCSZ1;

    //

    DDRC |= _BV(PC4);
    DDRC |= _BV(PC3);
    DDRC |= _BV(PC2);
    DDRC |= _BV(PC0);
    DDRC |= _BV(PC1);
    PORTC |= _BV(PC0);

    //
    GICR |= ( 1 << INT1 );
    GICR |= ( 1 << INT0 );
    //DDRD &= ~_BV(DDD2);
    //PORTD |= _BV(PD2);
    DDRD &= ~_BV(DDD3);
    PORTD |= _BV(PD3);

    //Idle
    MCUCR |= 1<<SE| 0 << ISC11 | 1 << ISC10;
    //Stand by
    //MCUCR |= 1<<SM2|1<<SM1|0<<SM0|1<<SE;
    //Power-down
    //MCUCR |= 1<<SM1|1<<SE;

    //
    TCCR1A = 0x00;
    TCCR1B = (0<<CS12)|(0<<CS11)|(0<<CS10)|(0<<WGM12); таймера СТС
    TCNT1=0x00;
    //OCR1A=65535;
    TIMSK=(1<<OCIE1A);

    asm (\"sei\");

    while (1) {

    nump_old= nump = num-36;
    nump_next_old = nump_next = nump+1;
    unsigned int address = 0,command = 0;
    int i,j,res;
    res = -1;

    if(arr[nump]>7000 && arr[nump]<9000 && arr[nump_next]>3000 && arr[nump_next]<5000){

    //SendStr(\"Address\n\r\");
    for(j = 0;j<8;j++){
    nump = nump+2;
    nump_next = nump + 1;
    /*SendStr(\"Next byte\n\r\");
    sprintf(str,\"%u\n\r\",arr[nump]);
    SendStr(str);
    sprintf(str,\"%u\n\r\",arr[nump_next]);
    SendStr(str);*/
    if(arr[nump_next]>1400){
    //if(arr[nump+2]>300){
    address |= 1 << j;
    }
    }

    //sprintf(str,\"Address %u\n\r\",address);
    //SendStr(str);

    nump = nump+2;
    //SendStr(\"Command\n\r\");
    for(j = 0;j<8;j++){
    nump = nump+2;
    nump_next = nump + 1;
    /*SendStr(\"Next byte\n\r\");
    sprintf(str,\"%u\n\r\",arr[nump]);
    SendStr(str);
    sprintf(str,\"%u\n\r\",arr[nump_next]);
    SendStr(str);*/
    if(arr[nump_next]>1400){
    //if(arr[nump+2]>300){
    command |= 1 << j;
    }
    }

    //sprintf(str,\"Command %u\n\r\",command);
    //SendStr(str);

    //SendStr(\"Serching command.. .\n\r\");
    for(i = 0;i<=2;i++){

    if(arr_patterns[0] == address && arr_patterns[1] == command){
    res = command;
    //sprintf(str,\"num_next %u\n\r\",nump_next);
    //SendStr(str);
    arr[nump_old]=0;
    arr[nump_next_old]=0;
    //num = 0;
    break;
    }else{
    res = -1;
    }

    }

    if(res == 3){
    PORTC |= _BV(PC2);
    PORTC |= _BV(PC3);
    _delay_ms(500);
    PORTC &= ~_BV(PC2);
    PORTC &= ~_BV(PC3);
    }else if(res == 2){
    PORTC |= _BV(PC3);
    PORTC |= _BV(PC1);
    _delay_ms(500);
    PORTC &= ~_BV(PC1);
    PORTC &= ~_BV(PC3);
    }else if(res == 1){
    PORTC |= _BV(PC4);
    PORTC |= _BV(PC1);
    _delay_ms(500);
    PORTC &= ~_BV(PC1);
    PORTC &= ~_BV(PC4);
    }

    }
    //led_2000_1();
    //asm(\"sleep\");
    };
     
  2. ах да еще вам понадобится пульт от телевизора выглядит он приблизительно вот так кнопко нажималка.jpeg
     
  3. dethlex

    dethlex Нуб

    и как это запустить? =)
     
  4. вы в ide что ли пытаетесь запустить?:eek:
    Отвыт:
    1)управление по протоколу daewoo.
    2)надо программатор,что бы прошить дуньку.
     
  5. fox7812

    fox7812 Нерд

    Делал что-то такое, правда без шилда, просто на транзисторах:

     
  6. шилд это более компактное и эстетичное,чем транзисторы,но они роль играют одну и туже.если загуглить уже много подобного...под иде писали или еще что?
     
  7. andrewtkach

    andrewtkach Нуб

    Что-то не пойму совсем. Пульты как бы разные совсем бывают.
     
  8. Код (Text):
    Что нам надо:
    1) дуно железка думаю есть у всех,цена не интересует
    2) мотор шилд 690 руб
    3) Инфракраный приёмник TSOP22 40 руб
    А моторчик? А колёса?
     
  9. А догадаться,что нужна платформа не судьба?:cool:
     
  10. Код (Text):
        А догадаться,что нужна платформа не судьба?:cool:
     
     
    И так понятно :)
     
  11. так зачем такие вопросы задавать,если понятно?флуд?