Страница 248 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 19, 2013 01:48:40
unalex
svr007 писал(а):Подскажите в чем загвоздка
а так работает?
Код: Выделить всё
unsigned int AB;
unsigned int C = 0x1C2; // 450
...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 19, 2013 06:08:02
Совесть
Хм... есть подозрение, что если откомпилированная программа работает в протеусе, то проблема не в типе данных.
Вполне вероятно что при моделировании вы не затрагиваете какой-то кусок кода, который в железе модифицирует переменную С.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 19, 2013 15:56:06
pokk
Где по смотреть можно как реализованы в CV функции задержки delay_us и delay_ms ?
В файле delay.h что-то не сильно понятно откуда они берутся.
с помощью виндовского поиска (искать слово в файле) нашёл только delay_us в avr_compiler.h но там оно в виде макроса да и не сильно понятно как он там реализован.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 19, 2013 19:29:28
svr007
unalex писал(а):svr007 писал(а):Подскажите в чем загвоздка
а так работает?
Код: Выделить всё
unsigned int AB;
unsigned int C = 0x1C2; // 450
...
вроде как unsigned решила проблему. Странно почему тогда в Протеусе работало.Большое спасибо.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 20, 2013 18:25:31
unalex
изначально переменные объявлены int - все целочисленные типы кроме char, по умолчанию знаковые (signed)
при выполнении AB=(31250/ICP)*30 результат сужается до знакового, в итоге имеем искаженный результат
при объявлении переменных беззнаковыми переполнения не происходит и данные не искажаются
ну а почему протеус все понимает правильно, остается только догадываться
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт мар 21, 2013 18:10:59
pokk
Как инициализировать структуру ?
пишу
Код: Выделить всё
eeprom struct MY_str
{
unsigned char N: 8; // номер штыря
unsigned long CKZ: 16; // расчётное среднеквадратическое значение
unsigned int Ky: 8; // коэффициент усиления
unsigned int CKZ_MS: 16; // С микросхемы среднеквадратическое значение
}Tstr[2];
eeprom Tstr mButt_1[2] = {{0,0,0,0},{0,0,0,0}};
CV ругается на последнюю строчку что скобочки { нету
Если там не двойной массив а по больше 100 как всем элементам присвоить нули ?
а вот так вот всё нормально
Код: Выделить всё
eeprom struct MY_str
{
unsigned char N: 8; // номер штыря
unsigned long CKZ: 16; // расчётное среднеквадратическое значение
unsigned int Ky: 8; // коэффициент усиления
unsigned int CKZ_MS: 16; // С микросхемы среднеквадратическое значение
}Tstr[2]={{1,2,3,4},{9,6,7,8}};
только если пытаюсь вывести какое-нибудь значение то он выводит 255 или примерно 65000
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт мар 21, 2013 19:27:11
Аlex
Нужно сначала создать тип-структуру, потом переменную этого типа.
Код: Выделить всё
typedef struct{
int a;
char b;
double c;
}m_t;
m_t m_struct ={1, 2, 0.1}; // Создаём структуру m_t с именем m_struct
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт мар 21, 2013 20:27:31
pokk
Благодарю за помощь всё получилось.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 25, 2013 16:00:44
Amstron
Подскажите в чем дело?
Выдает ошибку. на прошлой версии 2,05 отлично работало в этом месте.
Решил перейти на новую версию из-за того, что появились очень странные глюки, где даже я программу и не правил....
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 25, 2013 17:51:28
java
Вот сейчас задам совсем чайниковский вопрос

На первых страницах не нашёл,а двести с лишним просматривать...
Вобщем давно не брался за прошивку атмеги8, и всё позабыл. Открываю программу, подключаю программатор, вставляю в него микропроцессор, выставляю фьюзы, нажимаю программ Алл, и он сразу начинает чтото шить, даже не спрашивая путь к файлу,который у меня лежит на рабочем столе. Что не так? Что он шьёт? Куда нужно нажать с самого начала? И ещё, есть несколько микропроцессоров, на которые я когда-то что-то писал, как стереть? Что нажать?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 25, 2013 19:33:21
vitalik_1984
Так этот режим нужно еще настроить перед тем как он сможет работать, видимо просто последний путь к файлу запомнил, который раньше прошивался его и льет.
Вообще опасно сначала программ олл нажимать, вдруг там фьюзы неправильно выставлены.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 26, 2013 07:11:06
pokk
Начал СV ругаться на команду RCALL в ассемблере.
"Error: E:\Documents and Settings\Максим\Мои документы\Dropbox\Public\sintezator\menu\MENU+BUTT\List\ADC.asm(1815): Relative branch out of reach"
Примерно понял почему ошибка выскакивает. Команд RCALL не сильно далеко может переходить видимо сильно много кода она не достаёт.Так ? Только как от этого избавится
Это стало появляться после того как внёс одну функцию(свою) в главный цикл.
7. Вопрос:
Не могу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм
(даже если они пустые) на brne, breq?
Ответ:
Команды условных переходов brne и breq имеют "дальность работы" от -64 до +63. У Вас расстояние до метки больше, поэтому ассемблер и выдает ошибку.
Используйте RCALL и RJMP, у которых дальность действия составляет от -2047 до +2047. И не строк, а команд (слов по 2 байта).
Ошибку понял правильно только как быть. Он ругается на 4 СALL которые находятся в прерывании по AЦП а этот кусок кода находится далековато от главного цикла. их разделяют функции.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 26, 2013 08:58:24
java
Точно, он старый терморегулятор льёт.С прошивкой разобрался, нужно сначало нажать файл, потом лоад флешь, и открыть файл прошивки, а потом жать програм алл.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 26, 2013 18:20:00
Amstron
Очень нужна помощь разобраться с EEPROM!
У меня написана программа, которая отлично работает.
Но, мне захотелось некоторую переменную сохранять в энергонезависимой памяти.
Вопрос в какой памяти сохранять flash или eeprom ?
В чем отличие flash от eeprom?
Я решил сохранять в eeprom и написал следующее:
Спойлер
eeprom int tochka ;
eeprom int obhcil ;
когда переменные работают в RAM проблем нет.
Когда в eeprom, то проблема возникает после перезапуска контроллера!!!
такое ощущение (отлаживаю на реальном устройстве), что меняется значение в другой переменной (в массиве), который храниться в EEPROM.
Подскажите, может быть надо подругому объявлять или конкретно адреса присваивать?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 26, 2013 19:07:33
pyzhman
Во флэшь переменные не хранятся, только константы(согласен, согласен, можно изгальнуться, но здесь не тот случай). Ибо флэшь представляет собой постоянное запоминающее устройство. А вот в еепром - легко, т.к. это энергонезависимая память. Объявлены корректно, но читали ли вы еррату к еепрому?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 26, 2013 19:26:23
Amstron
pyzhman писал(а):Объявлены корректно, но читали ли вы еррату к еепрому?
Что конкретно от меня требуется?
Отлаживаю в устройстве. Больше неи чем пользоваться не умею (((
Хотя программа уже 9288 байт.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 26, 2013 22:10:18
vitalik_1984
Amstron тема про сохранение в ЕЕПРОМ уже разжевана и облизана до нельзя. Нужно работать с оперативной памятью. На то она и оперативная, а сохранять при необходимости поскольку число перезаписи для ЕЕПРОМ ограничено. Например при пропаже питания, пока еще не сильно разряжен конденсатор можно сохранить важные переменные.
Так же желательно проверять не совпадает ли случайно значение в памяти с тем, что мы хотим сохранить: Если они равны, то зачем тратить ресурс?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 26, 2013 23:47:00
Amstron
vitalik_1984 писал(а):Amstron тема про сохранение в ЕЕПРОМ уже разжевана и облизана до нельзя. Нужно работать с оперативной памятью. На то она и оперативная, а сохранять при необходимости поскольку число перезаписи для ЕЕПРОМ ограничено. Например при пропаже питания, пока еще не сильно разряжен конденсатор можно сохранить важные переменные.
Так же желательно проверять не совпадает ли случайно значение в памяти с тем, что мы хотим сохранить: Если они равны, то зачем тратить ресурс?
Согласен. У меня в еепром сохраняется по нажатию кнопки. Но не работает...
Еще заметил, что глюк зависит от того в какой последовательности объявить переменные.
Есть ли тема в которой именно это разжованно?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 27, 2013 02:34:21
unalex
Amstron писал(а):Есть ли тема в которой именно это разжованно?
http://easyelectronics.ru/avr-uchebnyj- ... eprom.html
http://samou4ka.net/page/eeprom-v-mikrokontrollerah-avr
это ссылки выдал Google на первой странице поиска, по-моему довольно доходчиво расписано
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 27, 2013 04:47:40
Amstron
Не в одной из сылок не идет речи о нашем компиляторе CVAVR !!!
Я не спроста задал вопрос в этой теме!
для меня вопрос еще актуален!
Спойлер
Очень нужна помощь разобраться с EEPROM!
У меня написана программа, которая отлично работает.
Но, мне захотелось некоторую переменную сохранять в энергонезависимой памяти.
Вопрос в какой памяти сохранять flash или eeprom ?
В чем отличие flash от eeprom?
Я решил сохранять в eeprom и написал следующее:
когда переменные работают в RAM проблем нет.
Когда в eeprom, то проблема возникает после перезапуска контроллера!!!
такое ощущение (отлаживаю на реальном устройстве), что меняется значение в другой переменной (в массиве), который храниться в EEPROM.
Подскажите, может быть надо подругому объявлять или конкретно адреса присваивать?