Чт ноя 14, 2019 13:36:23
Чт ноя 14, 2019 16:11:58
Чт ноя 14, 2019 20:20:07
NStorm писал(а):olegue, всё-таки внимательно посмотрите, включая схему подключения. Чем у меня отличается от того, что у вас. У меня-то работает.
Чт ноя 14, 2019 20:29:37
Чт ноя 14, 2019 22:31:16
Пт ноя 15, 2019 06:45:40
что это за стрелка такая?
Пт ноя 15, 2019 13:55:21
//#define F_CPU 1200000UL
#define LED PB2
#define BUTTON1 PB3 // PCINT3
#define BUTTON2 PB4 // PCINT4
#define BUTTON0 PB0 // КНОПКА НА INT0
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned int s=500;
// Обработчик прерывания PCINT0
ISR(PCINT0_vect)
{
_delay_ms (50) ; // антидребезг (использовать задержки в прерываниях некошерно, но пока и так сойдёт)
if (PINB & (1<<BUTTON0))
{s=s+100;}
}
int main(void)
{
// Пины кнопок
DDRB &= ~((1<<BUTTON1)|(1<<BUTTON2) |(1<<BUTTON0)); // входы
PORTB |= (1<<BUTTON1)|(1<<BUTTON2) | (1<<BUTTON0); // подтянуты
// Пин светодиода
DDRB |= (1<<LED); // выход
PORTB &= ~(1<<LED); // выключен
// Настройка прерываний
GIMSK |=(1<<INT0);
// GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0.
PCMSK |= (1<<BUTTON1)|(1<<BUTTON2) | (1<<BUTTON0); // Разрешаем по маске прерывания на ногак кнопок (PCINT3, PCINT4)
sei(); // Разрешаем прерывания глобально: SREG |= (1<<SREG_I)
while (1)
{
PORTB ^= (1<<LED); _delay_ms(s);
}
}
while(1)
for (i=1;i<s;i++)
{
PORTB^=(1>>LED);
_delay_ms(100);
}
if (PINB & (1<<BUTTON1)) // при нажатии -уменьшаяем частоту мигания
{s++;}
if (PINB&(1<<BUTTON2)) // увеличиваем частоту мигания
{if (s>0)
{
s++;
}
}
Пт ноя 15, 2019 14:21:26
на _delay_ms(s) выдает ошибки. Чем ему не нравиться?
util/delay.h:187:2: error: __builtin_avr_delay_cycles expects a compile time integer constant
void my_delay_ms(unsigned int n) {
while(n--) {
_delay_ms(1);
}
}
...
my_delay_ms(s);
но в Атмеге видел как подставляют s в delay_ms.
// #define F_CPU 1200000UL
#define LED PB2
#define BUTTON1 PB3 // PCINT3
#define BUTTON2 PB4 // PCINT4
#define BUTTON0 PB0 // КНОПКА НА INT0
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned int s = 500;
// Обработчик прерывания PCINT0
ISR(PCINT0_vect) {
_delay_ms(50); // антидребезг (использовать задержки в прерываниях некошерно, но пока и так сойдёт)
if (PINB & (1 << BUTTON0)) {
s = s + 100;
}
}
void my_delay_ms(unsigned int n) {
while (n--) {
_delay_ms(1);
}
}
int main(void) {
// Пины кнопок
DDRB &= ~((1 << BUTTON1) | (1 << BUTTON2) | (1 << BUTTON0)); // входы
PORTB |= (1 << BUTTON1) | (1 << BUTTON2) | (1 << BUTTON0); // подтянуты
// Пин светодиода
DDRB |= (1 << LED); // выход
PORTB &= ~(1 << LED); // выключен
// Настройка прерываний
GIMSK |= (1 << INT0);
// GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0.
PCMSK |= (1 << BUTTON1) | (1 << BUTTON2) | (1 << BUTTON0); // Разрешаем по маске прерывания на ногак кнопок (PCINT3, PCINT4)
sei(); // Разрешаем прерывания глобально: SREG |= (1<<SREG_I)
while (1) {
PORTB ^= (1 << LED);
my_delay_ms(s);
}
}
Сб ноя 16, 2019 18:21:32
Ср дек 11, 2019 15:47:21
Ср дек 11, 2019 19:57:54
Ср дек 11, 2019 21:13:21
Ср дек 11, 2019 21:51:20
Ср дек 11, 2019 22:09:48
Ср дек 11, 2019 22:28:38
Ср дек 11, 2019 22:30:27
Ср дек 11, 2019 22:39:05
Ср дек 11, 2019 22:58:56
Можно ИК-протокол какой-нибудь за основу взять.
Ср дек 11, 2019 23:14:34
Ср дек 11, 2019 23:56:29
NStorm писал(а):пример описания пожалуй самого распространенного протокола для ИК пультов.