Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/23: Рейтинг темы: голосов - 23, средняя оценка - 4.83
Fanrin
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 29
1

Работа с UART в МК ATMega8

01.10.2014, 18:55. Просмотров 4525. Ответов 12
Метки нет (Все метки)

Не хочет работать передача данных. Подключаю к ножкам PD0 и PD1 через USB/UART TTL конвертор CH340G.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
 
void main(void) {
 
    // USORT initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USORT Receiver: On
    // USORT Transmitter: On
    // USORT Mode: Asynchronous
    // USORT Baud Rate: 9600
    UCSRA = (0 << RXC) | (0 << TXC) | (0 << UDRE) | (0 << FE) | (0 << DOR) | (0 << UPE) | (0 << U2X) | (0 << MPCM);
    UCSRB = (0 << RXCIE) | (0 << TXCIE) | (0 << UDRIE) | (1 << RXEN) | (1 << TXEN) | (0 << UCSZ2) | (0 << RXB8) | (0 << TXB8);
    UCSRC = (1 << URSEL) | (0 << UMSEL) | (0 << UPM1) | (0 << UPM0) | (0 << USBS) | (1 << UCSZ1) | (1 << UCSZ0) | (0 << UCPOL);
    UBRRH = 0x00;
    UBRRL = 0x33;
 
    while(1) {
        putchar("G");
        delay_ms(1000);
    }
}
0
Миниатюры
Работа с UART в МК ATMega8  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2014, 18:55
Ответы с готовыми решениями:

Работа с UART ATMega8
к примеру надо отправить число 21367 в ком порт с атмеги8 чтобы потом на компе программой считать....

UART Atmega8 Terminal
Всем доброго времени суток! У меня есть код : #define F_CPU 8000000UL #include &lt;avr/io.h&gt;...

Передача по UART (ATMega8)
Доброго времени суток! Есть необходимость обработать передачу данных с помощью USORT через COM...

DS18B20->Atmega8->UART
Всем привет! Я ломаю голову над тем, как передавать температуру по UART, а именно как...

Приём данных по UART Atmega8
Доброго времени суток! Продолжаю постигать азы микроконтроллеров. В прошлой теме задавал, как уже...

12
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
01.10.2014, 19:09 2
...дрова же на USB конвертор стоят и виртуальный COM - COM5 у вас и TX/RX не попутали? А логические уровни на конверторе выставлены в 5 вольт? У вас мега8 указана, без L, у нее питание 4.5-5.5 вольт, а у адаптера есть и 3 и 5 вольтовые уровни.

Cоздайте мастером шаблонов работу с UART в CVAVR, работает с полпинка. Была бы приведена полная схема всех подключений, эти вопросы не задавались бы.

Не по теме:

p.s.: термит мне никогда не нравился, либо стандартным гипертерминалом, либо Accessport-ом, либо ComPort-Toolkit-ом смотрю.

0
Voland_
1696 / 1040 / 98
Регистрация: 04.01.2010
Сообщений: 3,525
01.10.2014, 20:17 3
Ставлю на то, что проблема в неправильном битрейте. ТС, вы точно подобрали UBRR/UBRL для частоты вашего контроллера? Поперебирайте скорости на стороне компьютера.
и еще putchar отправляет байт. То есть чтобы отправить именно G, нужно использовать одинарные кавычки.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
01.10.2014, 20:37 4
...при неправильном битрейте ловилось бы не то, но хоть что-то. Тут вообще ни слова. В этом случае от сниффера (PortMon, к примеру) или осцилла больше толка и наглядности, без привязки к настройкам порта.
1
Voland_
1696 / 1040 / 98
Регистрация: 04.01.2010
Сообщений: 3,525
01.10.2014, 20:44 5
Цитата Сообщение от raxp Посмотреть сообщение
...при неправильном битрейте ловилось бы не то, но хоть что-то.
В общем да. Особенно, если наблюдать из терминалки, выводящей хекс.
И кстати, ТС, я еще не увидел, что вы настраиваете ТХ как выход. Без инициализации ничего не получится.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
01.10.2014, 21:36 6
ТС, как МК тактируете тоже напишите.
0
Fanrin
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 29
01.10.2014, 22:02  [ТС] 7
Дрова стоят
Мега питается от программатора на 5в, на конвертор тоже выставлено 5в
Настройки как раз и созданы мастером
МК тактирую от внутренего генератора, 8мгц

Забавная штука была, когда прошивал МК на терминал приходило [00], щас такого уже нет

Добавлено через 40 секунд
Настроил как выход, все равно
C
1
DDRD = 0b00000010;
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
01.10.2014, 22:06 8
Схему давай, всех подключений.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
01.10.2014, 22:17 9
Лучший ответ Сообщение было отмечено Fanrin как решение

Решение

Не лучшие решение с UART работать с тактированием на 8мгц (ошибка 3,5%) плюс 1% самого осциллятора. СОМ порт РС может и не понять Вас. Для стандартной скорости передачи данных выбирайте кварц из ряда 1.8432 МГц, 3.6864 МГц, 7.3728 МГц, 11.0592 МГц, 14.7456 МГц.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
Частота 8Мгц внутренняя
*/
 
#include <avr/io.h>
#include <avr/interrupt.h>
 
 
#define FOSC 8000000L//Тактовая частота
#define BAUD 9600L //Скорость порта
#define MYUBRR FOSC/16/BAUD-1
 
 
void USORT_Transmit( unsigned char data );
void USORT_Init( unsigned int ubrr);
 
 
 
//Обработка прерывания чтения USORT
ISR(USORT_RXC_vect)
{
int b;
b = UDR;
USORT_Transmit(b);//Отправляем то, что получили
}
 
 
//Инициализация модуля USORT
void USORT_Init( unsigned int ubrr)
{
//Задаем скорость работы USORT
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
 
UCSRB=(1<<RXEN)|( 1<<TXEN); //разращён прием и передача
UCSRB |= (1<<RXCIE); //прерывание при чтении
 
//URSEL,UMSEL=0 асинхронный,UPM01=0 Parity нет, USBS=0 1 стоп бит,UCSZ012 = 3 8бит данных
 
UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);
 
 
}
 
 
//Функция отправки данных
void USORT_Transmit( unsigned char data )
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}
 
int main(void)
{
USORT_Init (MYUBRR);
sei();//разрешаем прерывания
 
while(1)//вечный цикл
{ }
}
2
Fanrin
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 29
01.10.2014, 22:37  [ТС] 10
Ух, кое-как запустил, теперь мне выдает вот что
0
Миниатюры
Работа с UART в МК ATMega8  
Fanrin
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 29
01.10.2014, 22:39  [ТС] 11
Я работаю в CVAVR
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
 
void main(void) {
    // USORT initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USORT Receiver: Off
    // USORT Transmitter: On
    // USORT Mode: Asynchronous
    // USORT Baud Rate: 9600
    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
 
    while(1) {
        putsf("Hello, world!"); 
        delay_ms(1000);
    }
}
0
Voland_
1696 / 1040 / 98
Регистрация: 04.01.2010
Сообщений: 3,525
01.10.2014, 23:07 12
Fanrin, а где UBRRH/UBRRL?
К тому же обратите внимание на фьюз DIV8. При его установке у вас будет частота 1МГц, а не 8МГц.
Цитата Сообщение от Витальич Посмотреть сообщение
СОМ порт РС может и не понять Вас
всего однажды случалось, что пришлось переставить скорость на единичку в сторону от величины указанной ДШ. В комнатных условиях все должно быть ОК. Проблемы будут только в крайних условиях температуры контроллера.
1
Fanrin
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 29
01.10.2014, 23:07  [ТС] 13
Все, разобрался, просто забыл про
UBRRH=0x00;
UBRRL=0x33;
1
01.10.2014, 23:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2014, 23:07

AtMega8, внешняя EEPROM и UART
Всем привет. Нумбский вопрос, я новичок. Думаю над новой разработкой. Нужно послушать шину...

Передать нажатия c TOUCH SCREEN по UART (ATMega8)
Всем привет. Необходимо реализовать возможность получения координат касания и передать по...

Сигнализация: UART на AtMega16 работает, на AtMega8 нет
Здравствуйте. Изучение микроконтроллеров начал с знаменитой сигнализации на AtTiny2313. Но там...


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

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

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