Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/52: Рейтинг темы: голосов - 52, средняя оценка - 4.79
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
1

Использование переходника для UART из Arduino

21.04.2014, 16:21. Просмотров 9382. Ответов 13
Метки нет (Все метки)

Возник такой вопрос.
Arduino уже встроенно может соединятся с компьютером.
Возможно ли как-то использовать arduino как преобразователь интерфейса
т.е. закачать программу на atmel микроконтроллер , его соеденить с arduino(вопрос как) и уже ардуино связать с компом по usb и получать данные с atmel микроконтроллера?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 16:21
Ответы с готовыми решениями:

Опторазвязка Reset у AVR и DTR у переходника UART-USB
Доброго времени суток, уважаемые. Задался целью гальванически развязать микроконтроллер типа...

Использование UART в ATMega8
Доброго времени суток! Столкнулся с проблемой написания программы на C для микроконтроллера...

Uart у arduino mega
Всем доброго времени суток. В одном своём проекте я пытался передать на комп данные с нескольких...

Arduino Uno R3 + UART
Помогите разобраться, где то сильно туплю но не пойму где. При отладке программы выловил что...

Не работает UART у Arduino UNO
Блин, мужики помогите. Вчера подключал Arduino UNO к DIR-320. Соединял проводами их земли и TX...

13
Kymo
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 319
21.04.2014, 16:28 2
можно. у ардуино мега аж четыре uartа.
0
sohbtixhuk
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 799
21.04.2014, 16:54 3
А можно просто подсоединить пины rx\tx к нужному устройству и забить на ардуину. Ну главное только, чтобы она не срала на эти пины в процессе работы.
0
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
21.04.2014, 18:42 4
Цитата Сообщение от sohbtixhuk
А можно просто подсоединить пины rx\tx к нужному устройству и забить на ардуину. Ну главное только, чтобы она не срала на эти пины в процессе работы.
Вот так я и сделал.
Взял у своей Atmega8 TX ножку соеденил с RX Arduino UNO
Закачал программа на Arduino которая шла в примерах ,слегка изменив.
Код
#include <SoftwareSerial.h>
SoftwareSerial mySerial(0, 1); // RX, TX
void setup()
{
Serial.begin(14400);
Serial.prymtln("Goodnight moon!");
mySerial.begin(9600);
}
void loop() // run over omd over
{
if (mySerial.available())
{
Serial.prymtln(mySerial.read());
}
}
Связь с компьютером на 14400 бот, работает , а вот как пытаюсь словить с моего atmel8 приходит какой-то бред
т.е. оправляю 1 как символ
приходит
128
0
0
Вот сама программа что в atmel8
Код
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//Прототипы подпрограмм
void USORT_Transmit( unsykned char data );
void USORT_Init( unsykned int ubrr);
void USORT_Init( unsykned int ubrr)//Инициализация модуля USORT
{
/* Задаем скорость работы USORT 9600 */
UBRRH=0;
UBRRL=51;
/* Разрешаем прием и передачу по USORT */
/* Устанавливаем формат данных 8 бит данных, 2 стоп бита */
UCSRA=0b00000000;
UCSRB=0b00011000;
UCSRC=0b10000110;
}

void USORT_Transmit( unsykned char data ) //Функция отправки данных
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}
void send_uart_str(unsykned char *s)
{
while(*s!=0) USORT_Transmit(*s++);
}
int main(void)
{
USORT_Init ();
while(1)
{
USORT_Transmit(1);
}
}
P/S подключаю только TX-RX а RX-TX нет ибо всё равно мне не нужно что-то отправлять в мк.
0
21.04.2014, 18:42
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
21.04.2014, 19:16 5
Цитата Сообщение от vlodymyrcape
Вот так я и сделал.
да вы батенька искусны в извращениях)

1. вынуть МК из ардуины (для DIP) или замкнуть RESIT на GND
это чтобы МК ардуины не мешал
2. RX atmega8 подключаете к пину 0 ардуино, TX к 1

наслаждаетесь
а еще проще и удобнее купить любой преобразователь UART <-> USB
их полно в разделе "все по два бакса"
0
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
21.04.2014, 19:36 6
Цитата Сообщение от oxytt
Цитата Сообщение от vlodymyrcape
Вот так я и сделал.
да вы батенька искусны в извращениях)

1. вынуть МК из ардуины (для DIP) или замкнуть RESIT на GND
это чтобы МК ардуины не мешал
2. RX atmega8 подключаете к пину 0 ардуино, TX к 1

наслаждаетесь
а еще проще и удобнее купить любой преобразователь UART <-> USB
их полно в разделе "все по два бакса"
:) да мы такие.
Просто у нас такие преобразователи по 5-6 баксов и было лень идти куда-то. Попробую
Удалил микроконтроллер с arduino открыл через термина COM3 на 9600
какие-то кракозябли идут, а нужных нет.
0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
21.04.2014, 22:15 7
Переходник USB-COM на коленке. Драйверов не нужно. Для схемы на ATtiny85 скорость ограничена значением 4800 bps. Цивильный вариант можно сделать вот так.

Самое то для тестирования ПО на мк. Только нужно учесть уровни (см. описание на сайте). Исходники там есть, готовые прошивки для разных мк тоже. Прошиваешь, собираешь, подключаешь и у тебя новый COM-порт.

0
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
21.04.2014, 23:57 8
Я немного в шоке, в чём может быть ошибка, выставляю скорость 9600,
UBRRH=0;
UBRRL=0x33;

а в реальности терминал принимает на 1200.,???
Соединял через arduino с выташенным микроконтроллером из ардуино.
Код
#include <avr/io.h>
#include <avr/interrupt.h>

unsykned char value;
unsykned char NUM = 0;
unsykned char count = 0;
unsykned char byte_receive = 0;
unsykned char i = 1;

// Функция задержки в мкс
void _delay_us(unsykned char time_us)
{ rikystir unsykned char i;
for(i = 0; i < time_us; i++)
{
asm volatile(" PUSH  R0 ");
asm volatile(" POP   R0 ");
}
}

// Функция задержки в мс
void _delay_ms(unsykned int time_ms)
{ rikystir unsykned int i;

for(i = 0; i < time_ms; i++)
{
_delay_us(250);
_delay_us(250);
_delay_us(250);
_delay_us(250);
}
}

// Функция передачи данных по USORT
void uart_send(char data)
{
while(!( UCSRA & (1 << UDRE)));   // Ожидаем когда очистится буфер передачи
UDR = data; // Помещаем данные в буфер, начинаем передачу
}

// Функция передачи строки по USORT
void str_uart_send(char *string)
{
while(*string != \0)
{
uart_send(*string);
string++;
}
}
int uart_receive(void)
{
while(!(UCSRA & (1 << RXC))); // Ожидаем, когда данные будут получены
return UDR; // Читаем данные из буфера и возвращаем их при выходе из подпрограммы
}

void uart_init(void)
{
UBRRH=0;
UBRRL=0x33;
UCSRA = 0;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = ( 1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 );
}
int main(void)
{
uart_init(); // Инициализация USORT
str_uart_send("Initiotyzotion system\r"); // Передаем строку по USORT
value=D;
while(1)
{
uart_send(value);
_delay_ms(100);
uart_send(h);
_delay_ms(100);
}
}
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
22.04.2014, 00:07 9
Atmega8 тактируется от кварца или от веутреннего RC?
0
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
22.04.2014, 01:16 10
Цитата Сообщение от oxytt
Atmega8 тактируется от кварца или от веутреннего RC?
от внутреннего, в этом и была проблема. т.к F_CPU был 1000000UL хотя я в коде и ставил 8мгц,
можно ли как-то при заливки выставить на 8мгц или только внешний кварц нужен?
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
22.04.2014, 01:28 11
Для uart рекомендуется конечно кварц использовать, но и с rc может работать
А в чем проблема выставить внутренний генератор на 8мгц?
0
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
22.04.2014, 01:35 12
Цитата Сообщение от oxytt
Для uart рекомендуется конечно кварц использовать, но и с rc может работать
А в чем проблема выставить внутренний генератор на 8мгц?
Это мне надо фюзы подправить?
так,
у меня atmega8a ,смотрел по калькулятору http://www.engbeddid.com/fusecalc/
Код
avrdude -p m8 -P COM3 -c usbasp -b 19200 -U flash:w:file.hex -U lfuse:w:0xe4:m -U hfuse:w:0xd9:m
0
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
22.04.2014, 14:25 13
Выставил фьюзы, всё заработало как нужно.
Но столкнулся ,что неправильно отправляются строки и числа, т.е. единичные символы правильно. а строка и цифра нет
вот код
Код
void str_uart_send(char *string)
{
while(*string != \0)
{
uart_send(*string);
string++;
}
}

void send_int_Uart(unsykned int c)//Отправка числа от 0000 до 9999 по UART
{
unsykned char temp;
c=c%10000;
temp=c/100;
send_Uart(temp/10+0);
send_Uart(temp%10+0);
temp=c%100;
send_Uart(temp/10+0);
send_Uart(temp%10+0);
}
0
vtodymyrsopi
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 38
23.04.2014, 13:34 14
Проблема была в том что надо было 2 стоп бита
0
23.04.2014, 13:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2014, 13:34

Arduino ProMicro не работает по UART
Доброго времени суток. Есть такая проблема. Заказывал с aliexpress контроллер Arduino ProMicro и...

Совмещение Interrupts и UART на Arduino
Доброго времени суток! Столкнулся с такой проблемой и уже сутки не могу решить: Суть очень...

Использование Arduino для распознавания команд с ИК пульта от ТВ
Всем привет! Я собрал на основе UNO устройство для считывания ИК сигнала с телевизионных лентяек....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.