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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Я почему спросил мне хочется как то это дело изменить и сделать доступ к пину по индексу типа PORTD[indx] иди как то так
Скорее всего, не выйдет. Либо это окажется слишком сложно.
Аватара пользователя
lkote68
Прорезались зубы
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

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

Сообщение lkote68 »

COKPOWEHEU Постом выше вашего, мой ответ, что все получилось и все работает и не сложно :)
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Я говорил про вашу задачу - обращение к любому биту как к элементу массива. Естественно, если вывод известен на момент компиляции никаких проблем нет.
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

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

Сообщение DataLife »

Всем доброго дня.

Может у кого завалялся код диммера для тини2313 или мега8 ? Схема будет с распознованием нуля. На основе этой:

Изображение

Перерыл весь инет, что-то толкового не могу найти ничего. Только готовые HEX'ы. А мне допилить "под себя нужно".

Задумка весьма проста и такова: через UART получать значения в процентах (ну или 0-256, если это удобней) и выставлять соответственную мощность лампы. Ничего лишнего.

Помогите, пожалуйста, тыкните меня ссылкой (Cи под CVAVR) ...

PS. или на пальцах обьясните принцип, а то чесно говоря некотрые нюансы я не понял...

1) выход детектора на внешнее прерывание. Ок.
2) Настраиваем таймер. Предположим 1 "тик" за 1 мс.
3) Настраиваем переполнение таймера совпадению с параметром (берём данные из UART)
4) Одна полу-волна = 10 мс.
5) По срабатыванию детектора - обнуляем таймер. Выключаем симистор.
6) Включаем таймер до переполнения (все те же значения из UART)
7) При переполнении включаем симистор.

Что-то на правду похожее есть?
Последний раз редактировалось DataLife Вс сен 04, 2016 13:14:28, всего редактировалось 1 раз.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

DataLife писал(а):А мне допилить "под себя нужно".
Почему бы под себя не сделать весь код ? :dont_know:
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Я бы сделал так:

1. Настраиваем таймер, чтобы считал один тик - 0,1 мс.
2. Настраиваем прерывание при совпадении таймера с регистром (OCRB чтоли называется, ДШ не хочу смотреть).
3. Настраиваем внешнее прерывание от детектора фазы.
4. Настраиваем прерывание по приему UART

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

Конечно тут не учтены всякие "мелочи" типа задержка включения оптопары и точность таймера, но это все решаемо по ходу задачи.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
lkote68
Прорезались зубы
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

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

Сообщение lkote68 »

Привет котам и котятам

Народ не подскажете куда собственно это кладется puts("тра ля ля");
по идее во флэш. По идее там 16К и таких строк должно быть не мало :)
по идее у меня занято пол памяти Program size: 4644 words (9288 bytes), 56,7% of FLASH

Bit variables area: 0x2 to 0x2
Bit variables size: 1 byte(s)
Data Stack area: 0x60 to 0x15F
Data Stack size: 256 byte(s)
Estimated Data Stack usage: 175 byte(s)
RAM Global variables area: 0x160 to 0x431
RAM Global variables size: 722 byte(s)
Hardware Stack area: 0x432 to 0x45F
Hardware Stack size: 46 byte(s)
Heap size: 0 byte(s)
EEPROM usage: 0 byte(s), 0,0% of EEPROM
Program size: 4644 words (9288 bytes), 56,7% of FLASH

Я никогда не интересовался что есть Hardware Stack area. И вот обнаружил что при добавлении еще
10 строк типа puts("тра ля ля"); codevision сообщил что не хочет компилировать и беда вроде в
том что Hardware Stack size превысила Hardware Stack area.

Data Stack area: 0x60 to 0x15F
Data Stack size: 256 byte(s)
Estimated Data Stack usage: 175 byte(s)
RAM Global variables area: 0x160 to 0x509
RAM Global variables size: 938 byte(s)
Hardware Stack area: 0x50A to 0x45F
Hardware Stack size: -170 byte(s)
Heap size: 0 byte(s)
EEPROM usage: 0 byte(s), 0,0% of EEPROM

Что я не так понимаю ? Или мои текстовые константы хранятся не в памяти программ?
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение realm »

Вопрос к знатокам.
В ATXmega32 есть модуль DES шифрования/дешифрования.
Все вроде просто - Записываем в регистры R0 ... R15 Данные и ключ, выставляем флаг, делаем команду DES и получаем в R0...R7 результат. Вот только загвостка есть. В хелпе написано, что регистры с 2 по 21 не доступны для ассемблерных вставок.
The registers R0, R1, R22, R23, R24, R25, R26, R27, R30 and R31 can be freely used in assembly routines.

Вопрос такой - Как собственно обойти это ограничение?

А если есть рабочий пример под DES, было б вообще замечательно.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Для ассемблерных вставок доступно вообще все. В даташите указано что регистры кроме указанных нужно обязательно восстанавливать после использования.
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

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

Сообщение mixon46 »

позволительно ли так писать?

PORTB=digits[discharge[i]]
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Да, если типы правильные - беззнаковые, целочисленные.
Fedorini
Родился
Сообщения: 13
Зарегистрирован: Чт фев 11, 2016 14:18:34

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

Сообщение Fedorini »

Ребята, помогите разобраться,"Программа была написана с использованием Code Vision AVR версии 1.24.8d, версия 2.05.5 дает более компактный код.
Fuse Bits необходимо выставить для работы с внешним кварцевым резонатором
SKSEL0 = 1 (галочка снята)
SKSEL1 = 1 (галочка снята)
SKSEL2 = 1 (галочка снята)
SKSEL3 = 1 (галочка снята)
SUT0 = 1 (галочка снята)
SUT1 = 1 (галочка снята)"
Не знаю как биты выставить. Буду благодарен за помощь
alex 54
Родился
Сообщения: 1
Зарегистрирован: Ср сен 28, 2016 11:19:39

Вопрос по CodeVisionAVR.

Сообщение alex 54 »

Здравствуйте,создаю CodeVisionAVR cwx проект в CodeVision,далее при сохранении cwx должно выскочить окошко,(нижняя картинка)где будет предложено создание решения для Atmel Studio,
но оно почему то не выскакивает.Пробовал студии Atmel Studio 6.1,Atmel Studio 6.2,никакой разницы.
Подскажите,кто знает,в чем дело,т.к.я начинающий,а точнее начинающий понимать.

Спасибо за внимание.


CodeVisionAVR.jpg
(69.46 КБ) 210 скачиваний
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

Народ помогите с некой инициализацией в юарт. Имею две функции например
botoff();
и
birr();


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

interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {
if (data=='1') {botoff();}
if (data=='2') {birr();}
}

как находясь в
birr();
отключить
botoff();
чтобы UART не вызывал
botoff();
при нажатии на 1 так как у меня в
birr();
будет ещё подменю с вызовом нажатий 1 и 2.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Флаги заведите.
Или машину состояний реализуйте, что в дальнейшем упростит Вам реализацию подобных алгоритмов.
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

где поглядеть почитать что это вообще такое? или пример где есть? какую машину завести буггати или ламборджини :))
Аватара пользователя
RusikOk
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев
Контактная информация:

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

Сообщение RusikOk »

kotriks писал(а):где поглядеть почитать что это вообще такое? или пример где есть? какую машину завести буггати или ламборджини :))
https://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%B0%D0%B3_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0)
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

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

Сообщение 12val12 »

кто то может такую процедуру задежки
имеется ATmega8-16- 128 с тактовой 20мГц (50 нсек цикл)

Delay_cycle ( unsigned long delay_var)
{..... }

при входящем параметре 0 (ноль) задержка скажем 2 мкс( можно и 5 не суть важно)
нужно чтобы при приросте параметра на 1 задержка увеличивалась на 50нСек
должна быть обеспечена непрерывность роста задержки до 24 битных значений
ух ты.... показывает
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Буквы русские, понять не могу смысла.
Понял что товарищ хочет mega разогнать до 20 МГц.
Спрошу: и, что, работает?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Ну, работать-то оно будет. Не такой уж и сильный разгон.

Вопрос в том, что товарищ хочет шаг изменения задержки в 50нс, или в один такт.

В принципе, в функции напрашивается что-то вроде

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

volatile uint32_t x = 20UL + delay_var; // 20UL - некая константа, задающая нужную задержку при delay_var = 0;
while(--x);

Правда,
1) не уверен, что не будет скачков длительности при переполнениях байтов числа-задержки.
2) сложность в том, что на декремент 32битного числа понадобится, судя по всему, минимум 4 такта процессора. Так что шаг 50нс - это вряд ли, думаю.
Ответить

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