Страница 1 из 1

Помогите настроить UART на ATMega8

Добавлено: Сб май 12, 2007 09:31:44
sansan88
Доброго времени суток всем!
Есть тут у меня проблемка, потребовалось наладить обмен данными между МК и ПК. Вот состяпал такую програмку, но она не работает. Точнее работает, но как-то не так. для теста вывожу в порт символ с кодом 0x52, а на компе в терминале отображается каша, последовательно выводятся символы + ]. Вот привожу код программы, подскажите пожалуйста, кде я допустил ошибку.
(вначале думал, что мк работает на внутреннем генераторе, потом выставил фьюзами все как надо, от кварца на 4МГц, частотомером мерил)

Не могу понять, почему не работает.


компилятор - CodeVisionAVR

Код: Выделить всё

#include <mega8>

// Standard Input/Output functions
#include <stdio>
#include <delay>
// Declare your global variables here
                   

void uart_putc(char data) {
    while (!(UCSRA & 0x20)); // Wait untill USART data register is empty
    // Transmit data
    UDR = data;
}

void main(void)
{

PORTB=0x00;
DDRB=0x00;


PORTC=0x00;
DDRC=0x00;

   PORTD |= 0x03; // RXD è TXD ïîäòÿãèâàþòñÿ â +U
   DDRD &= ~0x01; // RXD âõîä
   DDRD |= 0x02;  

TCCR0=0x00;
TCNT0=0x00;


TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;


ACSR=0x80;
SFIOR=0x00;

while (1)
      {
      // Place your code here
      uart_putc (0x52);
      delay_ms(200);
      };
}

Добавлено: Сб май 12, 2007 10:56:12
sansan88
И еще вопрос: ввиду отсутствия max 232, соединил мк и com порт просто напрямую. Думаю все же такая хрень происходит из-за несогласованных уровней.

Добавлено: Сб май 12, 2007 10:57:45
tych
в CVAVR есть функция

putchar (0x52); или putchar ('символ');

и наоборот

temp = getchar();

Добавлено: Сб май 12, 2007 12:05:33
ARV
sansan88 писал(а):И еще вопрос: ввиду отсутствия max 232, соединил мк и com порт просто напрямую. Думаю все же такая хрень происходит из-за несогласованных уровней.
КАК НАПРЯМУЮ?! На ком-порте уровни от -12 до +12 вольт меняются (иногда от -6 до +6) - такие уровни нельзя подавать на входы МК напрямую! И логическая 1 по СОМ-порту передается уровнем -12В, а логический 0 - +12В.

Добавлено: Сб май 12, 2007 13:28:50
tych
sansan88 писал(а):ввиду отсутствия max 232, соединил мк и com порт просто напрямую.
тогда нужен программный UART с инвертированием уровней

или инвертор сделать на транзисторе кт3102 по схеме с общим эмитером и два резистора по 1 ком. один от базы на TXD а другой от коллектора на +5 вольт. сигнал с коллектора подавать на КОМ-порт. Обычно работает.

Добавлено: Сб май 12, 2007 14:01:46
sansan88
Все, проблема решена. Действительно, чет я забыл о согласовании уровней. Спаял схемку на дискретных компонентах и ... заработало! выводит и принимает данные! (Сто лет уже обычным com портом не пользовался, обычно телефоны прошиваю, так ето дело челез Prolific USB2COM, так не о каком согласовании думать не приходится, просто зацепил и все! а тут оказывается вот какие заморочки)

Всем спасибо за участие, тема закрыта.

Добавлено: Сб май 12, 2007 14:20:49
tych
sansan88 писал(а):челез Prolific USB2COM
Ты можешь конкретную модель шнурка назвать ?

Добавлено: Сб май 12, 2007 17:05:10
sansan88
Понятия не имею какая модель. Был шнурок от сонериков старых, я его еще на T230 покупал. Щас разобрал и сделал из него универсальный програматор для сотовых, а по сути просто виртуальный ком порт с набором кабелей под различные модели (siemens, Samsung, китайские пародии).

Ты на название микрухи используемой посмоти, должно быть PL-2303.

Добавлено: Сб май 12, 2007 17:14:23
tych
Да не пишут ни фига почти все.

Добавлено: Сб май 12, 2007 17:28:07
sansan88
Можешь тогда проверить по другому. Поставь дрова для Prolific'a и посмоти, подцепят они преобразователь или нет. Хотя я точно не знаю, но должно сработать.

Да, посмоти пожалуйста здесь, мож че подскажешь http://www.radiokot.ru/forum/viewtopic. ... highlight=

Добавлено: Сб май 12, 2007 17:46:13
tych
sansan88 писал(а):Поставь дрова для Prolific'a и посмоти, подцепят они преобразователь или нет. Хотя я точно не знаю, но должно сработать.
Ну это очевидно. Но шнур то купить в начале придется, а потом бегать менять.

Добавлено: Вс май 13, 2007 17:36:14
sansan88
Они по моему щас все на пролификах. так что менять ничего не придется. Для верности бери шнур на соненрики T230, T630, они одинаковые вплане разъема и начинки. ТАм точно стоит такая микруха, только скорость 115 кб/с (у меня больше не работет и не выставляется), маловато однако но для прошивки пойдет, а тебе собственно для чего он нужен?