Скорее всего, не выйдет. Либо это окажется слишком сложно.Я почему спросил мне хочется как то это дело изменить и сделать доступ к пину по индексу типа PORTD[indx] иди как то так
CodeVision AVR в вопросах и ответах
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: CodeVision AVR в вопросах и ответах
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Re: CodeVision AVR в вопросах и ответах
COKPOWEHEU Постом выше вашего, мой ответ, что все получилось и все работает и не сложно 
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: CodeVision AVR в вопросах и ответах
Я говорил про вашу задачу - обращение к любому биту как к элементу массива. Естественно, если вывод известен на момент компиляции никаких проблем нет.
Re: CodeVision AVR в вопросах и ответах
Всем доброго дня.
Может у кого завалялся код диммера для тини2313 или мега8 ? Схема будет с распознованием нуля. На основе этой:

Перерыл весь инет, что-то толкового не могу найти ничего. Только готовые HEX'ы. А мне допилить "под себя нужно".
Задумка весьма проста и такова: через UART получать значения в процентах (ну или 0-256, если это удобней) и выставлять соответственную мощность лампы. Ничего лишнего.
Помогите, пожалуйста, тыкните меня ссылкой (Cи под CVAVR) ...
PS. или на пальцах обьясните принцип, а то чесно говоря некотрые нюансы я не понял...
1) выход детектора на внешнее прерывание. Ок.
2) Настраиваем таймер. Предположим 1 "тик" за 1 мс.
3) Настраиваем переполнение таймера совпадению с параметром (берём данные из UART)
4) Одна полу-волна = 10 мс.
5) По срабатыванию детектора - обнуляем таймер. Выключаем симистор.
6) Включаем таймер до переполнения (все те же значения из UART)
7) При переполнении включаем симистор.
Что-то на правду похожее есть?
Может у кого завалялся код диммера для тини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 в вопросах и ответах
Почему бы под себя не сделать весь код ?DataLife писал(а):А мне допилить "под себя нужно".

- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: CodeVision AVR в вопросах и ответах
Я бы сделал так:
1. Настраиваем таймер, чтобы считал один тик - 0,1 мс.
2. Настраиваем прерывание при совпадении таймера с регистром (OCRB чтоли называется, ДШ не хочу смотреть).
3. Настраиваем внешнее прерывание от детектора фазы.
4. Настраиваем прерывание по приему UART
Обработчик внешнего прерывания сбрасывает счетчик.
Обработчик совпадения дает короткий управляющий импульс на симистор.
Обработчик UART загружает регистр сравнения новым значением.
Конечно тут не учтены всякие "мелочи" типа задержка включения оптопары и точность таймера, но это все решаемо по ходу задачи.
1. Настраиваем таймер, чтобы считал один тик - 0,1 мс.
2. Настраиваем прерывание при совпадении таймера с регистром (OCRB чтоли называется, ДШ не хочу смотреть).
3. Настраиваем внешнее прерывание от детектора фазы.
4. Настраиваем прерывание по приему UART
Обработчик внешнего прерывания сбрасывает счетчик.
Обработчик совпадения дает короткий управляющий импульс на симистор.
Обработчик UART загружает регистр сравнения новым значением.
Конечно тут не учтены всякие "мелочи" типа задержка включения оптопары и точность таймера, но это все решаемо по ходу задачи.
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Re: CodeVision AVR в вопросах и ответах
Привет котам и котятам
Народ не подскажете куда собственно это кладется 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
Что я не так понимаю ? Или мои текстовые константы хранятся не в памяти программ?
Народ не подскажете куда собственно это кладется 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
Что я не так понимаю ? Или мои текстовые константы хранятся не в памяти программ?
Re: CodeVision AVR в вопросах и ответах
Вопрос к знатокам.
В 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, было б вообще замечательно.
В 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 в вопросах и ответах
Для ассемблерных вставок доступно вообще все. В даташите указано что регистры кроме указанных нужно обязательно восстанавливать после использования.
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: CodeVision AVR в вопросах и ответах
позволительно ли так писать?
PORTB=digits[discharge[i]]
PORTB=digits[discharge[i]]
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: CodeVision AVR в вопросах и ответах
Да, если типы правильные - беззнаковые, целочисленные.
Re: CodeVision AVR в вопросах и ответах
Ребята, помогите разобраться,"Программа была написана с использованием Code Vision AVR версии 1.24.8d, версия 2.05.5 дает более компактный код.
Fuse Bits необходимо выставить для работы с внешним кварцевым резонатором
SKSEL0 = 1 (галочка снята)
SKSEL1 = 1 (галочка снята)
SKSEL2 = 1 (галочка снята)
SKSEL3 = 1 (галочка снята)
SUT0 = 1 (галочка снята)
SUT1 = 1 (галочка снята)"
Не знаю как биты выставить. Буду благодарен за помощь
Fuse Bits необходимо выставить для работы с внешним кварцевым резонатором
SKSEL0 = 1 (галочка снята)
SKSEL1 = 1 (галочка снята)
SKSEL2 = 1 (галочка снята)
SKSEL3 = 1 (галочка снята)
SUT0 = 1 (галочка снята)
SUT1 = 1 (галочка снята)"
Не знаю как биты выставить. Буду благодарен за помощь
Вопрос по CodeVisionAVR.
Здравствуйте,создаю CodeVisionAVR cwx проект в CodeVision,далее при сохранении cwx должно выскочить окошко,(нижняя картинка)где будет предложено создание решения для Atmel Studio,
но оно почему то не выскакивает.Пробовал студии Atmel Studio 6.1,Atmel Studio 6.2,никакой разницы.
Подскажите,кто знает,в чем дело,т.к.я начинающий,а точнее начинающий понимать.
Спасибо за внимание.
но оно почему то не выскакивает.Пробовал студии Atmel Studio 6.1,Atmel Studio 6.2,никакой разницы.
Подскажите,кто знает,в чем дело,т.к.я начинающий,а точнее начинающий понимать.
Спасибо за внимание.
Re: CodeVision AVR в вопросах и ответах
Народ помогите с некой инициализацией в юарт. Имею две функции например
как находясь в
и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();
чтобы UART не вызывалbotoff();
при нажатии на 1 так как у меня вbotoff();
будет ещё подменю с вызовом нажатий 1 и 2.birr();
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Флаги заведите.
Или машину состояний реализуйте, что в дальнейшем упростит Вам реализацию подобных алгоритмов.
Или машину состояний реализуйте, что в дальнейшем упростит Вам реализацию подобных алгоритмов.
Re: CodeVision AVR в вопросах и ответах
где поглядеть почитать что это вообще такое? или пример где есть? какую машину завести буггати или ламборджини 
- RusikOk
- Нашел транзистор. Понюхал.
- Сообщения: 197
- Зарегистрирован: Пн янв 24, 2011 01:51:48
- Откуда: Украина, Киев
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
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)kotriks писал(а):где поглядеть почитать что это вообще такое? или пример где есть? какую машину завести буггати или ламборджини
Re: CodeVision AVR в вопросах и ответах
кто то может такую процедуру задежки
имеется ATmega8-16- 128 с тактовой 20мГц (50 нсек цикл)
Delay_cycle ( unsigned long delay_var)
{..... }
при входящем параметре 0 (ноль) задержка скажем 2 мкс( можно и 5 не суть важно)
нужно чтобы при приросте параметра на 1 задержка увеличивалась на 50нСек
должна быть обеспечена непрерывность роста задержки до 24 битных значений
имеется ATmega8-16- 128 с тактовой 20мГц (50 нсек цикл)
Delay_cycle ( unsigned long delay_var)
{..... }
при входящем параметре 0 (ноль) задержка скажем 2 мкс( можно и 5 не суть важно)
нужно чтобы при приросте параметра на 1 задержка увеличивалась на 50нСек
должна быть обеспечена непрерывность роста задержки до 24 битных значений
ух ты.... показывает
Re: CodeVision AVR в вопросах и ответах
Буквы русские, понять не могу смысла.
Понял что товарищ хочет mega разогнать до 20 МГц.
Спрошу: и, что, работает?
Понял что товарищ хочет mega разогнать до 20 МГц.
Спрошу: и, что, работает?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну, работать-то оно будет. Не такой уж и сильный разгон.
Вопрос в том, что товарищ хочет шаг изменения задержки в 50нс, или в один такт.
В принципе, в функции напрашивается что-то вроде
Правда,
1) не уверен, что не будет скачков длительности при переполнениях байтов числа-задержки.
2) сложность в том, что на декремент 32битного числа понадобится, судя по всему, минимум 4 такта процессора. Так что шаг 50нс - это вряд ли, думаю.
Вопрос в том, что товарищ хочет шаг изменения задержки в 50нс, или в один такт.
В принципе, в функции напрашивается что-то вроде
Код: Выделить всё
volatile uint32_t x = 20UL + delay_var; // 20UL - некая константа, задающая нужную задержку при delay_var = 0;
while(--x);Правда,
1) не уверен, что не будет скачков длительности при переполнениях байтов числа-задержки.
2) сложность в том, что на декремент 32битного числа понадобится, судя по всему, минимум 4 такта процессора. Так что шаг 50нс - это вряд ли, думаю.
