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


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

> Описание: Есть некий код... Который работает не так как я хочу ... помогите плз
VOLMONT Post Id



Рядовой


Сообщений всего: 3
Дата рег-ции: Апр. 2014  



Есть некоторое устройство у которого должно быть 4 шим'а, сигнал приходит с другого устройства ... код вот он ... компилятор ругается что глобальной переменной нету ... устройство по уарту присылает 4 байта их надо сделать значениями шима... 4 шим для сервы настроить пришлось программный при 8 битном иначи не как ....


//---------Объявляем дефейны------------------------- ---------


#define F_CPU 8000000UL // 8 MHz
#define BAUD 9600L //Скорость порта
#define MYUBRR F_CPU/16/BAUD-1
#define BYTE 3
#define ADDANGLE 9




//-----------Подключаем библиотеки----------------------


#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>



//-------------Объявляем функции------------------------

void USART_Transmit( unsigned char data );// Отправка байта(пока пусть будет)
void USART_Init( unsigned int ubrr); // Инициализация UART
void PWM_Init(); // инициализация шима
void insPWD(unsigned char pwdmode[]);
//int recalc(unsigned char Alfa);
volatile unsigned char angle;

/*----------------Прерывания----------------------------*/

ISR(USART_RXC_vect)//Прерывание при приеме
{
cli();
unsigned char i = 0 ;
unsigned char b = 0 ;
// unsigned char t_err = 0 ;
unsigned char pwdmode[BYTE] ;

if ( UDR== '8' )
{
b=UDR; // Что бы адрес не стал значением
while(i<BYTE)
{
while( (( UCSRA & ( 1 << RXC )) == 0)/* || t_err>10*/ );
{ // _delay_us(1);
// t_err++;
}


pwdmode[i]=UDR;
i++;
// _delay_ms(1);
// t_err++;


}

insPWD(pwdmode);
sei();
}

/* else
while( i<3 )
{
while( ( UCSRA & ( 1 << RXC )) == 0 )
i++;
}
*/
}

//USART_Transmit(); функция отправки пока повесит тут


//------------Основная функция------------------------- --

int main()
{
volatile unsigned char angle;
PWM_Init();
USART_Init (MYUBRR);
sei();//Разрешаем прерывания
angle = 90;
OCR1A = 50;
OCR1B = 150;
OCR2 = 250;
while (1)
{
//main

asm volatile ("wdr"Подмигивающий;// сброс собаки в 0

PORTB = 0b00000000;
sei();
_delay_ms(19);
cli();
_delay_us(10);
PORTB = 0b00001000;
_delay_us((int)angle*ADDANGLE);

};


}


//-------------------Инициализац ия функциий-------------------

void USART_Init( unsigned int ubrr)//Заставляем работать UART, разрешаем прерывания
{
//Задаем скорость работы USART
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;

UCSRB = (1<<RXEN)|( 1<<TXEN); //разращён прием и передача
UCSRB |= (1<<RXCIE); //прерывание при чтении

//URSEL,UMSEL=0 асинхронный,UPM01=0 Parity нет, USBS=0 1 стоп бит,UCSZ012 = 3 8бит данных

UCSRC = (1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|
(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);


}

//------------------------------ -------------------------------


void USART_Transmit( unsigned char data )
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}


//------------------------------ --------------------------------

void PWM_Init()
{
//Инициализация таймеров и портов и шимов

DDRD = 0b11110000;
DDRB = 0b00001000;
PORTD = 0b11110000;
PORTB = 0b00000000;
WDTCR=0x18; // включаем воч дог =)
WDTCR=0x0F; // устанавливаем в 1024 тыс. тактов(E-1024,D-512,C-256)

// TCCR0 = 0x6D;
TCCR1A = 0xA1;
TCCR1B = 0x09;
TCCR2 = 0x69;
OCR1A = 0; // Red
OCR1B = 0; // Green
OCR2 = 0; // Blue
//OCR0 = 0; // Servo

}

void insPWD(unsigned char pwdmode[])
{
volatile unsigned char angle;
cli();
OCR1A = pwdmode[0];
OCR1B = pwdmode[1];
OCR2 = pwdmode[2];
angle = pwdmode[3];
sei();

}


Может подскажете что не так, или как сделать лучше.
 
 Top
elmot Post Id



Гуру


Сообщений всего: 1141
Дата рег-ции: Дек. 2010  



А слабо привести лог компилятора? А то ведь телепаты бухают.
 
 Top
VOLMONT Post Id



Рядовой


Сообщений всего: 3
Дата рег-ции: Апр. 2014  



Всё решил проблему. Дело не в переменной а в том что функция delay() может принимать только константу ... пришлось извращаться...
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


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





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