передача и прием по rs232 atmega

Тема в разделе "Микроконтроллеры AVR", создана пользователем Yerabdi, 5 май 2018.

  1. Yerabdi

    Yerabdi Гик

    Здравствуйте всем хотел бы узнать как можно передавать данные по rs232. В наличии есть атмега328 и usb to TTL, в инете не нашел код для аврстудио самому писать опыта не хватает
     
  2. ostrov

    ostrov Гуру

  3. Daniil

    Daniil Гуру

    RS232 и UART по сути один и тот же протокол, отличаются их интерфейсы (электрические параметры), для исправления используют конвертеры интерфейсов:
    max232 - UART-RS232
    ft232 - UART - USB (на пк драйвером эмулируется rs232), его "+" в том, что нужен разъём USB, а не DB-9.

    Для написания программы рекомендую взять ардуинку или курить даташиты.
     
  4. Airbus

    Airbus Радиохулиган Модератор

  5. ostrov

    ostrov Гуру

    Я думаю вопрос не в этом, а как соединить Ардуину со старым ПК у которого USB нет. Иначе непонятно зачем эти страдания.
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Я тоже не совсем понял что Аффтар хочет.А соединить его через СОМ порт ещё проще чем через USB. MAX232 наше фсё!Можно и на Кт-315
     
  7. ostrov

    ostrov Гуру

    RS-485 уважаю.

    А для таких авторов давно пора на форуме скинуться и завести вот такого сотрудника:
    [​IMG]
     
  8. Yerabdi

    Yerabdi Гик

    Спасибо за отзыв чтобы понять протокол rs485 модбас, для начала хотел изучит протокол по rs232. Только потом изучать rs485 модбас
     
  9. ostrov

    ostrov Гуру

    У аас все перепуталось. RS485 как и RS232 это не протоколы а физические способы передачи сигнала. Протокол при этом может быть какой угодно и где угодно. У меня сети на своем собственном протоколе замечательно работают годами как на 485, так и на прямой связи rx-tx и на беспроводных устройствах, лишь бы данные уходили и приходили.
     
  10. Yerabdi

    Yerabdi Гик

    Пробовал отправлять данные через каждый 10 секунд, в терминале вижу отправленные данные.
    Код (C++):
    #include <avr/io.h>
    #include <avr/interrupt.h>
    unsigned char ubrr=103;//usart частота микроконтроллера 16МГЦ
    volatile unsigned int ACP,value,map,ob2=0,Temp,zn_adc;
    volatile unsigned int usart_zn;
    volatile unsigned int T,ob,a,b,c,d,e,ust,gist,temper;
    volatile unsigned char ch=0,sel_adc,zn_acp,zn_temp,acp2,oborot,correct,correct2;
    volatile unsigned int ar[10];
    volatile unsigned int pereshet=525,q2,q3;
    //***********************
    ISR (USART_UDRE_vect)
    {   UDR0 = zn_adc;
        UCSR0B &=~(1<<UDRIE0);
    }
    //*********************      
    int main(void)
    {     //********usart*************
        UBRR0H = (unsigned char)(ubrr>>8);
        UBRR0L = (unsigned char)ubrr;
        UCSR0B =(1<< RXEN0) //разрешаем прием
        |(1<< TXEN0 );//разрешаем передачу
        UCSR0C = (1<<USBS0)|(1<<UCSZ00)|(1<<UCSZ01);
        UCSR0B |=(1<<UDRIE0);
        //*********************
        asm("sei");
        while(1)
        {
           usart_zn = usart_1();
     
        }
    }

    //**************
    int usart_1 ()
    {
         static char danie1,t_zad,permass;      
         if ((T <  10)&&(danie1 == 0))
         { zn_adc=5;
        UCSR0B |=(1<<UDRIE0);//регистр данных чист
         danie1=1;
             }
        if ((T == 20)&&(danie1 == 1))
         { zn_adc=7;
        UCSR0B |=(1<<UDRIE0);//регистр данных чист
         danie1=0;
         T=0;
         }
       
    }



     
     
  11. Airbus

    Airbus Радиохулиган Модератор

  12. Yerabdi

    Yerabdi Гик

    Всем спасибо разобрался как работает