Например TDA7294

Форум РадиоКот • Просмотр темы - Странно работает UART на Atmega2560
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 10:23:29

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Странно работает UART на Atmega2560
СообщениеДобавлено: Чт май 24, 2018 18:26:35 
Родился

Зарегистрирован: Чт май 24, 2018 17:55:20
Сообщений: 2
Рейтинг сообщения: 0
Доброго времени суток! Возникла у меня одна проблемка, а вы тут коты ученые, может чего подскажите.
Есть следующий код:
Спойлер#include <avr/io.h>

void Сonfig()
{
UCSR1A = 0;
UCSR1B = (1 << RXEN1) | (1 << TXEN1);
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);
UBRR1H = 0;
UBRR1L = 103;
}

void Delay(unsigned int timer)
{
unsigned int tmp = 1600;
while(timer--)
{
while(tmp--);
tmp = 1600;
}
}

void UARTTransmitWord(unsigned char text[])
{
unsigned char count = 0;
while(text[count])
{
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = text[count++];
}
}

int main(void)
{
Сonfig();
while(1)
{
UARTTransmitWord((unsigned char*)"Hello world!\x0D");
Delay(500);
}
}

Был мной проверен на atmega8, atmega 328, atmega1284, atmega128 и с незначительной переработкой кода работает также на STM32F103C8T6. Проблем никогда не возникало. Но вот мне пришла из Китая Arduino Mega 2560 на которой этот код не работает должным образом. То есть в терминале я должен был получить следующие байты: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D а получаю это: FF FF FF FF FF FF FF FF FF FF FF FF
Код пишу в Atmel Studio и CodeVisionAVR, результат везде одинаков. Перепробовал все все выходы с USART0 по USART3, везде одно и то же. Причем в Proteus все нормально работает, а вот на реальном железе ничего не выходит. Подключенный осциллограф показал всё то же самое. Стартовый и стоповый биты проходят, а данные нет.
Подозрения также были на неправильно высчитанную скорость обмена данными, но следующий код опроверг эти подозрения. Он работает как в Proteus так и на реальном железе, выводя последовательность чисел от 0x00 до 0xFF.
Спойлер#include <avr/io.h>

void Config()
{
UCSR1A = 0;
UCSR1B = (1 << RXEN1) | (1 << TXEN1);
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);
UBRR1H = 0;
UBRR1L = 103;
}

void Delay(unsigned int timer)
{
unsigned int tmp = 1600;
while(timer--)
{
while(tmp--);
tmp = 1600;
}
}

void UARTTransmitByte(unsigned char byte)
{
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = byte;
}

int main(void)
{
Config();
unsigned char count = 0;
while(1)
{
UARTTransmitByte(count++);
Delay(500);
}
}

Мистика какая то.. Хотя, может это я криворукий :?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: OKF и гости: 40


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y