Скорее всего, не выйдет. Либо это окажется слишком сложно.Я почему спросил мне хочется как то это дело изменить и сделать доступ к пину по индексу типа PORTD[indx] иди как то так
CodeVision AVR в вопросах и ответах
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
- Реклама
COKPOWEHEU Постом выше вашего, мой ответ, что все получилось и все работает и не сложно 
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Я говорил про вашу задачу - обращение к любому биту как к элементу массива. Естественно, если вывод известен на момент компиляции никаких проблем нет.
Всем доброго дня.
Может у кого завалялся код диммера для тини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 раз.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Почему бы под себя не сделать весь код ?DataLife писал(а):А мне допилить "под себя нужно".
- Реклама
Я бы сделал так:
1. Настраиваем таймер, чтобы считал один тик - 0,1 мс.
2. Настраиваем прерывание при совпадении таймера с регистром (OCRB чтоли называется, ДШ не хочу смотреть).
3. Настраиваем внешнее прерывание от детектора фазы.
4. Настраиваем прерывание по приему UART
Обработчик внешнего прерывания сбрасывает счетчик.
Обработчик совпадения дает короткий управляющий импульс на симистор.
Обработчик UART загружает регистр сравнения новым значением.
Конечно тут не учтены всякие "мелочи" типа задержка включения оптопары и точность таймера, но это все решаемо по ходу задачи.
1. Настраиваем таймер, чтобы считал один тик - 0,1 мс.
2. Настраиваем прерывание при совпадении таймера с регистром (OCRB чтоли называется, ДШ не хочу смотреть).
3. Настраиваем внешнее прерывание от детектора фазы.
4. Настраиваем прерывание по приему UART
Обработчик внешнего прерывания сбрасывает счетчик.
Обработчик совпадения дает короткий управляющий импульс на симистор.
Обработчик UART загружает регистр сравнения новым значением.
Конечно тут не учтены всякие "мелочи" типа задержка включения оптопары и точность таймера, но это все решаемо по ходу задачи.
Привет котам и котятам
Народ не подскажете куда собственно это кладется 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
Что я не так понимаю ? Или мои текстовые константы хранятся не в памяти программ?
- Сообщения: 30
- Зарегистрирован: Вт сен 20, 2016 23:50:51
Вопрос к знатокам.
В 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, было б вообще замечательно.
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Для ассемблерных вставок доступно вообще все. В даташите указано что регистры кроме указанных нужно обязательно восстанавливать после использования.
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
- Сообщения: 13
- Зарегистрирован: Чт фев 11, 2016 14:18:34
Ребята, помогите разобраться,"Программа была написана с использованием 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 (галочка снята)"
Не знаю как биты выставить. Буду благодарен за помощь
- Сообщения: 1
- Зарегистрирован: Ср сен 28, 2016 11:19:39
Здравствуйте,создаю CodeVisionAVR cwx проект в CodeVision,далее при сохранении cwx должно выскочить окошко,(нижняя картинка)где будет предложено создание решения для Atmel Studio,
но оно почему то не выскакивает.Пробовал студии Atmel Studio 6.1,Atmel Studio 6.2,никакой разницы.
Подскажите,кто знает,в чем дело,т.к.я начинающий,а точнее начинающий понимать.
Спасибо за внимание.
но оно почему то не выскакивает.Пробовал студии Atmel Studio 6.1,Atmel Studio 6.2,никакой разницы.
Подскажите,кто знает,в чем дело,т.к.я начинающий,а точнее начинающий понимать.
Спасибо за внимание.
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
Народ помогите с некой инициализацией в юарт. Имею две функции например
как находясь в
и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();
Флаги заведите.
Или машину состояний реализуйте, что в дальнейшем упростит Вам реализацию подобных алгоритмов.
Или машину состояний реализуйте, что в дальнейшем упростит Вам реализацию подобных алгоритмов.
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
где поглядеть почитать что это вообще такое? или пример где есть? какую машину завести буггати или ламборджини 
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 писал(а):где поглядеть почитать что это вообще такое? или пример где есть? какую машину завести буггати или ламборджини
- Сообщения: 315
- Зарегистрирован: Пт янв 29, 2010 19:42:27
кто то может такую процедуру задежки
имеется 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 битных значений
ух ты.... показывает
- Сообщения: 804
- Зарегистрирован: Чт мар 12, 2009 16:31:05
Буквы русские, понять не могу смысла.
Понял что товарищ хочет mega разогнать до 20 МГц.
Спрошу: и, что, работает?
Понял что товарищ хочет mega разогнать до 20 МГц.
Спрошу: и, что, работает?
Ну, работать-то оно будет. Не такой уж и сильный разгон.
Вопрос в том, что товарищ хочет шаг изменения задержки в 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нс - это вряд ли, думаю.



