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

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

Сообщение COKPOWEHEU »

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

Сообщение lkote68 »

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

Сообщение COKPOWEHEU »

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

Сообщение 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 раз.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

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

Сообщение Z_h_e »

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

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

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

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

Сообщение 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

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

Сообщение 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, было б вообще замечательно.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

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

Сообщение mixon46 »

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

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

Сообщение COKPOWEHEU »

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

Сообщение Fedorini »

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

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

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

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

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

Сообщение 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.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

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

Сообщение kotriks »

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

Сообщение 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)
Контактная информация:
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

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

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

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

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

Сообщение Vov123 »

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

Сообщение WiseLord »

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

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

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

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

volatile uint32_t x = 20UL + delay_var; // 20UL - некая константа, задающая нужную задержку при delay_var = 0;
while(--x);
Правда,
1) не уверен, что не будет скачков длительности при переполнениях байтов числа-задержки.
2) сложность в том, что на декремент 32битного числа понадобится, судя по всему, минимум 4 такта процессора. Так что шаг 50нс - это вряд ли, думаю.
Контактная информация:
Ответить

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