роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Описание: Использование Bluetooth модулей и attiny2313
dossalab Post Id



Рядовой


Сообщений всего: 4
Дата рег-ции: Нояб. 2013  



Эксперементирую с bluetooth модулями. Подсоединил tx модуля напрямик к rx тиньки. Пишу в cvavr такой код:
CODE:

#include <tiny2313.h>
#include <stdio.h>
char BluetoothData;
void main(void)
{
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x33;

while (1)
{
BluetoothData=UDR;
PORTB.4=1;

if(BluetoothData=='1')
{
PORTB.2=1;
PORTB.3=0;
}
if(BluetoothData=='2')
{
PORTB.2=0;
PORTB.3=1;
}
if(BluetoothData=='a')
{
PORTB.2=0;
PORTB.3=0;
}

if(BluetoothData=='3')
{
PORTB.5=1;
PORTB.6=0;
}

if(BluetoothData=='4')
{
PORTB.5=0;
PORTB.6=1;
}

if(BluetoothData=='b')
{
PORTB.5=0;
PORTB.6=0;
}

if(BluetoothData=='5')
{
PORTB.1=1;
}

if(BluetoothData=='c')
{
PORTB.1=0;
}

};
}


На PORTB.1 - Фары, PORTB.5; PORTB.6;PORTB.2;PORTB.3 - двигатели, PORTB.4 - вывод enable L293D.

Но работает не очень хорошо, с перебоями. Включенные фары время от времени выключаются, или включаются самостоятельно. Двигатели иногда не выключаются, или включаются не с первого раза.
В чем дело?Есть ли другие способы приема/обработки UART?

(Отредактировано автором: 26 Ноября, 2013 - 02:43:29)

 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Кварц какой стоит?
 
 Top
dossalab Post Id



Рядовой


Сообщений всего: 4
Дата рег-ции: Нояб. 2013  



тактирование от внутреннего на 8 МГЦ. Сегодня привязал работу к таймеру. стало немного лучше, но все равно фары иногда отключаются Замешательство Добавил сигнал.
CODE:

#include <tiny2313.h>
#include <stdio.h>
#include <delay.h>
char BluetoothData;
char beep;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
BluetoothData=UDR;
PORTB.4=1;

if(BluetoothData=='1')
{
PORTB.2=1;
PORTB.3=0;
}
if(BluetoothData=='2')
{
PORTB.2=0;
PORTB.3=1;
}
if(BluetoothData=='a')
{
PORTB.2=0;
PORTB.3=0;
}

if(BluetoothData=='3')
{
PORTB.5=1;
PORTB.6=0;
}

if(BluetoothData=='4')
{
PORTB.5=0;
PORTB.6=1;
}

if(BluetoothData=='b')
{
PORTB.5=0;
PORTB.6=0;
}

if(BluetoothData=='5')
{
PORTB.1=1;
}

if(BluetoothData=='c')
{
PORTB.1=0;
}

if(BluetoothData=='6')
{
beep = 1;
}

if(BluetoothData=='d')
{
beep = 0;
}

}

void main(void)
{
// Port B initialization
PORTB=0x00;
DDRB=0xFF;

// Timer/Counter 0 initialization
TCCR0A=0x00;
TCCR0B=0x01;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter Interrupt initialization
TIMSK=0x02;

// USART initialization
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x33;

// Global enable interrupts
#asm("sei")

while (1)
{
if (beep==1)
{
PORTB.0=1;
delay_ms(5);
PORTB.0=0;
delay_ms(5);
}
};
}

Роботов, вы же, кажется, делали управление роботом по Bluetooth? Можно посмотреть программу?

(Отредактировано автором: 27 Ноября, 2013 - 18:34:59)

 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Ну чего же вы хотите? От внутреннего генератора USART не будет нормально работать. Это я вам как создатель роботов говорю Голливудская улыбка
(Добавление)
Ставьте кварц, и желательно кратный частоте порта. Например 11.0592 Мгц
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Роботов пишет:
кварц
Не поможет. Человек читает садержимое регистра данных UART когда ему вздумается и совершенно не обращает внимание на состояние UART.

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


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


Возможно потребуется немного модифицировать код для Ваших нужд. Но, принцип думаю ясен. Прежде чем читать из UDR или писать в UDR нужно проверить бит RXC или бит UDRE регистра UCSRA.

Примеры кода взяты из [url]http://www.atmel.com/images/doc2543.pdf‎[/url]

(Отредактировано автором: 28 Ноября, 2013 - 00:11:38)

 
 Top
dossalab Post Id



Рядовой


Сообщений всего: 4
Дата рег-ции: Нояб. 2013  



поставил кварц 12 мгц, пересчитал uart. Поставил подтяжку на ресет. Поставил конденсаторы по питанию. Не помогает. Может быть, дело в коде? Роботов, можете выложить программу для управления по bluetooth?
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Да нивопрос. Вот, разбирайся.
(Добавление)
Там весь проект, вынь нужное. Самому вспоминать лень.
Скачать файл: pololu.rar
Скачан раз: 289
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru