Найдено 47 результатов
- Вс янв 14, 2018 04:27:15
- Форум: Статьи
- Тема: Частотный преобразователь
- Ответы: 13624
- Просмотры: 6135731
Re: Частотный преобразователь
А чего за файл spl? Чето меня перемкнуло. Не помню где открывать надо? Поможете?
- Пн июл 20, 2015 03:24:56
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
я уже тоже не одну собаку съел на кнопках, и пока остановился на ацп, там и короткое и дплинное и мгновенная реакция на нажатие и только при отпускании, места занимает 3 строчки в прерывинии от ацп, и свободная функция опроса кнопок по пару строчек на кнопку, и одна переменная char для 8 кнопок ...
- Вс июл 19, 2015 01:59:31
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Все переработаю! Все заново! Потому, что это все - порнота...
Хоть я и новичок в программировании, но отлично усвоил, что использование различного рода задержек все-таки есть плохой тон.
Кусок переделан за последние 3 часа и без всяких задержек.
Ушел на работу

Хоть я и новичок в программировании, но отлично усвоил, что использование различного рода задержек все-таки есть плохой тон.
Кусок переделан за последние 3 часа и без всяких задержек.
- Вс июл 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 ...
Хотя нет, опять ложные срабатывания. МК живет своей жизнью. Ему даже кнопки не нужны :shock:
#define F_CPU 8000000UL
#define KEY0 _BV(1<<PINB0)
#define KEY1 _BV(1<<PINB1)
#define KEY2 ...
- Вс июл 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 ...
Совет был про #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 ...
- Сб июл 18, 2015 20:21:04
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Нусс... Утром устал, ушел спать. Вечером проснулся и опять работать.
Буду думать уже на свежую голову и следовать саветам дальше.
Прям бэк то ЮССАР, назад в страну советов
Буду думать уже на свежую голову и следовать саветам дальше.
Прям бэк то ЮССАР, назад в страну советов
- Сб июл 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 ...
можно написать и так
ISR(TIMER0_OVF_vect)
{
TCNT0 = 0x83;
PORTC=0x0f;
(k == 3) ? k = 0 : k++;
PORTC = counter[k];
PORTD = data[k ...
- Сб июл 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 ...
Сразу вместо минут начинают бежать сотки. Прям зрелище, хлеба не хватает. :)))
Зато понимаешь, что кусок кода работает отлично.
if (enable_count_in_timer == 0)
{
(s == 5001) ? s = 0 : s++; //ms5000++;
switch(s ...
- Сб июл 18, 2015 13:28:51
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
ARV писал(а):мастер Yoda?krokodandi писал(а):Думаю тоже так Я
![]()
![]()
Иногда говорю, как зеленый. Принято так иногда.
Жаль не такой мудрый, да и опыта бы набраться. Но есть стремленье. Думаю, не плохо это.
- Сб июл 18, 2015 13:18:37
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
я вам верный и проверенный АЛГОРИТМ на примере одной кнопки описал. если нужно отрабатывать разные кнопки, то вместо флага лучше всего запоминать имено состояние кнопок ДО switch, и там же ДО него включать таймер. а вот уже в switch-е обрабатывать каждую кнопку.
в общем, направление у вас пока ...
в общем, направление у вас пока ...
- Сб июл 18, 2015 12:53:38
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Я попробую переписать как-то так... Сложновато для меня отработать обработку. Вроде логично поступаю, но работает как-то все не так как хочу.
Всего-то надо три вида задержки размазать по трем кнопкам. С другой стороны, могло быть и больше. :)
Вопрос тогда в универсальности.
Что же, буду ...
Всего-то надо три вида задержки размазать по трем кнопкам. С другой стороны, могло быть и больше. :)
Вопрос тогда в универсальности.
Что же, буду ...
- Сб июл 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 ...
#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 ...
- Сб июл 18, 2015 11:36:00
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Не ужель только я знаю ответы на свои вопросы? 
- Сб июл 18, 2015 09:44:15
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
Re: PCINT - Это сложно. Как сделать дооолгое нажатие =)
Ну что же. Кое какой путь я все же нашел :)))
Мне удалось убить двух зайцев одним выстрелом.
Во первых: Я победил дребезг и никаких задержек не надо!
Во вторых: Я победил "второе нажатие" (срабатывание по спаду)
Заценяйте.
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h ...
Мне удалось убить двух зайцев одним выстрелом.
Во первых: Я победил дребезг и никаких задержек не надо!
Во вторых: Я победил "второе нажатие" (срабатывание по спаду)
Заценяйте.
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h ...
- Сб июл 18, 2015 05:11:56
- Форум: AVR
- Тема: PCINT - Это сложно. Как сделать дооолгое нажатие =)
- Ответы: 20
- Просмотры: 4701
PCINT - Это сложно. Как сделать дооолгое нажатие =)
:shock:
Озаботился я придумать новую фишку, доселя невиданную и не испытаннуя. Почему так? Сколько не листал я форумов, как-то мало кто работал с этим прерыванием.
Тема, видимо, не изучена так хорошо как таймеры. Какова преследуемая цель?
Цель: Распознать нажатие одной из трех кнопок в ...
Озаботился я придумать новую фишку, доселя невиданную и не испытаннуя. Почему так? Сколько не листал я форумов, как-то мало кто работал с этим прерыванием.
Тема, видимо, не изучена так хорошо как таймеры. Какова преследуемая цель?
Цель: Распознать нажатие одной из трех кнопок в ...
- Пт июл 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 ...
Тут описан некий вариант http://microsin.net/programming/AVR/save-constants-to-avr-eeprom-using-winavr.html
Вроде бы он короткий, но кроме него еще что-то надо?
А что за запись сточкой? ind[3] = num[t32.tens];
Странная запись...
hour.value = 0x01;
min ...
- Пт июл 17, 2015 14:11:30
- Форум: AVR
- Тема: Индикация 00:00 = Часы:Мнуты (Mега88V)
- Ответы: 24
- Просмотры: 5293
Re: Индикация 00:00 = Часы:Мнуты (Mега88V)
Дауш, вижу разницу.
Либо делаешь умножением и делением, но при этом теряешь в количестве памяти, либо простыми сложением вычитанием и получаешь взрыв мозга от обилия + и -.
А вот еще вопрос. На сколько целесообразно сохранять содержимое h и m в eeprom или просто как говорится, в ROM. Если это ...
Либо делаешь умножением и делением, но при этом теряешь в количестве памяти, либо простыми сложением вычитанием и получаешь взрыв мозга от обилия + и -.
А вот еще вопрос. На сколько целесообразно сохранять содержимое h и m в eeprom или просто как говорится, в ROM. Если это ...
- Пт июл 17, 2015 13:49:30
- Форум: AVR
- Тема: Индикация 00:00 = Часы:Мнуты (Mега88V)
- Ответы: 24
- Просмотры: 5293
Re: Индикация 00:00 = Часы:Мнуты (Mега88V)
Получается, что разложение long int действительно затратно. больше на 300-500 кбайт. Столько памяти на дороге не валяется.
- Пт июл 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
Логическим сдвигом я никогда не пользовался, хотя читал, что этот оператор сокращает размер кода. Конечно если грамотно его ...
Я про это http://lib.rus.ec/i/84/165884/i_002.png
Логическим сдвигом я никогда не пользовался, хотя читал, что этот оператор сокращает размер кода. Конечно если грамотно его ...
- Пт июл 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 ...
Во-первых, код читабельнее ...
Интересно будет попробовать так работать. Но пока я знакомился с текстом программы я нашел для себя интересный кусочек.
// Перевод числа в binary-decimal формат
int8_t dec2bindec(int8_t num)
{
return ((num / 10) << 4) + (num % 10);
}
void show ...