реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> USART & Atmega128A
Navovvol
сообщение Jan 20 2012, 11:52
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Цитата(ADEPTPS @ Jan 20 2012, 08:16) *
Используется внешнее тактирование судя по фьюзам.

Моя задача вообще имеет решение?

Внешний кварц 7.3728 МГц ?
Go to the top of the page
 
+Quote Post
ADEPTPS
сообщение Jan 20 2012, 12:18
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 5-05-09
Пользователь №: 48 683



да
Go to the top of the page
 
+Quote Post
Navovvol
сообщение Jan 20 2012, 12:49
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



на Atmega162 вывод PD1(или PB3) соединен с пином PE0 Atmeg'и128A ?
Go to the top of the page
 
+Quote Post
ADEPTPS
сообщение Jan 22 2012, 03:05
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 5-05-09
Пользователь №: 48 683



Да, но я уже нашел другой способ получения информации.

Тема временно закрыта!
Go to the top of the page
 
+Quote Post
Aktus
сообщение May 19 2015, 16:13
Сообщение #20





Группа: Новичок
Сообщений: 3
Регистрация: 19-05-15
Пользователь №: 86 765



Всем добрый день.

Пишу вроде бы простейшую прогу для ATmega128A в Atmel Studio 6.1. Просто передаю в комп 1 байт по UART.
Сначала делаю следующим образом:

Код
#include <avr/io.h>

#define UBRR_9600 47

unsigned char s[1] = "A";

int main(void)
{
    UBRR0H = 0;
    UBRR0L = UBRR_9600;
    UCSR0B = (1<<TXEN0);
    UCSR0C = (1<<USBS0)|(1<<UCSZ00);
    
    UDR0 = s[0];
    
    while(1)
    {
    }
}

Всё нормально, но вместо символа "A" (0x41) в окне терминала (Advanced Serial Port Monitor) вижу "Б" (0xC1) sm.gif Почему-то устанавливается в 1 старший бит.

А теперь то же самое, но через прерывание:

Код
#include <avr/io.h>
#include <avr/interrupt.h>

#define UBRR_9600 47

unsigned char s[1] = "A";

int main(void)
{
    UBRR0H = 0;
    UBRR0L = UBRR_9600;
    UCSR0B = (1<<UDRIE0)|(1<< TXEN0);
    UCSR0C = (1<<USBS0)|(1<<UCSZ00);
    
    sei();
    
    while(1)
    {
    }
}

ISR(USART0_UDRE_vect)
{
    UDR0 = s[0];
}

Здесь в терминале вообще ничего не вижу, хотя, по идее, должна быть бесконечная посылка символа "A".
Ассемблерный код в обоих случаях одинаковый и, вроде бы, правильный:
Код
UDR0 = s[0];
LDS R24, 0x0100
OUT 0x0C, R24

Может кто-то сталкивался? Можете что-нибудь подсказать?

Сообщение отредактировал IgorKossak - May 19 2015, 17:13
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение May 19 2015, 18:52
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



UCSR0C = (1<<USBS0)|(1<<UCSZ00);

Table 80. UCSZn Bits Settings
UCSZn2 UCSZn1 UCSZn0 Character Size
0 ____ 0 ____ 0 ____ 5-bit
0 ____ 0 ____ 1 ____ 6-bit


По-моему, 6 битов - Ваш случай...

А кстати, в плане занудства, для подобных вопросов существует раздел для начинающих...
Go to the top of the page
 
+Quote Post
Aktus
сообщение May 20 2015, 18:33
Сообщение #22





Группа: Новичок
Сообщений: 3
Регистрация: 19-05-15
Пользователь №: 86 765



RabidRabbit, косяк признаю. Большое спасибо. Про раздел для начинающих понял, учту.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th August 2025 - 17:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016