помогите разобраться с вычислением тангенса в CodeVision
исходные данные
unsigned int a1,a2; \16 бит измерения АЦП
Для вычисления тангенса y/x в Codevision есть функция
float atan2(float y, float x)
подскажите с кодом, как мне описать фун-ию и вычислить тангенс?
мой вариант такой:
unsigned int a1,a2;
float temp;
float atan2(float a1, float a2);
void main(void)
{
while (1)
{ a1=read_adc(1);
a2=read_adc(2);
temp=atan2(float a1, float a2);
printf("temp=%d",temp); \Отправляем в USART
putchar(0x0D);
};
}
Здравствуйте!
На какую строку ругается компилятор?
Выложите файл проекта в CodeVisionAVR - попытаюсь скомпилить.
Попробуйте заменить float atan2(float a1, float a2);
на float atan2((float)a1, (float)a2);
(обычно указываю в скобках).
Во вторых попробуйте писать printf("temp=%f",temp); \Отправляем в USART
Спасибо за ответ.
с компилятором разобрался сейчас компилирует
но считает что то непонятное выдает числа порядка 4095, 5632 и т.д.
я думаю что заморочка в следующем:
в меге16 (регистр ADCW) 10 разрядное ацп а переменные а1, а2 16 битные
как он их преобразует непойму?
как сделать что бы выводились на USART числа с плавающей точкой?
может перед вычислениями а1 и а2 перевести в двоичное число?
Попробуйте задать определённые значения а1 и а2 и посмотрите правильно ли высчитывается арктангентс.
В функции printf() %f показывает, что тип float т.е. число с плавающей запятой.
Попытался разобраться с printf(), написал код для отладки
значению a3 присваиваю 5.2 и в USART отправляю в разных видах
#include <mega16.h>
#include <stdio.h>
#include <delay.h>
float a3=5.2;
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC="0x86;"
UBRRH=0x00;
UBRRL=0x19;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
printf("a3=%i",a3);
putchar(0x0D);
printf("a3=%d",a3);
putchar(0x0D);
printf("a3=%u",a3);
putchar(0x0D);
printf("a3=%e",a3);
putchar(0x0D);
printf("a3=%f",a3);
putchar(0x0D);
printf("a3=%x",a3);
putchar(0x0D);
// Place your code here
delay_ms(3000);
};
}
на терминале выводится
a3=26214
a3=26214
a3=26214
a3=
a3=
a3=6666
если присвоить 4.1 на терминал выводится
a3=13107
a3=13107
a3=13107
a3=
a3=
a3=3333
Разобрался, в конфиге проекта нужно поставить свойства функции printf (float, width,precision)