roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 13:28

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




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: ATMEGA644P + UART/SPI
СообщениеДобавлено: 04 июн 2009, 22:54 
Не в сети

Зарегистрирован: 04 июн 2009, 22:35
Сообщения: 7
Откуда: N.Ch.
Есть микроконтроллер atmega644p и соединённый с ним bluetooth-модуль spkebm001a. Установлено соединение между ноутбуком и bluetooth-модулем. На модуль данные вроде как приходят (моргает светодиод) но вот до контроллера они не доходят. Пробовали UART и SPI, результат один и тот же. При попытке сохранения полученного символа в eeprom контрллера, сохранятеся либо 00 либо ничего вообще. В чём проблема непонятно. Также пробовали ещё и соединение по COM-порту через схемы собранную на max232.Результат тот же.
Листинг для SPI
Код:
void SPI_MasterInit(void)

{

  DDRB = (1<<DDB5)|(1<<DDB7)
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);

}

void SPI_MasterTransmit(char cData)

{

  SPDR = cData;

  while(!(SPSR & (1<<SPIF)))

    ;

}


void SPI_SlaveInit(void)

{

  DDRB = (1<<DDB6);

  /* Enable SPI */

  SPCR = (1<<SPE);

}

char SPI_SlaveReceive(void)

{

  while(!(SPSR & (1<<SPIF)))

    ;

  return SPDR;

}


void main()
{
   SPI_SlaveInit();
  while (1)
  {
    char vh =  SPI_SlaveReceive();
    eeprom_write(0x00, vh);
  }
}


Листинг для UART

Код:
void USART_Init( unsigned int baud )

{

  UBRRH0 = (unsigned char)(baud>>8);

  UBRRL0 = (unsigned char)baud;

  UCSR0B = (1<<RXEN0)|(1<<TXEN0);

  /* Set frame format: 8data, 2stop bit */

  UCSR0C = (1<<USBS0)|(3<<UCSZ00);

}


void USART_Transmit( unsigned char data )

{

  while ( !( UCSR0A & (1<<UDRE0)) )

       ;

  UDR0 = data;

}


unsigned char USART_Receive( void )

{

  while ( !(UCSR0A & (1<<RXC0)) )

       ;

  return UDR0;

}


void main()
{
  USART_Init(9600);
  while (1)
  {
    char vh =  USART_Receive();
    eeprom_write(0x00, vh);
  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 04 июн 2009, 22:56 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Вы бы задачи разделили - уарт+блютуз отдельно, еепром отдельно. Может у вас еепром глючит?

Просто возвращайте по уарту всё что пришло, но в скобках, типа отправляете абв, обратно приходит (а)(б)(в)

Если работает - значит с уартом всё ок, ищите грабли в работе с еепром.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 05 июн 2009, 10:04 
Не в сети

Зарегистрирован: 04 июн 2009, 22:35
Сообщения: 7
Откуда: N.Ch.
eeprom работает точно. Сам по себе записывает то, что нужно. Проблема явно в UART/SPI. Вот только какая, понять мы никак не можем :( :cry:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 05 июн 2009, 10:27 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Фраза "работает точно" звучит регулярно и это не мешает чему-то не работать :)

Повторюсь - сделайте эхо со скобками и посмотрите что возвращается.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 05 июн 2009, 10:50 
Не в сети

Зарегистрирован: 04 июн 2009, 22:35
Сообщения: 7
Откуда: N.Ch.
Эхо сделать не можем, так как до контроллера данные не доходят. И от контроллера они тоже не уходят :cry: ЕЕПРОМ работает, мы писали туда символ и потом читали с помощью программатора.


Последний раз редактировалось EdGull 05 июн 2009, 12:27, всего редактировалось 1 раз.
Излишнее цитирование!!! В следующий раз будет предупреждение!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 05 июн 2009, 12:29 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
закоротите на bluetooth-модуле ноги Rx-Tx.
и если не получите эха на ПК, то ваш модуль лажает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 05 июн 2009, 12:33 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
На схемку бы посмотреть, может что с железом?

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 08 июн 2009, 17:23 
Не в сети

Зарегистрирован: 04 июн 2009, 22:35
Сообщения: 7
Откуда: N.Ch.
EdGull писал(а):
закоротите на bluetooth-модуле ноги Rx-Tx.
и если не получите эха на ПК, то ваш модуль лажает.

Закоротили RX/TX ноги у контроллера. Оказалось что лажает именно он.... (Без прерываний) :cry: :cry:
Пробовали использовать прерывания. Ничего не получилось, такое ощущения что он их просто не чухает. Вызывали sei(), не помогло. Что мы делаем не так? Может быть инициализировали UART неправильно? Код прилагаю
Код:
#include <avr/io.h>
//#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/eeprom.h>
//#include <avr/iom644.h>
#include <avr/interrupt.h>

//#define USART0_RX 0x0028
//#define USART0_TX 0x002C

#ifndef F_CPU
#define F_CPU 11059200//Hz
#endif
/*********** set desired baud rate *************************************************/
#define BAUDRATE 19200 //bod//calculate UBRR value
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1) //UBRVAL - Èíäåêñ ñêîðîñòè

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

ISR(USART0_TX_vect)
{
   //char rc = USART_Receive();
   //eeprom_write_byte(0x01, rc);
   
   eeprom_write_byte(0x02, '$');
}

void USART_Init()
{
   /* Set baud rate */
   //UBRR0 = (unsigned char)(baud>>8);
   UBRR0 = (unsigned char)UBRRVAL;
   /* Enable receiver, transmitter and interrupts on RX*/
   UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0)|(1<<TXCIE0);
   /* Set frame format: 8data, 2stop bit */
   UCSR0C = (1<<USBS0)|(3<<UCSZ00);
   eeprom_write_byte(0x03, ']');
}

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


int main(void)
{
   //sei();
   asm("sei");
   char tc = '?';
   USART_Init();
   USART_Transmit(tc);
   eeprom_write_byte(0x00, '!');
}



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 08 июн 2009, 17:28 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
А в протеусе гонять не пробовали?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 10 июн 2009, 19:28 
Не в сети

Зарегистрирован: 04 июн 2009, 22:35
Сообщения: 7
Откуда: N.Ch.
Вобщем мы идиоты. Компилировали под atmega644P а у нас был просто atmega644 =)))))
Теперь есть другой вопрос. С помощью какой микросхемы можно трансформировать напряжение с 5 вольт на 3.3 =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 10 июн 2009, 19:57 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
если надо переходник на уарт - я выкладывал схемку в ветке что-то типа "чайник и OR-BT-..."

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 10 июн 2009, 20:58 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
0-range писал(а):
С помощью какой микросхемы можно трансформировать напряжение с 5 вольт на 3.3 =)

самое простое LM1117-33


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 10 июн 2009, 22:25 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
я думаю вопрос о сигнальных линиях в том числе, поэтому:
Вложение:
RoboBus_UART_LVL_shift.pdf [3.34 КиБ]
Скачиваний: 16

Вложение:
level_shifter.pdf [16.81 КиБ]
Скачиваний: 26

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 10 июн 2009, 22:29 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
что сие творение означает?
почему не читаем стандарт на робобас?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA644P + UART/SPI
СообщениеДобавлено: 10 июн 2009, 22:30 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
в чем проблема со стандартом?

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.

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


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

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


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

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