Угу. Только ассемблер Студии кушает и запись в Сишной нотации - .include <m8adef.inc> (ну, почти в Сишной, точка вместо "#" - это мелочиПТУ-шник писал(а):Просто путь к инклуду должен быть. У меня все эти аппноты в этой папке лежат. Только я программирую на ассемблере.
AVR studio в вопросах и ответах
- Реклама
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
avrassembler2 кушает и полностью сишную нотацию, с решетками. причем практически весь препроцессор у него такой же, как в Си.afz писал(а):ну, почти в Сишной, точка вместо "#" - это мелочи
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 68
- Зарегистрирован: Чт июн 12, 2014 05:32:20
Помогите с 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 бит чтоб не заморачиваться двойной записью по разным адресам и желательно чтоб была функция проверки на запись и если ячейка померла то записывало в другую.
Хочу вывести русскую надпись в позицию 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 бит чтоб не заморачиваться двойной записью по разным адресам и желательно чтоб была функция проверки на запись и если ячейка померла то записывало в другую.
Небольшой вопрос к гуру. Ребята как можно организовать строчку из Codevision Avr в Atmel Studio;
CVAVR
В Atmel studio сделал так
Это правильно?
CVAVR
Код: Выделить всё
#define PULSE PORTA.3
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xF8; // 500 Гц на выходе;
PULSE = ~PULSE ;
}
Код: Выделить всё
#define PULSE (1<<PINA3)
ISR(TIM0_OVF_vect)
{
PORTA |=PULSE;
TCNT0=0xF8; // значение для переполнения - получаем 500 Гц на выходе;
PORTA &= ~PULSE;
}
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Реклама
правильно то оно правильно, да только можно и лучше...
судя по коду вам больше подошел бы режим CTC таймера с соответствующим прерыванием - не надо было бы делать TCNT0=0xF8;
так же в студии для замены (1<<PINA3) предназначен макрос _BV(PINA3), соответственно нет смысла вводить PULSE
кстати, первый код генерирует меандр, а второй выдает короткие импульсы. для меандра есть смысл делать PORTA ^= _BV(PINA3); или воспользоваться особенностью "новой" архитектуры портов AVR и делать PINA = _BV(PINA3);
судя по коду вам больше подошел бы режим CTC таймера с соответствующим прерыванием - не надо было бы делать TCNT0=0xF8;
так же в студии для замены (1<<PINA3) предназначен макрос _BV(PINA3), соответственно нет смысла вводить PULSE
кстати, первый код генерирует меандр, а второй выдает короткие импульсы. для меандра есть смысл делать PORTA ^= _BV(PINA3); или воспользоваться особенностью "новой" архитектуры портов AVR и делать PINA = _BV(PINA3);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Где читать?особенностью "новой" архитектуры портов AVR
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
читать в даташитах.
"старые" МК так не умеют, новые (с индексами А или Р - уточнять по даташиту) умеют.
"старые" МК так не умеют, новые (с индексами А или Р - уточнять по даташиту) умеют.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
для меандра есть смысл делать
Код: Выделить всё
ISR(TIM0_OVF_vect)
{
PORTA ^= _BV(PINA3);
}
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
_BV - это макрос, стандартный для avr-gcc. как у вас в последнем сообщении должно работать. разумеется, в самом начале программы надо #include <avr/io.h>
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Работает но подчеркивается. Сделал так
Есть на выходе меандр с нужной частотой и _BV не подчеркивается.
Код: Выделить всё
#include <avr/sfr_defs.h>
ISR(TIM0_OVF_vect)
{
TCNT0=0xF8; // значение для переполнения - получаем 500 Гц на выходе;
PORTA ^= _BV(PINA3);
}
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Сообщения: 68
- Зарегистрирован: Чт июн 12, 2014 05:32:20
Не знаю как правильно объяснить но попытаюсь. Интерисует меня память EEPROM. В программе использую просто переменную и при старте программы в самой студии или в протеусе моя переменная в EEPROM имеет значение 0 но мне надо чтоб в реальном контроллере при первом запуске она была уже прописана в EEPROM т.к. она в ходе работы будет меняться и нельзя чтоб при старте контроллера она перезаписывалась. Как в студии, протеусе прописать что в данной переменной EEPROM лежит именно именно 2. Надо ли в студии переменную привязывать к конкретной ячейке и как вообще объявить переменную привязанную к конкретной ячейке?
в "студии" - это означает в 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 - для работы с переменными соответственного типа5. так как ресурс EEPROM не безграничный, надо стараться писать туда пореже. рекомендуется использовать вариант функций для записи, которая прежде чем записать, проверят содержимое ячеек EEPROM: если значение не изменилось, запись не делается. так работают функции eeprom_update_XXX
6. следует помнить, что работать с этими функциями в обработчиках прерываний надо с особой осторожностью: функции не реентерабельны!
7. следует помнить, что функция записи может занять время до 8 миллисекунд при работе с обычным int
1. в AVR-GCC для работы с EEPROM необходимо подключить заголовочник <avr/eeprom.h>
2. в коде надо описать "переменную" с префиксом EEMEM:
Код: Выделить всё
EEMEM int variable = 257;4. работать с переменными, определенными по п.2, надо при помощи специальных функций: eeprom_read_ХХХ и eeprom_write_XXX, где ХХХ - может быть byte, word, dword или float - для работы с переменными соответственного типа
Код: Выделить всё
if(eeprom_read_word(&variable) == 257){// проверка содержимого той самой переменной
eeprom_write_word(&variable, 1234); // задаем новое значение переменной
}6. следует помнить, что работать с этими функциями в обработчиках прерываний надо с особой осторожностью: функции не реентерабельны!
7. следует помнить, что функция записи может занять время до 8 миллисекунд при работе с обычным int
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Добрый вечер подскажите в чем проблема создал проект выбрал Atmega32 , пытаюсь откомпилировать пустой проект , а у меня выскакивает ошибка . В чем проблема ? Программа Avr Studio версия 4.19 .
- Вложения
-
- 1.JPG
- (195.75 КБ) 575 скачиваний
как бы сообщение об ошибке есть, можно на крайний случай онлайн-переводчиком воспользоваться, чтобы понять, что не так...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2
- Зарегистрирован: Вс сен 04, 2016 08:42:15
А вот вопрос, как использовать в AVR Studio, такую вещь как Linker->Memory Setting.
Требуется чтобы МК под определенные данные в EEPROM выделял строго определенные ячейки (накосячил я так немного с кодом, что автоматические выделение с помощью EEMEM не проходит).
Первая мысль была в Memory Setting разделе EEPROM задать два новых сегмента, допустим:
А затем определить их как:
Указатели на эти ячейки памяти определить как:
И потом уже обращаться по ним. Ну и что-то не работает ничего, возможно новые секции нужно как-то отдельно выделять в линкере, или еще что-то? Я так-то больше по ассемблеру, и то что иногда происходит в программах написанных на языках высокого уровня меня немного пугает.
Требуется чтобы МК под определенные данные в 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
Можно обойтись без EEPROM-переменных, используя адреса напрямую. Вроде такого
Код: Выделить всё
#define VAR1 ((const unsigned char*)0x5A) //переменная по адресу 0x5A
char var1 = eeprom_read_byte( VAR1 );- Сообщения: 2
- Зарегистрирован: Вс сен 04, 2016 08:42:15
Такой вариант я пробовал, в целом можно сказать что проблема решена, но осталось желание разобраться именно с особенностью того, что я писал выше. Потому как если указать:COKPOWEHEU писал(а):Можно обойтись без EEPROM-переменных, используя адреса напрямую. Вроде такогоКод: Выделить всё
#define VAR1 ((const unsigned char*)0x5A) //переменная по адресу 0x5A char var1 = eeprom_read_byte( VAR1 );
Код: Выделить всё
#define EEPROM_ONE __attribute__((section (".eeprom")))- Сообщения: 480
- Зарегистрирован: Ср июн 29, 2011 14:30:41
Решил подправить прошивку по рекомендации автора. Обрадовался, я(в AVR Studio 4 лишь МК прошивал, с программированием не знаком совершенно)– оказывается просто всё! «запускаете компиллятор (например AVRASM2) и получаете готовый для программирования HEX- файл. Удобнее это делать, в среде программирования, (например AVR Studio 4) по команде "Build"".
Ну, открыть-то нужный файл сумел, а дальше … «курить» AVR Studio нужно. Может быть кто укажет конкретно, где именно об этой процедуре прочитать можно. Второй день бьюсь и никак не найду инструкцию этой проги.
Ну, открыть-то нужный файл сумел, а дальше … «курить» AVR Studio нужно. Может быть кто укажет конкретно, где именно об этой процедуре прочитать можно. Второй день бьюсь и никак не найду инструкцию этой проги.
раз.Меню-Help-AVR Studio User Guideblazer писал(а):где именно об этой процедуре прочитать можно.
два.http://radiokot.ru/start/mcu_fpga/avr/02/
три.Программирование на языке С для AVR и PIC микроконтроллеров. Там немного картинок.


