Технический форум по робототехнике.
Korbofos » 29 июн 2011, 14:08
Попробывал так
- Код: Выделить всё • Развернуть
sfrb SREG=0x3f;
sfrb OCR3AL=0x86;
sfrb OCR3AH=0x87;
sfrw OCR3A=0x86;
выдаёт ошибку:
Error: C:\Cvavr2\inc\mega128.h(80), included from: adc.c: invalid SFR address, must be 0x00..0x3F
Korbofos » 29 июн 2011, 21:05
В CVAVR можно ли выставить фьюзы?
Romikgy » 30 июн 2011, 01:00
#define OCR3A (*(unsigned int *) 0x86)
говорят так на avr freaks ....
при програмации можно выставлять любые фьюзы ... они к самой прошивке отношения не имеют ... и программятся отдельно
Korbofos » 30 июн 2011, 05:43
Romikgy писал(а):#define OCR3A (*(unsigned int *) 0x86)
говорят так на avr freaks ....
при програмации можно выставлять любые фьюзы ... они к самой прошивке отношения не имеют ... и программятся отдельно
Спс

Korbofos » 03 июл 2011, 17:54
Корректно ли так делать?
- Код: Выделить всё • Развернуть
void motor1_set_pwm(signed char m1)
{
unsigned char m1_set_pwm;
m1_set_pwm=(m1*255/100);
PWM_1=m1_set_pwm;
}
если в m1 передать значение -50
m1_set_pwm - будет равно 127?
PS в протеусе какая то ерунда получается...
MiBBiM » 03 июл 2011, 18:29
(m1*255/100) == (знак*беззнак/беззнак) (в си при вычислении происходит приведение беззнаковых к знаковым) => (знак*знак/знак).
если кодвижн приводит размер констант к байту, то 255 -> -1, -50*(-1)=50, частное от деления 50 на 100 будет 0, m1_set_pwm==0
если константы по два байта, то 255 -> 255, после умножения получается 255*(-50)==-12750, частное от деления на 100 == -127 == FF81h, присваивается младший байт, 81h == 129
Korbofos » 03 июл 2011, 18:51
Тогда и это предётся переделывать?
- Код: Выделить всё • Развернуть
void servo (signed char servo, signed char pos)
{
int position;
if ((servo&&pos)==0)
{
servo_off();
return;
}
else if(SERV==OFF){servo_on();}
if (servo>8){servo=8;}
if (servo<1){servo=1;}
if (pos>85){pos=85;}
if (pos<-85){pos=-85;}
position = ((5,55*pos+1500)*2);
servo_position[servo]=position;
}
signed char get_servo_position (char servo)
{
signed char position;
position=(((servo_position[servo]/2)-1500)/5,55);
return position;
}
signed char distance(char adc)
{
signed char r;
if(adc==0){return 0;}
r=(2000/(adc+2)-7);
return r;
MiBBiM » 03 июл 2011, 19:27
эм, не имею понятия =)
возможно вам поможет глава
Преобразование типов от Кернигана и Ричи (уделите внимание неявному преобразованию) или внутренняя справка кодвижна (насколько я помню, там было небольшое описание языка)
Korbofos » 03 июл 2011, 19:50
Спс. А думал что всё так просто))) буду мозговать...
Korbofos » 04 июл 2011, 01:48
Использовал int результат тот же(((
Romikgy » 05 июл 2011, 10:10
а как покажи...
Korbofos » 06 июл 2011, 21:46
Ушёл от минуса вообще, направление вращения двигателя буду определять по младшему байту.
Korbofos » 07 июл 2011, 11:08
Как в CVAVR удалить глобальную переменную?
galex1981 » 07 июл 2011, 11:16
руками...
Korbofos » 07 июл 2011, 11:38
Я знаю, можно ещё лазером выжеч, только нужно точно попасть в ту часть мк, где хранится эта переменная)))
В книге Л.Б.Лебедева Cvavr про удаленее переменных нечего не сказано(((