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

прием байта с UART ATtiny2313

04.06.2016, 21:39. Просмотров 1218. Ответов 12
Метки нет (Все метки)

Делаю вот что:
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
#define F_CPU 8000000UL 
#include <avr/io.h>
#define baud 51 // параметр скорости UART, 9600 бод
 
int main(void)
{
DDRB= 0xFF;     // работа порта B на выход
PORTB= 0x00;    // установка порта B в ноль
DDRD= 0x00;     // работа порта D на вход
 
 
UBRRH = (unsigned char)(baud>>8); // установка скорости
UBRRL = (unsigned char)baud;
UCSRB = 1<<RXEN;            // разрешение приема
UCSRC = (1<<USBS)|(3<<UCSZ0); // байт = 8 бит данных, 2 стоп-бита
 
 
unsigned char one; 
 
 
while(1)
{
 
 
    while ( !(UCSRA & (1<<RXC)) ); // ожидание приема байта
        {
        one = UDR;  // запись принятого байта
 
            PORTB = 0b11111111 ; 
 
        }
    }
}
По задумке переданный через ком-порт байт записывается в переменную one, при этом на портБ вывожу 1, чтобы определить что цикл отработал. Эмулирую в протеусе, передаю байт (9600бод, 2 стопбита без парити бита) через виртуальный ком-порт. Порт мигает, байт идет(проверял осциллом), но МК не отрабатывает, подскажите, в чем тут ошибка? Соединяю RxD кома и TxD ATtiny2313.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2016, 21:39
Ответы с готовыми решениями:

UART на ATtiny2313
Сейчас начинаю работать с UART и RS-485. Нужно-ли как-то настраивать Выходы PD0 и PD1 (RXD и TXD...

ATtiny2313: UART + 1wire
Здравствуйте. Делаю термостат на ATtiny2313 и ds18b20. Для связи с устройством используется UART....

Attiny2313 USB-UART
ПОМОГИТЕ! Простейшее устройство, а я всё никак не разберусь. Решил собрать преобразователь...

ATtiny2313 + UART + симуляция в Proteus
Приветствую. Прошу помочь с локализацией проблемы отладки проекта. Проект такой: управление...

Переходник Usb -> Uart На AtTiny2313
Приветствую всех. Решил для своих радиолюбительских нужд собрать переходник из этой статьи. В...

12
ValeryS
Модератор
7823 / 5822 / 758
Регистрация: 14.02.2011
Сообщений: 19,963
Завершенные тесты: 1
04.06.2016, 21:46 2
Цитата Сообщение от gb_ Посмотреть сообщение
TxD ATtiny2313.
это ножка для передачи, для приема существует нога RX
1
gb_
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
04.06.2016, 21:47  [ТС] 3
Нужно соединить Rx ком-порта и Rx аттини? О_о
0
ValeryS
Модератор
7823 / 5822 / 758
Регистрация: 14.02.2011
Сообщений: 19,963
Завершенные тесты: 1
04.06.2016, 21:48 4
Цитата Сообщение от gb_ Посмотреть сообщение
C
1
2
3
4
5
while ( !(UCSRA & (1<<RXC)) ); // ожидание приема байта
 {
one = UDR; // запись принятого байта
PORTB = 0b11111111 ; 
}
это чтобы и себя и других запутать?
зачем здесь фигурные скобки? чтобы принять эти строки за тело цикла?
1
04.06.2016, 21:48
gb_
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
04.06.2016, 21:50  [ТС] 5
ну да, тело цикла, как только приходят стоп-биты - в переменную пишется регистр UDR(в котором пришедший байт) и для проверки отработки цикла зажигается портБ в 1
0
ValeryS
Модератор
7823 / 5822 / 758
Регистрация: 14.02.2011
Сообщений: 19,963
Завершенные тесты: 1
04.06.2016, 21:50 6
Цитата Сообщение от gb_ Посмотреть сообщение
Нужно соединить Rx ком-порта и Rx аттини? О_о
TX для передачи RX для приема
следовательно TX компа и RX мелкосхемы
1
gb_
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
04.06.2016, 21:52  [ТС] 7
Tx ком-порта компа соединяется с Rx второго виртуального ком-порта протеуса, от которого идет на микруху, понял) значит в протеусе Rx в Rx получится. Но все равно не хочет работать.
0
ValeryS
Модератор
7823 / 5822 / 758
Регистрация: 14.02.2011
Сообщений: 19,963
Завершенные тесты: 1
04.06.2016, 21:53 8
Лучший ответ Сообщение было отмечено gb_ как решение

Решение

Цитата Сообщение от gb_ Посмотреть сообщение
ну да, тело цикла,
а зачем тогда точка с запятой в строке while?
Цитата Сообщение от gb_ Посмотреть сообщение
как только приходят стоп-биты
вот для этого и цикл с пустым телом
Цитата Сообщение от gb_ Посмотреть сообщение
while ( !(UCSRA & (1<<RXC)) ); // ожидание приема байта
ждем пока байт не принялся, крутимся в этой строчке
как только байт пришел/считался
переходим к следующей строке
1
gb_
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
04.06.2016, 22:24  [ТС] 9
Вроде запустил, посылаю байт, цикл отрабатывает и зацикливается. Происходит отработка действий бесконечно, как будто постоянно посылаю байты. Как его остановить?
Полагаю как-то нужно обнулять значение RXC, по которому цикл определяет что байт пришел..

Добавлено через 14 минут
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
#define F_CPU 8000000UL 
 
#include <avr/io.h>
#include <util/delay.h>
 
int main(void)
{
 
DDRB= 0xFF;     // работа порта B на выход
PORTB= 0x00;    // установка порта B в ноль
DDRD= 0x00;     // работа порта D на вход
 
UBRRH = 0; // установка скорости
UBRRL = 51;
UCSRB = 1<<RXEN;            // разрешение приема
UCSRC = (1<<USBS)|(3<<UCSZ0); // байт = 8 бит данных, 2 стоп-бита
 
unsigned char one;  // для хранения  байта
 
while(1)
{
 
    while (!(UCSRA & (1<<RXC))); // ожидание приема байта
        
        one = UDR;  // запись байта
 
            for (int n = 0; n<8; n++)   // вывод байта на ногу PB1
            {
            
            if(((one<<n)&0x80)==0x80) {
             PORTB = 0b00000010;
             PORTB = PORTB^0x01; _delay_ms(10); //синхро на PB0
             PORTB = PORTB^0x01; _delay_ms(10); 
            
                                        } else {  
             PORTB = 0b00000000;
             PORTB = PORTB^0x01; _delay_ms(10); 
             PORTB = PORTB^0x01; _delay_ms(10); 
                                                }
                                            
                    
            }
}
}
Вот код, вывожу принятый байт побитно на последовательнй сдвиговый регистр и код зацикливается и постоянно выводит синхро на ногу PB0. Как реализовать остановку после приема одного байта? )
0
ValeryS
Модератор
7823 / 5822 / 758
Регистрация: 14.02.2011
Сообщений: 19,963
Завершенные тесты: 1
05.06.2016, 11:24 10
Цитата Сообщение от gb_ Посмотреть сообщение
Полагаю как-то нужно обнулять значение RXC
правильно полагаешь
в общем случае так
1 ждем когда установится флаг "Байт получен"
2 считываем байт
3 сбрасываем флаг

пункт 3 зависит от конкретного камня, в некоторых флаг сбрасывается аппаратно, как только считали байт(пункт 2), в некоторых приходится программно
как конкретно в ATtiny2313 я не знаю
0
gb_
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
05.06.2016, 11:32  [ТС] 11
Байт сбрасывается обнулением бита разрешения на чтение
C++
1
2
UCSRB=0b00000000; 
UCSRB=0b00010000;
Этот вопрос я полночи вчера решал) Возникла другая проблема, с чтением данных из UDR, загляните, пожалуйста, в соседнюю тему Регистр UDR ATtiny2313
0
Voland_
1672 / 1059 / 101
Регистрация: 04.01.2010
Сообщений: 3,594
06.06.2016, 12:24 12
Цитата Сообщение от ValeryS Посмотреть сообщение
зависит от конкретного камня, в некоторых флаг сбрасывается аппаратно, как только считали байт(пункт 2), в некоторых приходится программно
были случаи именно с AVR?
я не все чипы AVR конечно, перещупал. Но во всех случаях с AVR - USORT сбрасывал флаг RXC автоматически, при вычитке из UDR.
0
ValeryS
Модератор
7823 / 5822 / 758
Регистрация: 14.02.2011
Сообщений: 19,963
Завершенные тесты: 1
06.06.2016, 12:29 13
Цитата Сообщение от Voland_ Посмотреть сообщение
были случаи именно с AVR?
врать не буду, не помню
0
06.06.2016, 12:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2016, 12:29

Прием строки по uart
Добрый день всем. Хочу реализовать прием строки из терминала по UART, но что-то не выходит. Прошу...

Прием данных с UART
Вопрос скорее архитектурного плана. МК принимает по UART пакеты данных. Протокол бинарный. Формат...

Прием данных на пк с UART, ATMEGA16
Здравствуйте, не работает прием данных на пк, они не выводятся в TEXTBOX. Отправка с самого МК...


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

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

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