roboforum.ru

Технический форум по робототехнике.

UART и WinAVR

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Сообщение aesok » 31 окт 2006, 23:29

Олег писал(а):Меня интересует вообще работа с UART.


1. Прочтите про UART в даташите на ваш контроллер. (Если тяжко читать на англиском прочитийте здесь на русском,  http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/index.htm - они назвали UART - УСАПП.)

2. Изучите код из примера "AVR306: Using the AVR UART in C", попутно перечитывая пункт 1.
http://www.atmel.com/dyn/products/app_n ... ily_id=607

3.а. Изучите  и попробуйте использовать в своей программе билиотеку 'usart.h/usart.c' (или  'usart2.h/usart2.c' - я не знаю чем они различаються), из avrlib.  
http://hubbard.engr.scu.edu/embedded/avr/avrlib/

3.б. Изучите пример "stdiodemo" из avr-libc, чтобы узнать как работать с последовательным протом используя стандартные функции ввода/вывода языка С. Как я уже рекомендовал, установите последнию версию WinAVR.
http://sourceforge.net/projects/winavr

C удовольствием отвечю на конкретные вопросы по любому из этих пунктов, ..... кроме 3.а :)

Олег писал(а):А именно как вывести через UART константу находящуюся во Flash памяти и как получить через UART какое-нибудь слово, а потом
сравнить его с имеющимися. :?:


"Разделяй и властвуй!" - Александр Македонский.

Если вы не знаете как отправать по UART константу из флеша.... скопируйте ее в RAM (strcpy_P - Program Space String Utilities) и отравте ее из RAM-а.

получить через UART какое-нибудь слово (точнее строку), а потом
сравнить его с имеющимися (strcmp).

Анатолий.
aesok
 
Сообщения: 69
Зарегистрирован: 11 авг 2006, 01:02
Откуда: ----

Сообщение Олег » 01 ноя 2006, 15:58

Напсал программу для выдачи в порт команды "ATZ". На ATmega8 работает, а на ATtiny2313 нехочет. Может кто-нибудь посмотрит и скажет почему? :?:
Код: Выделить всёРазвернуть

#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>

#define baud 9600UL
#define F_CPU 1843200UL

const char ATZ[] PROGMEM = "ATZ\n";

void init (void);
void printstr_p(const char *s);
void putchr(char c);

/*
* Send character c down the UART Tx, wait until tx holding register
* is empty.
*/
void putchr(char c)
{

 loop_until_bit_is_set(UCSRA, UDRE);
 UDR = c;
}


/*
* Same as above, but the string is located in program memory,
* so "lpm" instructions are needed to fetch it.
*/
void printstr_p(const char *s)
{
 char c;

 for (c = pgm_read_byte(s); c; ++s, c = pgm_read_byte(s))
   {
     if (c == '\n')
   putchr('\r');
     putchr(c);
   }
}


int main (void)
{
   init();
   while(1)
   {
      printstr_p(ATZ);
   }
   return(1);   
}


void init(void)
{
   // установка скорости UART
   UBRRH = 0x00;
   UBRRL = (F_CPU / (16 * baud)) - 1;
   // включение приемника и передатчика
   // и разрешение прерывания по окончании приема
   UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
   // установка формата кадров: 8 бит
   UCSRC = /*/*для мега8*/(1<<URSEL) |*/ (1<<UCSZ1) | (1<<UCSZ0);*/
   // разрешение глобальных прерываний
   sei();   
}

Олег
 
Сообщения: 23
Зарегистрирован: 25 сен 2005, 20:26

Сообщение avr123.nm.ru » 01 ноя 2006, 19:34

мастером в CVAVR сделайте настройку ВАРТА для обоих контроллеров и посмотрите в чем разница.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Олег » 01 ноя 2006, 19:47

В CVAVR посмотрел. Там все как и у меня.
Еденственное различее между мега и тини, это бит URSEL в регистре UCSRC. У меня он взят в комментарии.
С железом все впорядке, такая же программа сделанная в CVAVR работает, единственное что весит намного больше.
Олег
 
Сообщения: 23
Зарегистрирован: 25 сен 2005, 20:26

Сообщение Олег » 01 ноя 2006, 23:01

Что за ерунда? :?:

Написал две программы в WinAVR и CVAVR. Обе программы выдают в порт контроллера команду ATZ.
Контроллер подключен к компу через MAX232.

Данные с контроллера с программой на WinAVR видятся на терминале CVAVR на HyperTerminal нет, а с программой написанной на CVAVR наоборот на HyperTerminal видятся, а на терминале CVAVR нет.
И то в обоих случаях видится не команда ATZ, а какойто нобор последовательных символов.
Олег
 
Сообщения: 23
Зарегистрирован: 25 сен 2005, 20:26

Сообщение aesok » 02 ноя 2006, 01:15

Олег писал(а):Что за ерунда? :?:

..... а какойто нобор последовательных символов.


А ATtiny2313 точно работает от кварца 1,84 Мгц, а нет от встроенного генератора?

Анатолий.
aesok
 
Сообщения: 69
Зарегистрирован: 11 авг 2006, 01:02
Откуда: ----

Сообщение avr123.nm.ru » 02 ноя 2006, 12:37

"чепуха" обычнопринимается при ошибке в скорости передачи.  

Зашейте в МК прогу для грубой проверки частоты на которой он работает - вывод меандра частоту которого вы можете померить тестером или через звуковой вход ПК.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 02 ноя 2006, 12:47

зачем брать МК которые не поддерживаются симуляторами VMLAB и PROTEUS - в которых можно не только отладить но и померить многое и залогить.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Олег » 02 ноя 2006, 12:58

Точно МК от внутреннего генератора работал, перепрошил фьюсы все заработало.

Теперь осталось написать программу для према строки через UART, и сравнивать ее с константой.
Олег
 
Сообщения: 23
Зарегистрирован: 25 сен 2005, 20:26

Сообщение avr123.nm.ru » 02 ноя 2006, 12:59

ТЕМ БОЛЕЕ !!!  если вы начинающий !

Зачем УМЫШЛЕННО !!!  лишать себя великолепных
и доступных средств отладки ?????
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Олег » 02 ноя 2006, 13:01

Просто я уже купил ATTiny2313, чтобы купить новы МК надо в другой город на радиорынок ехать, незнаю когда туда попаду.
Олег
 
Сообщения: 23
Зарегистрирован: 25 сен 2005, 20:26

Re: UART и WinAVR

Сообщение xoz » 12 мар 2010, 12:44

У меня таже проблема.
Есть тестовый проектик который просто передает данные через usart, контроллер tiny2313. В модели Proteus в место "ОК" выдает АА на виртуальном терминале. Затем этот же исходник откомпилировал для Atmega8 все заработало как надо. Тут я решил что модель tiny2313 глючит и создал такой же проект на CVAVR но оно заработало.
Подскажите пожалуйста может что нибудь надо настраивать в WinAVR.
Проекты в приложении.
Вложения
usart.rar
(69.52 КиБ) Скачиваний: 5
xoz
 
Сообщения: 1
Зарегистрирован: 12 мар 2010, 12:26

Re: UART и WinAVR

Сообщение dns » 15 апр 2011, 11:30

xoz писал(а):У меня таже проблема.
Есть тестовый проектик который просто передает данные через usart, контроллер tiny2313. В модели Proteus в место "ОК" выдает АА на виртуальном терминале. Затем этот же исходник откомпилировал для Atmega8 все заработало как надо. Тут я решил что модель tiny2313 глючит и создал такой же проект на CVAVR но оно заработало.
Подскажите пожалуйста может что нибудь надо настраивать в WinAVR.
Проекты в приложении.


У вас в протеусе был запрограммирован фьюз CLKDIV8, соответственно эмулировалась частота в восемь раз меньше
dns
 
Сообщения: 1
Зарегистрирован: 15 апр 2011, 11:17

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12