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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Demon писал(а):Как в CVAVR произвести сдвиг с переносом (в ассемблере ROR и ROL)

я думаю это будет довольно сложная конструкция если просто на си делать.
Как то так

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

 //сдвиг вправо с переносом. 
if(number&0x01){(number>>1)|(0x80)}
else {number>>1;}
 
проверьте, код только что придумал.Проверить пока негде.
Demon писал(а):
как указать чтобы переменная помещалась в один из РОН
А оно вам надо?
Вообще ассемблер CVAVR позволяет напрямую поместить переменную РОН в точнее можно посмотреть в справке.
Реклама
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Всем привет. Возникла проблема с Eeprom. Насколько я знаю, в CVavr для работы с eeprom достаточно любую переменную объявить так: eeprom int x; - и далее работать как с обычной переменной. В моей программе, есть таймер - прерывание по переполнению T0, где при нуле на ноге B0 у нас записываются несколько массивов в Eeprom. Эта ножка Atmega8 должна обнаружить пропажу питания ранее, чем МК выключиться (для этого после стабилизатора я ставлю кондер большой емкости, а перед стабилизатором через делитель завожу B.0). Как показывает Proteus данные вроде записываются...
В реальности при начальном старте Atmega8, когда в Eeprom на местах переменных должны храниться 0, почему-то значения FF, т.е. 255....
Когда программу компилирую...выдается hex и eep файлы, которые я заливаю в МК. Разве при этом в eeprom не должны появиться по определенным адресам 0???
Все что я пытаюсь сделать - записать в eeprom перед пропажей питания и потом снова считать при вкл. МК. Если мои действия не верны, то расскажите где ошибка...Вот необходимая часть исходника:
Изображение
А вот проект:
Вложения
Prob.rar
(28.84 КБ) 166 скачиваний
Самое гениальное - всегда самое простое
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Насколько я понял как раз 0xFF всегда и есть начальное значение.Даже когда флеш читаешь пустую всегда это значение.
Для того, чтобы в нужной ячейке при первом запуске было нужное значение, необходимо написать

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

eeprom unsigned char ee_value=156;//где 156 это начальное значение  
И потом залить это в еепром отдельной от заливки во флеш операцией.
Последний раз редактировалось vitalik_1984 Ср окт 10, 2012 15:24:25, всего редактировалось 1 раз.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Ок. Я понял. Осталось пару тонкостей:
1) Я объявил переменную в eeprom но при объявлении не присвоил значений. Т.е. получается, к eeprom пока, что мы не обращаемся, но...при компиляции CVavr выдает файл *.eep с таким содержанием: :00000001FF -что это такое и нужно ли записывать в eeprom у Atmega8?
Самое гениальное - всегда самое простое
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

что это такое и нужно ли записывать в eeprom у Atmega8?
... это зависит от самой программы. Если в eeprom хранятся константы, то нет, а если eeprom изменяется в процессе работы, то очевидно да.....
Реклама
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

ок. Спасибо) У меня там хранятся переменные)
Самое гениальное - всегда самое простое
Реклама
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Сегодня приступил к изучению AVR studio ver.4.15. Пошагово разобрался - все классно работает....только объясните мне вот такой момент: когда работаю с eeprom (в ходе программы) значения и записываются и читаются отлично. Но...почему-то AVRstudio показывает что в памяти SRAM у переменной значение 370 (при чтении) и 460(при записи), когда в Eeprom оно реальное и равно 33! И программа обрабатывает его как 33 (выполняется цикл при этом значении) .Откуда такие значения в SRAM появляются?
Самое гениальное - всегда самое простое
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Непонятно что вы имеете ввиду.вроде записываете в еепром, а значения смотрите в SRAM.Без кода не разобраться сразу.Может вы не соблюли знаковость или размерность и поэтому такие непонятки?К примеру если число двухбайтное, а читается только один байт из этого числа.
Какой хоть язык то?
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Язык Си. Программа написана в CVavr...А на счет чтения в SRAM...помимо значений в eeprom, AVRstudio показывает эту же переменную в SRAM - мне не понятно это.. Завтра выкину весь проект, чтобы вы смогли увидеть все сами! Размерности я соблюдал...так думаю я)
Самое гениальное - всегда самое простое
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Вот весь проект вместе с проектом в AVRstudio.
Prob2.rar
(31.22 КБ) 154 скачивания
Также прикрепляю скрин для наглядности Изображение
Там четко видно, что переменная status в SRAM равна 89, а в Eeprom значение 21 (в 16-м коде) или 33 (в 10с/с).
Самое гениальное - всегда самое простое
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Поразительно!Вы считаете, что можно вот так просто код из CVAVR поместить в студию и все заработает?Во первых в студии нет зарезервированного слова eeprom вместо него нужно использовать EEMEM это макрос, прописанный в заголовочном файле eemem.h
А прерывания у вас вообще работают?В студии совсем другое объявление прерываний.

Вообще для студии есть отдельная ветка.Нужен качественный перевод из версии CVAVR в версию для студии.
Вот тема про еепром в студии/винавр/GCC
Аватара пользователя
U235
Встал на лапы
Сообщения: 135
Зарегистрирован: Вт фев 21, 2012 20:42:26
Откуда: Санкт-Петербург, Россия, Земля

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

Сообщение U235 »

vitalik_1984 писал(а):Поразительно!Вы считаете, что можно вот так просто код из CVAVR поместить в студию и все заработает?
Речь, видимо, идёт о использовании симулятора из студии для прогона прошивки, полученной в кодевижне.
И тут может проявиться особенность интерпретации адресов, заточенная под GCC. То есть студия считает, что всякая объявленная переменная располагается в ОЗУ. Такая вот версия. :)
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Я не просто считаю, что можно проект из CVAvr поместить в студию, я знаю, что они заточены друг для друга под это!!! Avr studio прекрасно понимает написанное и перегоняет в свой файл, с которым работает!!! Прерывания отлично работают!! У меня все работает, за искл. того, на счет чего я поднял вопрос...просто я не знаю ещё всех примочек и как происходит обработка в памяти...вот и возник вопрос...
А на счет перегона - спасибо я изучу тонкости. Просто в CVavr есть встроенный Debbuger, который является файлом студии!
Самое гениальное - всегда самое простое
Аватара пользователя
Garin
Потрогал лапой паяльник
Сообщения: 351
Зарегистрирован: Пн сен 12, 2011 12:13:46

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

Сообщение Garin »

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

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

Сообщение vitalik_1984 »

U235 писал(а): Речь, видимо, идёт о использовании симулятора из студии для прогона прошивки, полученной в кодевижне.

О, так с этого и нужно было начинать :)))
Сегодня приступил к изучению AVR studio ver.4.15.
Вот эта фраза меня видимо смутила. Забыл что симуляция Кода CV есть в студии
U235 писал(а):
То есть студия считает, что всякая объявленная переменная располагается в ОЗУ. Такая вот версия. :)
Чет я сомневаюсь в этом.Хоть может быть.
Я не просто считаю, что можно проект из CVAvr поместить в студию, я знаю, что они заточены друг для друга под это!!!
Я бы не так сказал, скорее CVAVR выпускает файл, который поддерживает студия.
А на счет перегона - спасибо я изучу тонкости. Просто в CVavr есть встроенный Debbuger, который является файлом студии!
Насчет перегона можно забыть, если собираетесь работать в CVAVR.А дебаггера как раз он не имеет встроенного, поэтому сделана функция перевода в студию.
путь к проекту прописан кирилицей, у меня такой номер чет не проходит...
Это кстати пунктик компилятора GCC/WINAVR насколько я понял.Студия нормально файлы открывает.И CVAVR тоже нормально туда компилирует.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

В общем вы все меня правильно поняли...Странно что проект написанный кириллицей не открывается.Кстати, сегодня проверил пробный проект в реальности - с Eeprom порядок. Т.е. студия, а точнее тот дебагер, не врал - все работает! Но почему все-таки при чтении Eeprom у нас в SRAM появляется странное значение я так и не понял.
Самое гениальное - всегда самое простое
audiserg
Родился
Сообщения: 1
Зарегистрирован: Пн окт 15, 2012 15:46:05

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

Сообщение audiserg »

Всем привет. Дублирую пост с RU_radio_electr.
Началось все с того что решил прикрутить протопотоки для TINY2313, т.к. даже минимальная MRTOS жрет половину флеши.
В Си для микроконтроллеров полный 0 (когда то в институте писал в борланде), решил начать с CVavr т.к. есть обучалки по нему неплохие, правда с кучей рекламы, я думаю вы поняли(это к тому почему не GCC). Так вот протопотоки не заработали сразу, ругаясь на

PT_INIT(&pt) что разворачивается в (pt)->lc=0;
codevision требовал перед -> указатель на структуру. Решилось дело вводом доп переменной:

static struct pt pt1;
static struct pt *ptrs;
ptrs=&pt1
PT_INIT(ptrs);
Программка было зажужжала в протеусе, но после пары секунд работы вываливаются ворнинги. путем 3 часовых сексов выяснилось что :
(pt)->lc = 45
CVavr преобразует в:
1 LDD R26,Y+5
2 LDI R30,LOW(45)
3 LDI R31,HIGH(45)
4 ST X+,R30
5 ST X,R31
Оказалось что старший регистр r27 регистровой пары X , принимает значения в процессе предыдущих сложений long int где то в теле программы, а при загрузке адреса переменной(строка 1) грузиться только младший регистр а старший не грузиться,не очищается и соответственно в какой то момент в место адреса 88 попадаю на 188.
Теперь вопросы:
1.Можно ли что нибудь с этим сделать на CVavr что бы не переписывать всю библиотеку PROTOTHREADS , или забыть и уйти на студию с GCC пока не поздно? (оптимизации в настройках CV ставил разные, не помогает.) .
2. Может я первоначально испортил код, когда ввел переменную при инициализации?
3.Зачем строка 3 и 5 Если число 1 байт?????? Он мне так всю память сожрет гад.
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

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

Сообщение a.garkin »

Привет всем!

Дано версия 2.05
Как подключить lcd_rus?

Скопировал как обычно меняю в тестовом проекте alcd.h на lcd_rus.h и падает при компиляции?

Error: C:\Project\Termostat\DS18B20\ds18b20.c(55): can't open #include file: lcd_rus.h
Error: C:\Project\Termostat\DS18B20\ds18b20.c(77): undefined symbol 'lcd_init'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(80): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(86): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(95): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(98): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(102): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(207): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(219): undefined symbol 'lcd_clear'
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

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

Сообщение a.garkin »

a.garkin писал(а):Привет всем!

Дано версия 2.05
Как подключить lcd_rus?

Скопировал как обычно меняю в тестовом проекте alcd.h на lcd_rus.h и падает при компиляции?

error occurred during assembly

Error: C:\Project\Termostat\DS18B20\ds18b20.c(55): can't open #include file: lcd_rus.h
Error: C:\Project\Termostat\DS18B20\ds18b20.c(77): undefined symbol 'lcd_init'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(80): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(86): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(95): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(98): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(102): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(207): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(219): undefined symbol 'lcd_clear'
Извиняюсь не туда скопировал... Теперь при правильном пути при компиляции в тестовом родном проекте DS18B20
При этой библиотеки валится:

Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1643): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1644): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1663): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1664): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1667): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1670): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1672): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1674): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1681): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1682): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1684): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1688): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1692): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1699): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1702): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1705): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1714): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1766): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1828): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1832): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1836): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1839): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1840): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1868): Undefined symbol: __lcd_port

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

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

Сообщение pyzhman »

Prior to #include -ing the lcd.h file, you must declare which microcontroller port is used for communication with the LCD module.
The following LCD formats are supported in lcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
Example:
/* the LCD module is connected to PORTC */
#asm
.equ __lcd_port=0x15
#endasm
/* now you can include the LCD Functions */
#include <lcd.h>

Docendo discimus
Ответить

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