CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18687
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

forastr писал(а):Здрасте!подскажите пожалуйста.Хочу массиву присвоить содерижимое файла.Как это сделать?(Например массив fontdata
, а в файле font.txt : 0x00,0x01,0x02)
я сделал небольшую программку, которая позволяет облегчить эту задачу: http://arv.radioliga.com/content/view/223/44/
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

Сообщение hd44780 »

forastr писал(а):Хочу массиву присвоить содерижимое файла.Как это сделать?(Например массив fontdata
, а в файле font.txt : 0x00,0x01,0x02)
А откуда ты файл в контроллере возьмешь :shock: ? Будешь ради 3-х байт прикручивать SD карточку?

Напиши просто
char a[]={0x00,0x01,0x02};
Зачем тут файл?
Реклама
Родился
Сообщения: 2
Зарегистрирован: Пн мар 28, 2011 13:02:11

Сообщение paranoik »

Доброго времени суток!
Господа, подскажите.. есть три переменные:
unsigned char h,l;
unsigned int x;

Как в старший байт переменной x положить значение переменной h, и соответственно в младший байт значение переменной l? И обратная задача, как прочитать старший байт из x в переменную h (можно ли это сделать без ассемблерных вставок или операций сдвига\деления)?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

paranoik писал(а):Как в старший байт переменной x положить значение переменной h, и соответственно в младший байт значение переменной l? И обратная задача, как прочитать старший байт из x в переменную h (можно ли это сделать без ассемблерных вставок или операций сдвига\деления)?
либо описав как структуру, либо простым сдвигом... ассемблер тут не нужен.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 2
Зарегистрирован: Пн мар 28, 2011 13:02:11

Сообщение paranoik »

Спасибо!
А то думал что есть что то вроде l=Low(x); но в справке ничего подобного не нашел
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

Сообщение hd44780 »

paranoik писал(а): Как в старший байт переменной x положить значение переменной h, и соответственно в младший байт значение переменной l?
x=h;
x= (x<<8)|l; /// или x= (x<<8)+l;
paranoik писал(а): И обратная задача, как прочитать старший байт из x в переменную h (можно ли это сделать без ассемблерных вставок или операций сдвига\деления)?
h= x>>8;

Операции <<, >> - сдвиг. Чего их не использовать?
paranoik писал(а):А то думал что есть что то вроде l=Low(x); но в справке ничего подобного не нашел
А кто мешает сделать её самому:

#define Low(x) ((unsigned char)(x>>8))

.....

h = Low(0x1234); // h= 0x12
Реклама
Родился
Сообщения: 3
Зарегистрирован: Пн мар 28, 2011 10:00:52

Сообщение forastr »

hd44780 писал(а):
forastr писал(а):Хочу массиву присвоить содерижимое файла.Как это сделать?(Например массив fontdata
, а в файле font.txt : 0x00,0x01,0x02)
А откуда ты файл в контроллере возьмешь :shock: ? Будешь ради 3-х байт прикручивать SD карточку?

Напиши просто
char a[]={0x00,0x01,0x02};
Зачем тут файл?
я может неправильно выразился:как правильно с точки зрения синтаксиса написать через #include.(Просто имеется два файла различных кодировок для бегущей строки , и чтобы каждый раз при перекомпиляции не переписывать массив где 255х7 элементов,то проще включть содержание типа fontoffset[] =#include <font.txt>, тока у меня ошибки выскакивают )
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

forastr писал(а): я может неправильно выразился:как правильно с точки зрения синтаксиса написать через #include.(Просто имеется два файла различных кодировок для бегущей строки , и чтобы каждый раз при перекомпиляции не переписывать массив где 255х7 элементов,то проще включть содержание типа fontoffset[] =#include <font.txt>, тока у меня ошибки выскакивают )
определить разные массивы fontoffset[]={1,2,...n} в разных файлах font.c или font.h и подключать нужный файл с помощью #include
«И всё-таки она вертится!»
Родился
Сообщения: 3
Зарегистрирован: Пн мар 28, 2011 10:00:52

Сообщение forastr »

Apparatchik писал(а):
forastr писал(а): я может неправильно выразился:как правильно с точки зрения синтаксиса написать через #include.(Просто имеется два файла различных кодировок для бегущей строки , и чтобы каждый раз при перекомпиляции не переписывать массив где 255х7 элементов,то проще включть содержание типа fontoffset[] =#include <font.txt>, тока у меня ошибки выскакивают )
определить разные массивы fontoffset[]={1,2,...n} в разных файлах font.c или font.h и подключать нужный файл с помощью #include
Спасибо!Помогло!
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Сообщение CS16AMX »

дошёл таки до акселерометров и захотелось его к предмету привязать знаю что предмет движется минимальным шагом 0.01 если дать 0.1 то он будет вертется быстрее чем глаз увидит ,в чём же касяк ! ацп макс 1023 пока что пробую вывести на екран через разные пути добавление 0 с переди, даже поделил макс теперь 150 но 0 не преписывает(
как его переправить?
Встал на лапы
Аватара пользователя
Сообщения: 102
Зарегистрирован: Вт мар 22, 2011 22:31:01

Сообщение Errorkpi »

Прочитал ваш пост 4 раза, ничего не понял. Какой шаг, какой акселерометр, к какому предмету. Схему в студию, или алгоритм, или хотя бы подробное описание проблемы. Что у вас не получается..?
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Сообщение CS16AMX »

может не так вырозился в общем у меня акселерометр 7260qr2 у него 3 оси и 3 выхода на них напряжение 0.8-2.6В в ацп 240-800 едениц
мне надо хотяб 1 ось перевести из вида 200 в ==> 0.200


unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

void main(void)
{
long int m,k,s;

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;


LcdInit();

while (1)

s=read_adc(0); //ïîðòû
?????????
sprintf (lcd_buf, "V=%u", s);
LcdString(1,3);
LcdUpdate();
delay_ms(200);
LcdClear();
так вот интересно реально ли сделать 0 с точкой перед значением ацп? схема классичекая
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Сообщение Сериг »

CS16AMX писал(а): ïîðòû
?????????
а что это за язык?)
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Сообщение CS16AMX »

Сериг писал(а):
CS16AMX писал(а): ïîðòû
?????????
а что это за язык?)
ето русиш)))) слово "порты")
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

CS16AMX писал(а):перевести из вида 200 в ==> 0.200
если вопрос об отображении на индикаторе, то просто сформируйте строку в буфере перед отображением.

Код: Выделить всё

strcpy(new_buf,"0.");
strcat(new_buf,lcd_buf);
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Сообщение CS16AMX »

нее,к сожалению в дальнейшем охото к 3Д модельке прицепить на экране хотяб увидеть без точек 01024 , а вообще надо бы на програмном коде это проделать как я понял в флоат можно это осуществить
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт апр 24, 2009 11:25:34
Откуда: Rus

Сообщение makser »

Есть новая версия, рабочая. http://eldigi.ru/site/prog/cvavr.php
Там правда дистрибутив сам триал, но заменой файла из прилагаемой папки можн получить полностью рабочую.
Из плюсов можно отметить возможность назначать выводы для лсд индикатора, раньше только целый порт.
Родился
Сообщения: 16
Зарегистрирован: Ср мар 16, 2011 19:41:29

Сообщение Warn »

доброго времени суток
пишу программу, чип мега32, шьётся по 5ти проводкам исключительно, пашет с кварцем на 16.
вопрос следующий.
вот часть текста программы
.......
PORTA.3=0;
PORTC.4=0;
PORTC.5=0;
PORTC.7=0;
PORTC.3=0;
PORTC.2=0;
PORTA.0=0;
PORTD.3=0;
PORTA.7=0;
PORTD.6=0;
PORTB.2=0;
PORTA.2=0;
PORTB.1=0;
PORTB.7=0;
PORTB.5=0;
PORTA.5=0;
PORTB.0=0;
PORTA.1=0;
......
делаю так сказать свотовое табло
это у меня одна буква.
Как мне всё это разместить в 4х строчках???
а то у меня программа получается очень большая.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18687
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Warn писал(а):Как мне всё это разместить в 4х строчках???
а то у меня программа получается очень большая.
вспомнить, наконец, что порт - это сразу 8 бит, и устанавливать сразу все 8 бит, а не по одному.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

Или писать всё в одну строку если уж так нужно каждый бит отдельно

Код: Выделить всё

PORTA.3=0; PORTC.4=0; PORTC.5=0;...
«И всё-таки она вертится!»
Ответить

Вернуться в «AVR»