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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Modest
Сверлит текстолит когтями
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

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

Сообщение Modest »

это был пример.

а во вторых - непонял? всмысли бесполезно переписываются?
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Modest писал(а):как распихать данные из X в порты побитно - т.е.
PORTB.5 = 0-ой бит,
PORTC.0 = 1-ый бит
и т. д.

т.д.:
PORTC.5 = 0-ой бит,
PORTC.4 = 1-ой бит,
PORTC.3 = 2-ой бит,
PORTC.2 = 3-ой бит,
PORTD.4 = 4-ой бит,
PORTC.1 = 5-ой бит,
PORTC.0 = 6-ой бит,
PORTB.5 = 7-ой бит,
Запись в 4-й и 5-й биты происходит два раза. Данные первых записей теряются. Поэтому они бесполезны.
Аватара пользователя
Modest
Сверлит текстолит когтями
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

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

Сообщение Modest »

AI_Disable пока выделял цветами не заметил что порты разные? порт С, порт B и порт D 8)
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Может, попробовать X.1, X.2 и т. д.?
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Эм.. нетъ. мой fail, да.
Но в данном случаи всё равно придётся работать побитно:
PORTC.5 = X.0;
PORTC.4 = X.1;
и т.д.
RoTToR
Открыл глаза
Сообщения: 73
Зарегистрирован: Вс июн 07, 2009 23:16:16
Контактная информация:

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

Сообщение RoTToR »

Все доброго времени суток! Подскажите пожалуйста как в CVAR с генерировать случайное число ХХХ типа как "одноруких электронных бандитах" ?? пробовал функцию rand() из stdlib.h , так слишком часто выпадают две одинаковые цифры, примерно раз через раз..
Спасибо!
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Когда мне бал нужен генератор случайных чисел на МК, я делал так: Включаем АЦП с усилением X200 -> припеваем к входу АЦП антенну -> снимем с этого канала случайные значения с огромнейшим разбросом от 0 до 1023.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

RoTToR писал(а):Все доброго времени суток! Подскажите пожалуйста как в CVAR с генерировать случайное число ХХХ типа как "одноруких электронных бандитах" ?? пробовал функцию rand() из stdlib.h , так слишком часто выпадают две одинаковые цифры, примерно раз через раз..
Спасибо!

В начале программы нужно использовать srand(int seed), а потом уже rand(). В хелпе написано.
«И всё-таки она вертится!»
Аватара пользователя
Modest
Сверлит текстолит когтями
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

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

Сообщение Modest »

Программно это будут псевдослучайные числа, т. е. их последовательность будет заранее известна.
Нужно делать как советует AI_Disable, т е на железном уровне.
Можно ещё на ацп повешать низкочастотный генератор...
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

В качестве аргумента нужно использовать переменную которая меняется. Например в часах часы+минуты+секунды.
«И всё-таки она вертится!»
Аватара пользователя
RusikOk
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев
Контактная информация:

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

Сообщение RusikOk »

создаю переменную
eeprom unsigned char eepromVer[48];

пытаюсь в нее записать данные
eepromVer = "2df";

выдает ошибку
Error: C:\cvavreval\project\watchDog\main.c(111): the expression must be a modifiable lvalue
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

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

Сообщение Goodefine »

RusikOk писал(а):создаю переменную
eeprom unsigned char eepromVer[48];
пытаюсь в нее записать данные
eepromVer = "2df";

eepromVer - это указатель на первый элемент массива, размещенного в eeprom. Т.е. это АДРЕС. Причем константный, поскольку при объявлении CAVR автоматически отводит ему место в EEPROM и в дальнейшем менять его дислокацию не собирается. Вы же пытаетесь его модифицировать, присваивая адрес из пространства флеш памяти... Очевидно, что это неправильно...
По идее, должно быть что то вроде:

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

eeprom char eepromVer[10];
//.....
void str_copy(eeprom char *eepromVer, flash char *string, char len)
{
char i=0;
while (len--)
{
*(eepromVer+i)=*(string+i);
++i;
}
//....
//Использование:
str_copy(eepromVer,"1234567",7);
}
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

Смысл в следующем!!! У меня есть два массива по 101 элементу.
Эти массивы храняться в энергонезависимой памяти.
Я инициализизирую каждый элемент нулем. Инициализирую что бы компиль не ругался и что бы не вставлять
#pragma warn-


Выяснил следующее и это 100 %

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

А, вот если между массивами ставлю переменные которые тоже сохраняются в энергонезависимой памяти, то ошибка сокращается на много!!!.

Если я в программе верхний массив не инициализирую, то проблем ни каких нет! В чем собака зарыта???
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Amstron, учитесь вопросы задавать....
Ставим плюсы: )
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

ibiza11 писал(а):Amstron, учитесь вопросы задавать....

Поробую поподробнее описать проблему.

У меня есть два массива по 101 элементу.
Эти массивы храняться в энергонезависимой памяти.
Я инициализизирую каждый элемент нулем.
Инициализирую что бы компиль не ругался и что бы не вставлять #pragma warn-

Выяснил следующее и это 100 %

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

А, вот если между массивами ставлю переменные которые тоже сохраняются в энергонезависимой памяти, то ошибка сокращается на много!!!.

Если я в своем устройстве верхний массив не инициализирую (у меня есть функция , при нажатии определенных кнопок записи нулями все элементы массива), то проблем ни каких нет!

Если я пропишу в два массива значения, то у меня появляются проблема работы с мими.
Считывал отдельно память EEPROM, там все олично. Запись идет в нужный массив.

Вопрос: почему есть разница как в программе записывать массив?
У меня вот так он создан:
eeprom unsigned int а[101]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0};

Я на это пол дня убил и не смог решить проблему! Иначе бы не писал...
Подскажите как правильно записать массив в EEPROM? Числа в нем должны храниться до 35635.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

у вас EEPROM-а хватает? два массива int-ов по 101 штуке - это 404 байта EEPROM. далеко не каждый AVR имеет такой объем EEPROM, тем более, если добавляются еще какие-то переменные...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

ARV писал(а):у вас EEPROM-а хватает? два массива int-ов по 101 штуке - это 404 байта EEPROM. далеко не каждый AVR имеет такой объем EEPROM, тем более, если добавляются еще какие-то переменные...


Я делаю проект на at mega8 , там 500 байт можно записать. Общая сумма получается с переменными 414 байт (80,9 %)

Если я меняю местами массивы, то у меня начинает косячить вычисления с другого массива.

Еще раз повторюсь, что если между массивами я вставляю переменные (у меня их 5), то вычисления получаются более мение сносные.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

Amstron писал(а):Я на это пол дня убил и не смог решить проблему! Иначе бы не писал...
Из того, что наговорили в 2-х постах - яснее стало, что проблема есть, а не её суть. Что за выражение:
...то ошибка сокращается на много!!!.
Переведите на русский. Если проект не секретный, приложите код, с пояснениями по тексту о конкретной ошибке.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

"Если CodeVision этого не умеет, а оно очень нужно — в очередной раз подумайте, насколько Вам нужен компилятор, котрый такого не умеет. Вот так вот потихоньку и поймёте, почему многие называют CodeVisionAVR не «компилятором языка С», а «компилятором С-подобного языка»"



Вариант первый: Показвает не то значения подставляя в мою формулу значения с f массива

eeprom unsigned int a = 0 ;
eeprom unsigned int b = 0 ;
eeprom unsigned int c = 0;
eeprom unsigned int d = 0 ;
eeprom unsigned int e = 0 ;


eeprom unsigned int f[101]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0};


eeprom unsigned int g[101]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0};



Вариант второй: Работает более менее сностоно. Вычисленное значение близко к реальному


eeprom unsigned int f[101]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0};

eeprom unsigned int a = 0 ;
eeprom unsigned int b = 0 ;
eeprom unsigned int c = 0;
eeprom unsigned int d = 0 ;
eeprom unsigned int e = 0 ;

eeprom unsigned int g[101]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0};



Дайте мне ответ!!!
Почему вставляя между массивами инициализацию этих переменных, то результат вычисления меняется??

Сейчас, стер слово eeprom , тоесть создал массивы не в EEPROM, такая же хрень!!!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

Amstron
Попробую перевести сам:
Скорее всего вы отлаживаете в AVR Studio. И в отладчике - в отлаживаемой программе - получаете не те данные, которые записаны в EEPROM и которые есть в файле *.dep.
На такие "грабли" уже наступали и была подсказка ARV о причине.
Чтобы AVR Studio "видел" данные EEPROM, их, после перехода в отладчик, необходимо загрузить: Меню >> Debug >> Up/Download Memory. В появившемся окне выбрать EEPROM, далее выбрать файл проекта *.eep и загрузить >> Load from File. Теперь все данные EEPROM, записанные туда при инициализации переменных, будут доступны в отладке. В процессе отладки, изменяя далее в программе данные в EEPROM, можно их добавить в тот же файл *.eep, той же процедурой, что описана выше, только другой конечной операцией >> Save to File.
Ответить

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