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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

svr007 писал(а):Подскажите в чем загвоздка


а так работает?

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

unsigned int AB;
unsigned int C = 0x1C2; // 450
...
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

Хм... есть подозрение, что если откомпилированная программа работает в протеусе, то проблема не в типе данных.
Вполне вероятно что при моделировании вы не затрагиваете какой-то кусок кода, который в железе модифицирует переменную С.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Где по смотреть можно как реализованы в CV функции задержки delay_us и delay_ms ?
В файле delay.h что-то не сильно понятно откуда они берутся.

с помощью виндовского поиска (искать слово в файле) нашёл только delay_us в avr_compiler.h но там оно в виде макроса да и не сильно понятно как он там реализован.
svr007
Родился
Сообщения: 15
Зарегистрирован: Пт ноя 12, 2010 11:58:37

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

Сообщение svr007 »

unalex писал(а):
svr007 писал(а):Подскажите в чем загвоздка


а так работает?

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

unsigned int AB;
unsigned int C = 0x1C2; // 450
...

вроде как unsigned решила проблему. Странно почему тогда в Протеусе работало.Большое спасибо.
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

изначально переменные объявлены int - все целочисленные типы кроме char, по умолчанию знаковые (signed)

при выполнении AB=(31250/ICP)*30 результат сужается до знакового, в итоге имеем искаженный результат

при объявлении переменных беззнаковыми переполнения не происходит и данные не искажаются

ну а почему протеус все понимает правильно, остается только догадываться
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение 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 ругается на последнюю строчку что скобочки { нету :kill:
Если там не двойной массив а по больше 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
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Нужно сначала создать тип-структуру, потом переменную этого типа.

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

typedef struct{
   int    a;
   char   b;
   double c;
}m_t;

m_t   m_struct ={1, 2, 0.1};  // Создаём структуру m_t с именем m_struct
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

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

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

Сообщение Amstron »

Подскажите в чем дело?
Выдает ошибку. на прошлой версии 2,05 отлично работало в этом месте.
Решил перейти на новую версию из-за того, что появились очень странные глюки, где даже я программу и не правил....

CodeVisionAVR33.jpeg
(116.15 КБ) 196 скачиваний
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

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

Сообщение java »

Вот сейчас задам совсем чайниковский вопрос :)) На первых страницах не нашёл,а двести с лишним просматривать...
Вобщем давно не брался за прошивку атмеги8, и всё позабыл. Открываю программу, подключаю программатор, вставляю в него микропроцессор, выставляю фьюзы, нажимаю программ Алл, и он сразу начинает чтото шить, даже не спрашивая путь к файлу,который у меня лежит на рабочем столе. Что не так? Что он шьёт? Куда нужно нажать с самого начала? И ещё, есть несколько микропроцессоров, на которые я когда-то что-то писал, как стереть? Что нажать?
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Так этот режим нужно еще настроить перед тем как он сможет работать, видимо просто последний путь к файлу запомнил, который раньше прошивался его и льет.
Вообще опасно сначала программ олл нажимать, вдруг там фьюзы неправильно выставлены.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Начал СV ругаться на команду RCALL в ассемблере.
"Error: E:\Documents and Settings\Максим\Мои документы\Dropbox\Public\sintezator\menu\MENU+BUTT\List\ADC.asm(1815): Relative branch out of reach"

Примерно понял почему ошибка выскакивает. Команд RCALL не сильно далеко может переходить видимо сильно много кода она не достаёт.Так ? Только как от этого избавится :dont_know:
Это стало появляться после того как внёс одну функцию(свою) в главный цикл.

7. Вопрос:
Не могу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм
(даже если они пустые) на brne, breq?
Ответ:
Команды условных переходов brne и breq имеют "дальность работы" от -64 до +63. У Вас расстояние до метки больше, поэтому ассемблер и выдает ошибку.
Используйте RCALL и RJMP, у которых дальность действия составляет от -2047 до +2047. И не строк, а команд (слов по 2 байта).

Ошибку понял правильно только как быть. Он ругается на 4 СALL которые находятся в прерывании по AЦП а этот кусок кода находится далековато от главного цикла. их разделяют функции.
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

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

Сообщение java »

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

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

Сообщение Amstron »

Очень нужна помощь разобраться с EEPROM!

У меня написана программа, которая отлично работает.
Но, мне захотелось некоторую переменную сохранять в энергонезависимой памяти.
Вопрос в какой памяти сохранять flash или eeprom ?


В чем отличие flash от eeprom?

Я решил сохранять в eeprom и написал следующее:

Спойлерeeprom int tochka ;
eeprom int obhcil ;


когда переменные работают в RAM проблем нет.
Когда в eeprom, то проблема возникает после перезапуска контроллера!!!

такое ощущение (отлаживаю на реальном устройстве), что меняется значение в другой переменной (в массиве), который храниться в EEPROM.

Подскажите, может быть надо подругому объявлять или конкретно адреса присваивать?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Во флэшь переменные не хранятся, только константы(согласен, согласен, можно изгальнуться, но здесь не тот случай). Ибо флэшь представляет собой постоянное запоминающее устройство. А вот в еепром - легко, т.к. это энергонезависимая память. Объявлены корректно, но читали ли вы еррату к еепрому?
Docendo discimus
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

pyzhman писал(а):Объявлены корректно, но читали ли вы еррату к еепрому?


Что конкретно от меня требуется?
Отлаживаю в устройстве. Больше неи чем пользоваться не умею (((
Хотя программа уже 9288 байт.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

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

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

Сообщение Amstron »

vitalik_1984 писал(а):Amstron тема про сохранение в ЕЕПРОМ уже разжевана и облизана до нельзя. Нужно работать с оперативной памятью. На то она и оперативная, а сохранять при необходимости поскольку число перезаписи для ЕЕПРОМ ограничено. Например при пропаже питания, пока еще не сильно разряжен конденсатор можно сохранить важные переменные.
Так же желательно проверять не совпадает ли случайно значение в памяти с тем, что мы хотим сохранить: Если они равны, то зачем тратить ресурс?

Согласен. У меня в еепром сохраняется по нажатию кнопки. Но не работает...
Еще заметил, что глюк зависит от того в какой последовательности объявить переменные.
Есть ли тема в которой именно это разжованно?
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Amstron писал(а):Есть ли тема в которой именно это разжованно?


http://easyelectronics.ru/avr-uchebnyj- ... eprom.html
http://samou4ka.net/page/eeprom-v-mikrokontrollerah-avr

это ссылки выдал Google на первой странице поиска, по-моему довольно доходчиво расписано
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

unalex писал(а):
Amstron писал(а):Есть ли тема в которой именно это разжованно?


http://easyelectronics.ru/avr-uchebnyj- ... eprom.html
http://samou4ka.net/page/eeprom-v-mikrokontrollerah-avr

это ссылки выдал Google на первой странице поиска, по-моему довольно доходчиво расписано

Не в одной из сылок не идет речи о нашем компиляторе CVAVR !!!
Я не спроста задал вопрос в этой теме!

для меня вопрос еще актуален!

СпойлерОчень нужна помощь разобраться с EEPROM!

У меня написана программа, которая отлично работает.
Но, мне захотелось некоторую переменную сохранять в энергонезависимой памяти.
Вопрос в какой памяти сохранять flash или eeprom ?

В чем отличие flash от eeprom?

Я решил сохранять в eeprom и написал следующее:




когда переменные работают в RAM проблем нет.
Когда в eeprom, то проблема возникает после перезапуска контроллера!!!

такое ощущение (отлаживаю на реальном устройстве), что меняется значение в другой переменной (в массиве), который храниться в EEPROM.

Подскажите, может быть надо подругому объявлять или конкретно адреса присваивать?
Ответить

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