Найдено 47 результатов

krokodandi
Вс янв 14, 2018 04:27:15
Форум: Статьи
Тема: Частотный преобразователь
Ответы: 13624
Просмотры: 6135731

Re: Частотный преобразователь

А чего за файл spl? Чето меня перемкнуло. Не помню где открывать надо? Поможете?
krokodandi
Пн июл 20, 2015 03:24:56
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

я уже тоже не одну собаку съел на кнопках, и пока остановился на ацп, там и короткое и дплинное и мгновенная реакция на нажатие и только при отпускании, места занимает 3 строчки в прерывинии от ацп, и свободная функция опроса кнопок по пару строчек на кнопку, и одна переменная char для 8 кнопок ...
krokodandi
Вс июл 19, 2015 01:59:31
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Все переработаю! Все заново! Потому, что это все - порнота...
Хоть я и новичок в программировании, но отлично усвоил, что использование различного рода задержек все-таки есть плохой тон.
Кусок переделан за последние 3 часа и без всяких задержек. :beer: Ушел на работу :P
:kill:
krokodandi
Вс июл 19, 2015 01:12:03
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

НУ а если подставить вместо ALL_KEY переменную, процесс вовсе затыкается. Клавиша не реагирует на нажатия :(
Хотя нет, опять ложные срабатывания. МК живет своей жизнью. Ему даже кнопки не нужны :shock:


#define F_CPU 8000000UL
#define KEY0 _BV(1<<PINB0)
#define KEY1 _BV(1<<PINB1)
#define KEY2 ...
krokodandi
Вс июл 19, 2015 00:54:29
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Мне не понятно одно.
Совет был про #define ALL_KEY (KEY0 | KEY1 | KEY2)
Поправил на

#define KEY0 _BV(1<<PINB0)
#define KEY1 _BV(1<<PINB1)
#define KEY2 _BV(1<<PINB2)
#define ALL_KEY (KEY0 || KEY1 || KEY2)

Далее написал в прерываниях таймера

ms2700++;
ms5000++;

if ((ALL_KEY == 1 ...
krokodandi
Сб июл 18, 2015 20:21:04
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Нусс... Утром устал, ушел спать. Вечером проснулся и опять работать. :)
Буду думать уже на свежую голову и следовать саветам дальше.
Прям бэк то ЮССАР, назад в страну советов
krokodandi
Сб июл 18, 2015 15:26:56
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Чуть выше я описал кусок кода. Не понимаю, почему case не выполняется? Вроде написал case 2700, но все, что в нем не выполняется! Почему так происходит?

можно написать и так
ISR(TIMER0_OVF_vect)
{
TCNT0 = 0x83;

PORTC=0x0f;
(k == 3) ? k = 0 : k++;
PORTC = counter[k];
PORTD = data[k ...
krokodandi
Сб июл 18, 2015 13:58:57
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Занятно получается, если в таймере счетчике прописать вместо другой переменной "s"
Сразу вместо минут начинают бежать сотки. Прям зрелище, хлеба не хватает. :)))
Зато понимаешь, что кусок кода работает отлично.

if (enable_count_in_timer == 0)
{
(s == 5001) ? s = 0 : s++; //ms5000++;
switch(s ...
krokodandi
Сб июл 18, 2015 13:28:51
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

ARV писал(а):
krokodandi писал(а): :) Думаю тоже так Я
мастер Yoda? :shock: :shock: :shock:

Иногда говорю, как зеленый. Принято так иногда. :))) Самому смешно бывает.
Жаль не такой мудрый, да и опыта бы набраться. Но есть стремленье. Думаю, не плохо это. 8)
krokodandi
Сб июл 18, 2015 13:18:37
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

я вам верный и проверенный АЛГОРИТМ на примере одной кнопки описал. если нужно отрабатывать разные кнопки, то вместо флага лучше всего запоминать имено состояние кнопок ДО switch, и там же ДО него включать таймер. а вот уже в switch-е обрабатывать каждую кнопку.

в общем, направление у вас пока ...
krokodandi
Сб июл 18, 2015 12:53:38
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Я попробую переписать как-то так... Сложновато для меня отработать обработку. Вроде логично поступаю, но работает как-то все не так как хочу.
Всего-то надо три вида задержки размазать по трем кнопкам. С другой стороны, могло быть и больше. :)
Вопрос тогда в универсальности.
Что же, буду ...
krokodandi
Сб июл 18, 2015 12:35:55
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Попробовал swich case, теперь среднее и длинное нажатие срабатывает не каждый раз.

#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>


short unsigned int k = 0, ou = 0;


char alarm_flag = 1, start_stop_flag = 1;
long int h = 0, m = 30, s = 3,seconds_to_go = 0;

int ms2700 ...
krokodandi
Сб июл 18, 2015 11:36:00
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Не ужель только я знаю ответы на свои вопросы? :(
krokodandi
Сб июл 18, 2015 09:44:15
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)

Ну что же. Кое какой путь я все же нашел :)))
Мне удалось убить двух зайцев одним выстрелом.
Во первых: Я победил дребезг и никаких задержек не надо!
Во вторых: Я победил "второе нажатие" (срабатывание по спаду)
Заценяйте.



#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h ...
krokodandi
Сб июл 18, 2015 05:11:56
Форум: AVR
Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ответы: 20
Просмотры: 4701

PCINT - Это сложно. Как сделать дооолгое нажатие =)

:shock:
Озаботился я придумать новую фишку, доселя невиданную и не испытаннуя. Почему так? Сколько не листал я форумов, как-то мало кто работал с этим прерыванием.
Тема, видимо, не изучена так хорошо как таймеры. Какова преследуемая цель?
Цель: Распознать нажатие одной из трех кнопок в ...
krokodandi
Пт июл 17, 2015 20:39:39
Форум: AVR
Тема: Индикация 00:00 = Часы:Мнуты (Mега88V)
Ответы: 24
Просмотры: 5293

Re: Индикация 00:00 = Часы:Мнуты (Mега88V)

Я про EEPROM. Именно про этот вид ПЗУ.
Тут описан некий вариант http://microsin.net/programming/AVR/save-constants-to-avr-eeprom-using-winavr.html
Вроде бы он короткий, но кроме него еще что-то надо?

А что за запись сточкой? ind[3] = num[t32.tens];
Странная запись...
hour.value = 0x01;
min ...
krokodandi
Пт июл 17, 2015 14:11:30
Форум: AVR
Тема: Индикация 00:00 = Часы:Мнуты (Mега88V)
Ответы: 24
Просмотры: 5293

Re: Индикация 00:00 = Часы:Мнуты (Mега88V)

Дауш, вижу разницу.
Либо делаешь умножением и делением, но при этом теряешь в количестве памяти, либо простыми сложением вычитанием и получаешь взрыв мозга от обилия + и -.

А вот еще вопрос. На сколько целесообразно сохранять содержимое h и m в eeprom или просто как говорится, в ROM. Если это ...
krokodandi
Пт июл 17, 2015 13:49:30
Форум: AVR
Тема: Индикация 00:00 = Часы:Мнуты (Mега88V)
Ответы: 24
Просмотры: 5293

Re: Индикация 00:00 = Часы:Мнуты (Mега88V)

Получается, что разложение long int действительно затратно. больше на 300-500 кбайт. Столько памяти на дороге не валяется.
krokodandi
Пт июл 17, 2015 13:35:33
Форум: AVR
Тема: Индикация 00:00 = Часы:Мнуты (Mега88V)
Ответы: 24
Просмотры: 5293

Re: Индикация 00:00 = Часы:Мнуты (Mега88V)

Дальше уже подготовленное число выводится на индикатор - младшая цифра (& 0x0F) на 0-1 разряды, старшая (>>4) на 3-2...

Я про это http://lib.rus.ec/i/84/165884/i_002.png
Логическим сдвигом я никогда не пользовался, хотя читал, что этот оператор сокращает размер кода. Конечно если грамотно его ...
krokodandi
Пт июл 17, 2015 13:18:34
Форум: AVR
Тема: Индикация 00:00 = Часы:Мнуты (Mега88V)
Ответы: 24
Просмотры: 5293

Re: Индикация 00:00 = Часы:Мнуты (Mега88V)

Для удобства.

Во-первых, код читабельнее ...

Интересно будет попробовать так работать. Но пока я знакомился с текстом программы я нашел для себя интересный кусочек.
// Перевод числа в binary-decimal формат
int8_t dec2bindec(int8_t num)
{
return ((num / 10) << 4) + (num % 10);
}

void show ...

Перейти к расширенному поиску