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

 
 
> UART Atmega32, проблема с UART
temich
сообщение Apr 2 2015, 09:15
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 4-02-14
Пользователь №: 80 326



Здравствуйте! имеется контроллер Atmega32, в нем программа которая каждые полсекунды посылает символ по UART, который затем успешно принимается компьютером с помощью преобразователся USB-TTL на микросхеме PL-2303. Все бы ничего, если бы не одно НО: после выключения питания контроллера (GND остается) при подключенном UART (только TX) контроллер продолжает работать!!!! То есть по сути питается от UART!! Для наглядности даже подлючены светодиоды на порт B, которые продолжают мигать, но уже с меньшей яркостью.
Кто может объяснить такое явление? в чем проблема? в неправильной настройке UART или может с преобразователем USB-TTL что-то не то?

CODE
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

void send_char(char data)
{
while(!(UCSRA & (1<<UDRE)));
UDR = data;
}

int main(void)
{
/*PORTB на выход*/
DDRB = 0xFF;
PORTB = 0x00;

/*настройка UART*/
UBRRL = 0x33; //0x33 - Baud Rate = 9600 (при fosc = 8MHz)
UCSRB = 0b00011000; //бит4 - RXEN, бит3 - TXEN
UCSRC = 0b10000110; //бит7 - URSEL (Register Select: если 1 то UCSRC), бит2,1 - UCSZ1,UCSZ0 (формат кадра)

PORTB |= (1<<PORTB2);

while(1)
{
PORTB ^= (1<<PORTB2);
PORTB ^= (1<<PORTB3);
send_char('A');
_delay_ms(500);
}
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
temich
сообщение Apr 3 2015, 08:22
Сообщение #2





Группа: Участник
Сообщений: 9
Регистрация: 4-02-14
Пользователь №: 80 326



Протестировал все это дело на USB-UART от плате Ардуино (без основного контроллера), там на Atmega16 реализован также и UART.
Так вот с ним все работает правильно. На каждой линии стоит резистор 1k, и если поставить на такие же резисторы на преобразователь PL2303, то проблема как бы решается... Но разве правильно будет решать эту проблему только с помощью резисторов? Профессионалы подскажите...
Прикрепленное изображение


Цитата(Владивольт @ Apr 2 2015, 21:30) *
Ещё вариант -- выходной драйвер PL2303 запитать (вывод 4 VDD_232) от той же шины, что и контроллер.

наверное не получится... драйвер PL2303 сделан по подобию флешки втыкается в USB, а от него идут провада Rx Tx GND.
А на Atmega32 уже почти собрано устройство, которое имеет отдельный блок питания, и управляется через, Rx Tx GND
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Apr 3 2015, 14:56
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Цитата(temich @ Apr 3 2015, 11:22) *
Протестировал все это дело на USB-UART от плате Ардуино (без основного контроллера), там на Atmega16 реализован также и UART.
Так вот с ним все работает правильно. На каждой линии стоит резистор 1k, и если поставить на такие же резисторы на преобразователь PL2303, то проблема как бы решается... Но разве правильно будет решать эту проблему только с помощью резисторов? Профессионалы подскажите...

Вот так лучше сделайте:
Прикрепленное изображение

Через диод будет "приходить" от PL2303 только лог."0", а лог."1" будет получаться с помощью подтягивающего резистора. Это стандартный способ для защиты от паразитной запитки.
Резистор ставьте любой, в диапазоне 1к-10к. Я ставлю обычно 10к, и работает нормально на скоростях UART до 115200 (быстрее не испытывал).
Диод тоже любой, годится самый маломощный. Скорости и токи тут минимальные.

Сообщение отредактировал controller_m30 - Apr 3 2015, 15:13
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 06:53
Рейтинг@Mail.ru


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