Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ср фев 22, 2017 13:24:30
Здравствуйте, уважаемые КОТЫ! Захотелось собрать себе в машину вот такое устройство:
https://avrlab.com/node/122. Я не программист, поэтому прошу помощи, как перевести исходник в НЕХ?
Чт окт 05, 2017 17:05:54
А в ответ тишина...
Тогда поставлю вопрос так: можно ли из этого сделать HEX?
#include <avr/io.h> //Стандартная библиотека ввода/вывода
#include <math.h.> //Библиотека математических операций
#define RS 2 //RS=PD2
#define E 3 //E=PD3
#define TIME 10
//Константа временной задержки для ЖКИ
//Частота тактирования 4МГц
#define ZERO_X 0x026c //Расчетная константа для координаты x
#define ZERO_Y 0x0258 //Расчетная константа для координаты y
#define ZERO_Z 0x029c //Расчетная константа для координаты z
int u=0; //Напряжение на ADC
int x,y,z; //ax,ay,az
//Программа задержки
void pause (unsigned int a)
{
unsigned int i;
for(i=a;i>0;i--);
}
//Программа передачи команды ЖКИ
void lcd_com (unsigned char lcd)
{
unsigned char temp;
temp=(lcd&~(1<<RS))|(1<<E); //RS=0 – это команда
PORTD=temp; //Выводим на portD старшую тетраду команды, сигналы RS, E
asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации
PORTD=temp&~(1<<E); //Сигнал записи команды
temp=((lcd*16)&~(1<<RS))|(1<<E); //RS=0 – это команда
PORTD=temp; //Выводим на portD младшую тетраду команды, сигналы RS, E
asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации
PORTD=temp&~(1<<E); //Сигнал записи команды
pause (10*TIME); //Пауза для выполнения команды
}
//Программа записи данных в ЖКИ
void lcd_dat (unsigned char lcd)
{
unsigned char temp;
temp=(lcd|(1<<RS))|(1<<E); //RS=1 – это данные
PORTD=temp; //Выводим на portD старшую тетраду данных, сигналы RS, E
asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации
PORTD=temp&~(1<<E); //Сигнал записи данных
temp=((lcd*16)|(1<<RS))|(1<<E); //RS=1 – это данные
PORTD=temp;n//Выводим на portD младшую тетраду данных, сигналы RS, E
asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации
PORTD=temp&~(1<<E); //Сигнал записи данных
pause(TIME); //Пауза для вывода данных
}
void lcd_init (void)//Иниализация ЖКИ
{
lcd_com(0x2c); //4-проводный интерфейс, 5x8 размер символа
pause(100*TIME);
lcd_com(0x0c); //Показать изображение, курсор не показывать
pause(100*TIME);
lcd_com(0x01); //Очистить DDRAM и установить курсор на 0x00
pause (100*TIME);
}
unsigned int getADC(void) //Извелечения результата с АЦП
{
unsigned int v;
v=(ADCL+ADCH*256);
return v;
}
void write_full(int x, int y, int z)
{
double a,b;
unsigned char temp;
a=atan2(x,z)*180/M_PI;//Вычисляем углы
b=atan2(y,z)*180/M_PI;
lcd_com (0x80); //Пишем "тангаж"
lcd_dat (0xbf);
lcd_dat (0x61);
lcd_dat (0xbd);
lcd_dat (0xb4);
lcd_dat (0x61);
lcd_dat (0xb6);
lcd_dat ('=');
if (a_valid==1)
{
if (a<0)
{//Пишем знак
a=-a;
lcd_dat('-');
}
else lcd_dat('+');
temp=a/100; //Пишем данные
a=a-temp*100;
lcd_dat(0x30+temp);
temp=a/10;
a=a-temp*10;
lcd_dat(0x30+temp);
lcd_dat(0x30+a);
lcd_dat(0xdf);
}
else
{
lcd_dat('N');
lcd_dat('/');
lcd_dat('a');
lcd_dat(' ');
lcd_dat(' ');
}
lcd_com (0xc0);//Пишем "крен"
lcd_dat (0xba);
lcd_dat (0x70);
lcd_dat (0x65);
lcd_dat (0xbd);
lcd_dat ('=');
if (b_valid==1)
{
if (b<0) { //Пишем знак
b=-b;
lcd_dat('-');
}
else lcd_dat('+');
temp=b/100; //Пишем данные
b=b-temp*100;
lcd_dat(0x30+temp);
temp=b/10;
b=b-temp*10;
lcd_dat(0x30+temp);
lcd_dat(0x30+b);
lcd_dat(0xdf);
}
else {
lcd_dat('N');
lcd_dat('/');
lcd_dat('a');
lcd_dat(' ');
lcd_dat(' ');
}
}
int abs (int x)
{
if (x>=0) return x;
else return -x;
}
int main(void)
{ unsigned char i;
DDRD=0xfc;
pause(3000); //Пауза для включения ЖКИ
lcd_init(); //Инициализация ЖКИ
ADCSRA=(1<<ADEN)|(1<<ADPS1)|(1<<ADPS0); //Включить АЦП, прескаллер =/8
while(1)
{
x=y=z=0;
for (i=0;i<30;i++)
{
ADMUX=(1<<REFS1)|(1<<REFS0)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);//Внутренний Vref=2,56, канал PC0
ADCSRA|=(1<<ADSC); //Начать преобразование
while ((ADCSRA&_BV(ADIF))==0x00) //Ждем окончания преобразования
;
u=getADC(); //Считать напряжение
x= x+(u-ZERO_X)*2.56/10.24*1.25; //Добавить в сумму x
ADMUX=(1<<REFS1)|(1<<REFS0)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(1<<MUX0);//Внутренний Vref=2,56, канал PC1
ADCSRA|=(1<<ADSC); //Начать преобразование
while ((ADCSRA&_BV(ADIF))==0x00) //Ждем окончания преобразования
;
u=getADC(); //Считать напряжение
y= y+(u-ZERO_Y)*2.56/10.24*1.25; //Добавить в сумму y
ADMUX=(1<<REFS1)|(1<<REFS0)|(0<<MUX3)|(0<<MUX2)|(1<<MUX1)|(0<<MUX0);//Внутренний Vref=2,56, канал PC2
ADCSRA|=(1<<ADSC); //Начать преобразование
while ((ADCSRA&_BV(ADIF))==0x00) //Ждем окончания преобразования
;
u=getADC(); //Считать напряжение
z= z+(u-ZERO_Z)*2.56/10.24*1.25; //Добавить в сумму z
}
a_valid=b_valid=1;
if ((abs(x/30)>85)&&(abs(y/30)<30)) { //Вычисляем корректность данных
a_valid=1;
b_valid=0;
}
if ((abs(y/30)>85)&&(abs(x/30)<30)) {
a_valid=0;
b_valid=1;
}
write_full (x,y,z); //Выводим результат на ЖКИ
pause(15000);
}
return 1;
}
Чт окт 05, 2017 17:27:30
можно.
http://microsin.net/programming/avr/avr ... -file.htmlв аттаче для меги88, хз какая у вас.
ЗЫ не надо такие портянки постить. прячьте в спойлер, или лучше прикладывайте файл.
- Вложения
-
- someprog.zip
- (5.37 KiB) Скачиваний: 222
Чт окт 05, 2017 17:55:28
В заголовке: MEGA8
Добавлено after 12 minutes 9 seconds:
Хотелось бы подробнее.
Сб окт 07, 2017 18:46:11
для меги8
Залил эту прошивку, ничего не работает.
А компиляторы есть на Русском языке?
Добавлено after 20 minutes 34 seconds:Хочу попробовать сам разобраться.
Сб окт 07, 2017 18:50:38
andrei913 писал(а):А компиляторы есть на Русском языке?
Я о}{..ваю ! Насколько позволяет судить мой скромный опыт, их нет ни на русском, ни на китайском, ни на древне-зулусском. Входной язык у компилятора - выбранный язык программирования, на выходе - бинарник или .hex - файл.
Сб окт 07, 2017 19:05:28
andrei913 писал(а):А компиляторы есть на Русском языке?
Я о}{..ваю ! Насколько позволяет судить мой скромный опыт, их нет ни на русском, ни на китайском, ни на древне-зулусском. Входной язык у компилятора - выбранный язык программирования, на выходе - бинарник или .hex - файл.
Я вроде нормально спрашиваю. Неужели нельзя нормально ответить.
Сб окт 07, 2017 19:50:04
на такие вопросы сложно отвечать нормально. Ну совсем ведь базовые понятия
Откройте любую книжку по С и почитайте несколько первых глав.
В исходном виде прошивка не собирается, я там правил опечатки по собственному разумению, особо не разбираясь.
"ничего не работает" - дык погода на марсе к этому не располагает. Какое конкретно ничего не работает?
там в комментариях кстати чего-то про частоту в 4МГц. Нужные фьюзы выставили?
Сб окт 07, 2017 19:58:35
Просто я в программировании полный ноль. Я практик. Могу спаять, прошить микроконтроллер но не более. Так что извините за тупые вопросы. Фьюзы выставил правильно.