roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 17:50

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с программированием UART на OR-AVR-M32-D
СообщениеДобавлено: 12 апр 2011, 13:17 
Не в сети

Зарегистрирован: 07 фев 2010, 05:20
Сообщения: 20
Откуда: Южно-Сахалинск
Всем привет.

Написал простенькую програмку для OR-AVR-M32-D посылаю в UART 1 или 2, соответственно должен загораться или гаситься LED на PB3. Проверил в VMLAB все отлично работает.
Прошиваю в контроллер нифига не работает. Подключаюсь к UART контроллера получаю на выходе кракозябру из 3 символов вместо "Ok!" В настройках терминала стоит 9600 8-1.
Что-то приходит, но из за частоты видимо не так как надо. Подскажите какую частоту установить в USART_Init (0x33) или как правильно фьюзы прописать.

Вот фьюзы и частота из make файла. Фьюзы взял с http://roboforum.ru/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D0%B2%D1%8B%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_fuse-%D0%B1%D0%B8%D1%82%D0%BE%D0%B2_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%BE%D0%B2_Open_Robotics

Код:
DEVICE     = atmega32
CLOCK      = 7372800
PROGRAMMER = -c USBasp -P avrdoper
OBJECTS    = main.o
FUSES      = -U hfuse:w:0xD9:m -U lfuse:w:0xFF:m


А вот и сам код.

Код:
#include <avr/io.h>              // Most basic include files
#include <avr/interrupt.h>       // Add the necessary ones here



void USART_Transmit( unsigned char data );
void USART_Init( unsigned int baud );




ISR(USART_RXC_vect)

{

   int b;
   b = UDR;
   
   // Выполняем обработку принятого байта
   
   if(b=='1')//Если приняли "1"
      
   {
      PORTB |= (1 << 3);
      USART_Transmit('R');//Отправляем букву "R"
      USART_Transmit(0x0d);//переход в начало строки
      USART_Transmit(0x0a);//переход на новую строку
      
   }
   
   else//Если нет
      
      if(b=='2')//Если приняли "2"
         
      {
         PORTB &= ~(1 << 3);
         USART_Transmit('L');//Отправляем букву "L"
         USART_Transmit(0x0d);//переход в начало строки
         USART_Transmit(0x0a);//переход на новую строку
         
      }
   
}

void USART_Transmit( unsigned char data ) {
   /* Wait for empty transmit buffer */
   while ( !( UCSRA & (1<<UDRE)) )
      ; /* Put data into buffer, sends the data */
   UDR = data;
}



void USART_Init( unsigned int baud ) {
   /* Set baud rate */
   UBRRH = (unsigned char)(baud>>8);
   UBRRL = (unsigned char)baud;
   
   /* Enable receiver and transmitter */
   UCSRB = (1<<RXEN)|(1<<TXEN);
   UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0);  // Set frame format: 8data, 1stop bit
   /* Set frame format: 8data, 2stop bit */
   //UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
   
   UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
   sei();// Enable the Global Interrupt Enable flag so that interrupts can be processed
}

unsigned char USART_Receive( void ) {
   /* Wait for data to be received */
   while ( !(UCSRA & (1<<RXC)) )
      ; /* Get and return received data from buffer */
   return UDR;
}



// ***********************************************************
// Main program
//
int main(void) {
   DDRB = 0xFF; //Для отладки
   
   //Скорость USART 9600 при кварцевом генераторе 8MHz
   
   USART_Init (0x33);
   USART_Transmit('O');//Передаем при включении
   USART_Transmit('k');//сообщение "Ok!", что свидетельствует
   USART_Transmit('!');//о правильно работе программы
   USART_Transmit(0x0d);//переход в начало строки
   USART_Transmit(0x0a);//переход на новую строку
   
   
   while(1) {             // Infinite loop; define here the
      
   }
   
}



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с программированием UART на OR-AVR-M32-D
СообщениеДобавлено: 12 апр 2011, 13:21 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Советую для теста написать более простую погу. Например в цикле класть что-то прямо в UDR. желательно еще светодиодом помигать чтоб сразу обнаружить движение проги и оценить частоту такта.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с программированием UART на OR-AVR-M32-D
СообщениеДобавлено: 12 апр 2011, 13:24 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Попробуйте отсюда взять примеры программирования UART'а:
mediawiki/images/a/af/OR-AVR-M32-N-PG.pdf

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с программированием UART на OR-AVR-M32-D
СообщениеДобавлено: 12 апр 2011, 13:30 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Крокозяблы = неправильная скорость, в 99% случаев.

Вот:
CLOCK = 7372800

И вот:
//Скорость USART 9600 при кварцевом генераторе 8MHz
USART_Init (0x33);

По идее надо не 0x33 (=51), а 47, для 7372800.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с программированием UART на OR-AVR-M32-D
СообщениеДобавлено: 13 апр 2011, 15:59 
Не в сети

Зарегистрирован: 07 фев 2010, 05:20
Сообщения: 20
Откуда: Южно-Сахалинск
Ребята, спасибо всем огромное. Обязательно все попробую, и отпишусь. Сегодня просто времени нет, оставил сладкое на завтра:)

Добавлено спустя 16 минут 17 секунд:
boez писал(а):
Крокозяблы = неправильная скорость, в 99% случаев.

Вот:
CLOCK = 7372800

И вот:
//Скорость USART 9600 при кварцевом генераторе 8MHz
USART_Init (0x33);

По идее надо не 0x33 (=51), а 47, для 7372800.


Именно так и ни как иначе. Я был уверен что 0х33, поленился почитать мануал а просто слизал у кого-то код посчитав что так и надо:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с программированием UART на OR-AVR-M32-D
СообщениеДобавлено: 13 апр 2011, 20:54 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
А чем не нравится HAL из орфы?

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с программированием UART на OR-AVR-M32-D
СообщениеДобавлено: 14 апр 2011, 15:38 
Не в сети

Зарегистрирован: 07 фев 2010, 05:20
Сообщения: 20
Откуда: Южно-Сахалинск
Дело в том что люблю сам все ковырять. По крайней мере прошивки, паять тоже могу, но лень. Собственно, решил возродить все свои контроллерные знания полученные в молодости.
Проект OR пока интересует только со стороны железа как платформа для своих идей. Да и купил модули потому что надо поддерживать отечественных производителей-единомышленников. Мне кажется ROBOFORUM самый многочисленный и интересный в рунете. По крайней мере нет снобов:)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

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


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO