Страница 119 из 160
Re: AVR studio в вопросах и ответах
Добавлено: Вс авг 28, 2016 10:38:30
СЦБист
авр студия поддерживает си только если установлен вин авр.
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 00:39:25
afz
ПТУ-шник писал(а):Просто путь к инклуду должен быть. У меня все эти аппноты в этой папке лежат. Только я программирую на ассемблере.
Угу. Только ассемблер Студии кушает и запись в Сишной нотации - .include <m8adef.inc> (ну, почти в Сишной, точка вместо "#" - это мелочи

), считая при этом, что включаемый файл лежит в системной папке (Appnotes). Я когда-то, начиная осваивать асм, без всякой задней мысли, по Сишной привычке, подключил таким образом m8def.inc, Студия сожрала эту запись с аппетитом, с тех пор я этим и пользуюсь всегда. В документах я этого не встречал, хотя, скорее всего, где-нибудь это упоминается...
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 06:40:59
ARV
afz писал(а):ну, почти в Сишной, точка вместо "#" - это мелочи
avrassembler2 кушает и полностью сишную нотацию, с решетками. причем практически весь препроцессор у него такой же, как в Си.
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 10:20:06
Сем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 бит чтоб не заморачиваться двойной записью по разным адресам и желательно чтоб была функция проверки на запись и если ячейка померла то записывало в другую.
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 11:46:18
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;
}
Это правильно?
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 12:06:46
ARV
правильно то оно правильно, да только можно и лучше...
судя по коду вам больше подошел бы режим CTC таймера с соответствующим прерыванием - не надо было бы делать TCNT0=0xF8;
так же в студии для замены (1<<PINA3) предназначен макрос _BV(PINA3), соответственно нет смысла вводить PULSE
кстати, первый код генерирует меандр, а второй выдает короткие импульсы. для меандра есть смысл делать PORTA ^= _BV(PINA3); или воспользоваться особенностью "новой" архитектуры портов AVR и делать PINA = _BV(PINA3);
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 13:06:12
Jman
особенностью "новой" архитектуры портов AVR
Где читать?
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 13:37:17
ARV
читать в даташитах.
"старые" МК так не умеют, новые (с индексами А или Р - уточнять по даташиту) умеют.
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 14:30:15
Jman
для меандра есть смысл делать
Код: Выделить всё
ISR(TIM0_OVF_vect)
{
PORTA ^= _BV(PINA3);
}
Как правильно сделать меандр с тем кодом что у меня есть? Нужна-ли бибка для функции _BV в Atmel Studio?
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 15:01:47
ARV
_BV - это макрос, стандартный для avr-gcc. как у вас в последнем сообщении должно работать. разумеется, в самом начале программы надо #include <avr/io.h>
Re: AVR studio в вопросах и ответах
Добавлено: Ср авг 31, 2016 15:23:58
Jman
Работает но подчеркивается. Сделал так
Код: Выделить всё
#include <avr/sfr_defs.h>
ISR(TIM0_OVF_vect)
{
TCNT0=0xF8; // значение для переполнения - получаем 500 Гц на выходе;
PORTA ^= _BV(PINA3);
}
Есть на выходе меандр с нужной частотой и _BV не подчеркивается.
Re: AVR studio в вопросах и ответах
Добавлено: Чт сен 01, 2016 11:34:14
Сем30
Не знаю как правильно объяснить но попытаюсь. Интерисует меня память EEPROM. В программе использую просто переменную и при старте программы в самой студии или в протеусе моя переменная в EEPROM имеет значение 0 но мне надо чтоб в реальном контроллере при первом запуске она была уже прописана в EEPROM т.к. она в ходе работы будет меняться и нельзя чтоб при старте контроллера она перезаписывалась. Как в студии, протеусе прописать что в данной переменной EEPROM лежит именно именно 2. Надо ли в студии переменную привязывать к конкретной ячейке и как вообще объявить переменную привязанную к конкретной ячейке?
Re: AVR studio в вопросах и ответах
Добавлено: Чт сен 01, 2016 11:44:38
ARV
в "студии" - это означает в AVR-GCC.
1. в AVR-GCC для работы с EEPROM необходимо подключить заголовочник <avr/eeprom.h>
2. в коде надо описать "переменную" с префиксом EEMEM:
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
Re: AVR studio в вопросах и ответах
Добавлено: Чт сен 01, 2016 19:57:41
Q-ti
Добрый вечер подскажите в чем проблема создал проект выбрал Atmega32 , пытаюсь откомпилировать пустой проект , а у меня выскакивает ошибка . В чем проблема ? Программа Avr Studio версия 4.19 .
Re: AVR studio в вопросах и ответах
Добавлено: Чт сен 01, 2016 20:53:21
ARV
как бы сообщение об ошибке есть, можно на крайний случай онлайн-переводчиком воспользоваться, чтобы понять, что не так...
Re: AVR studio в вопросах и ответах
Добавлено: Вс сен 04, 2016 08:46:47
knoppix
А вот вопрос, как использовать в AVR Studio, такую вещь как Linker->Memory Setting.
Требуется чтобы МК под определенные данные в EEPROM выделял строго определенные ячейки (накосячил я так немного с кодом, что автоматические выделение с помощью EEMEM не проходит).
Первая мысль была в Memory Setting разделе EEPROM задать два новых сегмента, допустим:
А затем определить их как:
Код: Выделить всё
#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;
И потом уже обращаться по ним. Ну и что-то не работает ничего, возможно новые секции нужно как-то отдельно выделять в линкере, или еще что-то? Я так-то больше по ассемблеру, и то что иногда происходит в программах написанных на языках высокого уровня меня немного пугает.
Re: AVR studio в вопросах и ответах
Добавлено: Вс сен 04, 2016 09:43:39
COKPOWEHEU
Можно обойтись без EEPROM-переменных, используя адреса напрямую. Вроде такого
Код: Выделить всё
#define VAR1 ((const unsigned char*)0x5A) //переменная по адресу 0x5A
char var1 = eeprom_read_byte( VAR1 );
Re: AVR studio в вопросах и ответах
Добавлено: Вс сен 04, 2016 13:51:28
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, где-то явно определяется. Но вот как, я не нашел.
Re: AVR studio в вопросах и ответах
Добавлено: Вс сен 04, 2016 18:49:22
blazer
Решил подправить прошивку по рекомендации автора. Обрадовался, я(в AVR Studio 4 лишь МК прошивал, с программированием не знаком совершенно)– оказывается просто всё! «запускаете компиллятор (например AVRASM2) и получаете готовый для программирования HEX- файл. Удобнее это делать, в среде программирования, (например AVR Studio 4) по команде "Build"".
Ну, открыть-то нужный файл сумел, а дальше … «курить» AVR Studio нужно. Может быть кто укажет конкретно, где именно об этой процедуре прочитать можно. Второй день бьюсь и никак не найду инструкцию этой проги.
Re: AVR studio в вопросах и ответах
Добавлено: Вс сен 04, 2016 20:15:57
uk8amk
blazer писал(а):где именно об этой процедуре прочитать можно.
раз.Меню-Help-AVR Studio User Guide
два.
http://radiokot.ru/start/mcu_fpga/avr/02/
три.Программирование на языке С для AVR и PIC микроконтроллеров. Там немного картинок.