roboforum.ru

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


ATMEGA644P + UART/SPI

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

ATMEGA644P + UART/SPI

Сообщение 0-range » 04 июн 2009, 22:54

Есть микроконтроллер 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);
  }
}
0-range
 
Сообщения: 7
Зарегистрирован: 04 июн 2009, 22:35
Откуда: N.Ch.

Re: ATMEGA644P + UART/SPI

Сообщение =DeaD= » 04 июн 2009, 22:56

Вы бы задачи разделили - уарт+блютуз отдельно, еепром отдельно. Может у вас еепром глючит?

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

Если работает - значит с уартом всё ок, ищите грабли в работе с еепром.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: ATMEGA644P + UART/SPI

Сообщение 0-range » 05 июн 2009, 10:04

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

Re: ATMEGA644P + UART/SPI

Сообщение =DeaD= » 05 июн 2009, 10:27

Фраза "работает точно" звучит регулярно и это не мешает чему-то не работать :)

Повторюсь - сделайте эхо со скобками и посмотрите что возвращается.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: ATMEGA644P + UART/SPI

Сообщение 0-range » 05 июн 2009, 10:50

Эхо сделать не можем, так как до контроллера данные не доходят. И от контроллера они тоже не уходят :cry: ЕЕПРОМ работает, мы писали туда символ и потом читали с помощью программатора.
Последний раз редактировалось EdGull 05 июн 2009, 12:27, всего редактировалось 1 раз.
Причина: Излишнее цитирование!!! В следующий раз будет предупреждение!
0-range
 
Сообщения: 7
Зарегистрирован: 04 июн 2009, 22:35
Откуда: N.Ch.

Re: ATMEGA644P + UART/SPI

Сообщение EdGull » 05 июн 2009, 12:29

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

Re: ATMEGA644P + UART/SPI

Сообщение yak-40 » 05 июн 2009, 12:33

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

Re: ATMEGA644P + UART/SPI

Сообщение 0-range » 08 июн 2009, 17:23

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, '!');
}

0-range
 
Сообщения: 7
Зарегистрирован: 04 июн 2009, 22:35
Откуда: N.Ch.

Re: ATMEGA644P + UART/SPI

Сообщение =DeaD= » 08 июн 2009, 17:28

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

Re: ATMEGA644P + UART/SPI

Сообщение 0-range » 10 июн 2009, 19:28

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

Re: ATMEGA644P + UART/SPI

Сообщение Duhas » 10 июн 2009, 19:57

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

Re: ATMEGA644P + UART/SPI

Сообщение EdGull » 10 июн 2009, 20:58

0-range писал(а):С помощью какой микросхемы можно трансформировать напряжение с 5 вольт на 3.3 =)

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

Re: ATMEGA644P + UART/SPI

Сообщение Duhas » 10 июн 2009, 22:25

я думаю вопрос о сигнальных линиях в том числе, поэтому:
RoboBus_UART_LVL_shift.pdf
(3.34 КиБ) Скачиваний: 16

level_shifter.pdf
(16.81 КиБ) Скачиваний: 26
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: ATMEGA644P + UART/SPI

Сообщение EdGull » 10 июн 2009, 22:29

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

Re: ATMEGA644P + UART/SPI

Сообщение Duhas » 10 июн 2009, 22:30

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

След.

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

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

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

cron