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

Обсуждаем контроллеры компании Atmel.
Ответить
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Сообщение СЦБист »

авр студия поддерживает си только если установлен вин авр.
Реклама
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

ПТУ-шник писал(а):Просто путь к инклуду должен быть. У меня все эти аппноты в этой папке лежат. Только я программирую на ассемблере.
Угу. Только ассемблер Студии кушает и запись в Сишной нотации - .include <m8adef.inc> (ну, почти в Сишной, точка вместо "#" - это мелочи :) ), считая при этом, что включаемый файл лежит в системной папке (Appnotes). Я когда-то, начиная осваивать асм, без всякой задней мысли, по Сишной привычке, подключил таким образом m8def.inc, Студия сожрала эту запись с аппетитом, с тех пор я этим и пользуюсь всегда. В документах я этого не встречал, хотя, скорее всего, где-нибудь это упоминается...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18809
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

afz писал(а):ну, почти в Сишной, точка вместо "#" - это мелочи
avrassembler2 кушает и полностью сишную нотацию, с решетками. причем практически весь препроцессор у него такой же, как в Си.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Чт июн 12, 2014 05:32:20

Сообщение Сем30 »

Помогите с LCD!!!!!
Хочу вывести русскую надпись в позицию 1,2

lcd_gotoxy (1,2);
lcd_putc(224); lcd_putc(112); lcd_putc(97);

но студия 6 почемуто не принемает lcd_gotoxy (1,2); Хотя при вводе предлагает ее выбрать чтоб не писать полностью самому
без этой строки надпись выводится

выдает ошибку expected identifier or '(' before numeric constant



нужна библиотека для studio 6 для работы с внешней EEPROM 24c64 на си. Надо чтоб в коде для записи и чтения была просто какая ни буть переменная и влазило в нее не 8 а 16 бит чтоб не заморачиваться двойной записью по разным адресам и желательно чтоб была функция проверки на запись и если ячейка померла то записывало в другую.
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 414
Зарегистрирован: Ср янв 26, 2011 13:43:30
Откуда: С того берега моря

Сообщение Jman »

Небольшой вопрос к гуру. Ребята как можно организовать строчку из Codevision Avr в Atmel Studio;
CVAVR

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


#define PULSE PORTA.3

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    TCNT0=0xF8;                     // 500 Гц на выходе;
    PULSE = ~PULSE ;
}
В Atmel studio сделал так

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

#define PULSE (1<<PINA3)

ISR(TIM0_OVF_vect)
{
    PORTA |=PULSE; 
    TCNT0=0xF8;           // значение для переполнения - получаем 500 Гц на выходе;
    PORTA &= ~PULSE;
}
Это правильно?
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18809
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

правильно то оно правильно, да только можно и лучше...

судя по коду вам больше подошел бы режим CTC таймера с соответствующим прерыванием - не надо было бы делать TCNT0=0xF8;
так же в студии для замены (1<<PINA3) предназначен макрос _BV(PINA3), соответственно нет смысла вводить PULSE

кстати, первый код генерирует меандр, а второй выдает короткие импульсы. для меандра есть смысл делать PORTA ^= _BV(PINA3); или воспользоваться особенностью "новой" архитектуры портов AVR и делать PINA = _BV(PINA3);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 414
Зарегистрирован: Ср янв 26, 2011 13:43:30
Откуда: С того берега моря

Сообщение Jman »

особенностью "новой" архитектуры портов AVR
Где читать?
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18809
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

читать в даташитах.
"старые" МК так не умеют, новые (с индексами А или Р - уточнять по даташиту) умеют.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 414
Зарегистрирован: Ср янв 26, 2011 13:43:30
Откуда: С того берега моря

Сообщение Jman »

для меандра есть смысл делать

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

ISR(TIM0_OVF_vect)
{
    PORTA ^= _BV(PINA3);
}
Как правильно сделать меандр с тем кодом что у меня есть? Нужна-ли бибка для функции _BV в Atmel Studio?
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18809
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

_BV - это макрос, стандартный для avr-gcc. как у вас в последнем сообщении должно работать. разумеется, в самом начале программы надо #include <avr/io.h>
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 414
Зарегистрирован: Ср янв 26, 2011 13:43:30
Откуда: С того берега моря

Сообщение Jman »

Работает но подчеркивается. Сделал так

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

#include <avr/sfr_defs.h>

ISR(TIM0_OVF_vect)
{
	TCNT0=0xF8;           // значение для переполнения - получаем 500 Гц на выходе;
    PORTA ^= _BV(PINA3);
}
Есть на выходе меандр с нужной частотой и _BV не подчеркивается.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Чт июн 12, 2014 05:32:20

Сообщение Сем30 »

Не знаю как правильно объяснить но попытаюсь. Интерисует меня память EEPROM. В программе использую просто переменную и при старте программы в самой студии или в протеусе моя переменная в EEPROM имеет значение 0 но мне надо чтоб в реальном контроллере при первом запуске она была уже прописана в EEPROM т.к. она в ходе работы будет меняться и нельзя чтоб при старте контроллера она перезаписывалась. Как в студии, протеусе прописать что в данной переменной EEPROM лежит именно именно 2. Надо ли в студии переменную привязывать к конкретной ячейке и как вообще объявить переменную привязанную к конкретной ячейке?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18809
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

в "студии" - это означает в AVR-GCC.
1. в AVR-GCC для работы с EEPROM необходимо подключить заголовочник <avr/eeprom.h>
2. в коде надо описать "переменную" с префиксом EEMEM:

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

EEMEM int variable = 257;
3. если при компиляции задан режим создания файла для прошивания EEPROM, то будет создан файл *.eep, который по сути есть обычный HEX - если этот файл прошить в EEPROM микроконтроллера, то вот вам и будет "значение ячейки в программе из EEPROM"
4. работать с переменными, определенными по п.2, надо при помощи специальных функций: eeprom_read_ХХХ и eeprom_write_XXX, где ХХХ - может быть byte, word, dword или float - для работы с переменными соответственного типа

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

if(eeprom_read_word(&variable) == 257){// проверка содержимого той самой переменной
   eeprom_write_word(&variable, 1234); // задаем новое значение переменной
}
5. так как ресурс EEPROM не безграничный, надо стараться писать туда пореже. рекомендуется использовать вариант функций для записи, которая прежде чем записать, проверят содержимое ячеек EEPROM: если значение не изменилось, запись не делается. так работают функции eeprom_update_XXX
6. следует помнить, что работать с этими функциями в обработчиках прерываний надо с особой осторожностью: функции не реентерабельны!
7. следует помнить, что функция записи может занять время до 8 миллисекунд при работе с обычным int
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 134
Зарегистрирован: Чт ноя 17, 2011 00:57:23
Откуда: Харьков

Сообщение Q-ti »

Добрый вечер подскажите в чем проблема создал проект выбрал Atmega32 , пытаюсь откомпилировать пустой проект , а у меня выскакивает ошибка . В чем проблема ? Программа Avr Studio версия 4.19 .
Вложения
1.JPG
(195.75 КБ) 575 скачиваний
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18809
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Родился
Сообщения: 2
Зарегистрирован: Вс сен 04, 2016 08:42:15

Сообщение knoppix »

А вот вопрос, как использовать в AVR Studio, такую вещь как Linker->Memory Setting.
Требуется чтобы МК под определенные данные в EEPROM выделял строго определенные ячейки (накосячил я так немного с кодом, что автоматические выделение с помощью EEMEM не проходит).
Первая мысль была в Memory Setting разделе EEPROM задать два новых сегмента, допустим:

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

.eeprom_one 0x00
.eeprom_two 0x10
А затем определить их как:

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

#define EEPROM_ONE    __attribute__((section (".eeprom_one")))
#define EEPROM_TWO   __attribute__((section (".eeprom_two")))
Указатели на эти ячейки памяти определить как:

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

uint8_t pointer_one EEPROM_ONE;
uint8_t pointer_two EEPROM_TWO;
И потом уже обращаться по ним. Ну и что-то не работает ничего, возможно новые секции нужно как-то отдельно выделять в линкере, или еще что-то? Я так-то больше по ассемблеру, и то что иногда происходит в программах написанных на языках высокого уровня меня немного пугает.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Можно обойтись без EEPROM-переменных, используя адреса напрямую. Вроде такого

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

#define VAR1 ((const unsigned char*)0x5A) //переменная по адресу 0x5A
char var1 = eeprom_read_byte( VAR1 );
Родился
Сообщения: 2
Зарегистрирован: Вс сен 04, 2016 08:42:15

Сообщение knoppix »

COKPOWEHEU писал(а):Можно обойтись без EEPROM-переменных, используя адреса напрямую. Вроде такого

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

#define VAR1 ((const unsigned char*)0x5A) //переменная по адресу 0x5A
char var1 = eeprom_read_byte( VAR1 );
Такой вариант я пробовал, в целом можно сказать что проблема решена, но осталось желание разобраться именно с особенностью того, что я писал выше. Потому как если указать:

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

#define EEPROM_ONE    __attribute__((section (".eeprom")))
И потом в окне Linker->Memory Setting менять значение адреса, то все работает корректно, пишется куда укажешь. Получается что сегмент .eeprom в отличии .eeprom_one и .eeprom_two, где-то явно определяется. Но вот как, я не нашел.
Мучитель микросхем
Сообщения: 480
Зарегистрирован: Ср июн 29, 2011 14:30:41

Сообщение blazer »

Решил подправить прошивку по рекомендации автора. Обрадовался, я(в AVR Studio 4 лишь МК прошивал, с программированием не знаком совершенно)– оказывается просто всё! «запускаете компиллятор (например AVRASM2) и получаете готовый для программирования HEX- файл. Удобнее это делать, в среде программирования, (например AVR Studio 4) по команде "Build"".
Ну, открыть-то нужный файл сумел, а дальше … «курить» AVR Studio нужно. Может быть кто укажет конкретно, где именно об этой процедуре прочитать можно. Второй день бьюсь и никак не найду инструкцию этой проги.
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

blazer писал(а):где именно об этой процедуре прочитать можно.
раз.Меню-Help-AVR Studio User Guide
два.http://radiokot.ru/start/mcu_fpga/avr/02/
три.Программирование на языке С для AVR и PIC микроконтроллеров. Там немного картинок.
Ответить

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