Attiny85 и прерывание библиотеки RCSwitch.h

Забудьте. Я Вам это по личному опыту говорю.

1 лайк

Программный I2C не спасёт - Программный i2c 1 МГц (для 16 МГц устройств) для AVR. | Аппаратная платформа Arduino ???

Хорошо, тем более она так же

// the pin which will be connected to receiver module
// this pin has to support EXTERNAL interrupts

буду за другим компьютером скину другую библиотеку, она неполноценная, файлы надо будет закинуть в папку скетча

1 лайк

Возьмите таки ATmega328 и просто используйте там 1-ое прерывание. Достаточно заменить константу 0 на 1 в одном единственном месте. Это гораздо проще, чем выносить себе мозг в попытке использовать тиньку.

1 лайк

У ATtiny13 INT0 на пине РВ1


А такой скетч прекрасно работает на пине РВ0. Хотя она требует, что контакт, который будет подключен к модулю приемника, должен поддерживать ВНЕШНИЕ прерывания.

[code]
/*
 * Простой пример кода приемника для Attiny13
 * Принимает 2 команды и включает/выключает светодиод
 * 2 кнопки управления ON/OFF
 * В стандартном исполнении посылки EV1527 имеют длину 3 байта (24 бит), 
 * Пульт 1_ON  код  11823372 / 24bit - B4690C / HEX  
 * Пульт 1_OFF код  11823364 / 24bit - B46904 / HEX  
 *        ---------
 *  RST--1|       |8--Vcc   
 *  PB3--2|       |7--PB2
 *  PB4--3|       |6--PB1
 *  GND--4|       |5--PB0
 *        ---------
 *
 * 
 */ 

#define F_CPU           1200000UL  // Clock speed 1.2 MHz (-Ulfuse:w:0x6A:m)
#define TRF_RX_PIN      PB0        // Receiver on Pin 0
#define TRF_DATA_SIZE   3          // Command size 3 bytes
#define TRF_TX_DISABLED            // Exclude transmitter code to preserve space

#include "tinyrf.h"

#define LED_1_PIN     PB3    // Pin definitions for LED
#define IN_ON_PIN     PB1
#define IN_OFF_PIN    PB2

// LED pins control macro
#define init_led_pins() DDRB |= (1 << LED_1_PIN)
#define init_in_pins()  DDRB &= ~(1 << IN_ON_PIN) | ~(1 << IN_OFF_PIN)
#define set_in_pins()   PORTB |= (1 << IN_ON_PIN) | (1 << IN_OFF_PIN)
#define set_led_pin(pin, state) state ? PORTB |= (1 << pin) : PORTB &= ~(1 << pin)

//------------------------------------------------------------------
int main(void){
// Initialize timer and ports
  trf_init();
  init_led_pins();
  init_in_pins();
  set_in_pins();
  
  while(1){
    if(digitalRead(IN_ON_PIN) == 0) set_led_pin(LED_1_PIN, 1);  // Turn on LED1
    if(digitalRead(IN_OFF_PIN) == 0)set_led_pin(LED_1_PIN, 0);  // Turn off LED1

    if(trf_has_received_data()){                 // If a new command is available
       uint8_t data_buffer[TRF_DATA_SIZE];       // Get received data
       trf_get_received_data(data_buffer);

      if(data_buffer[0] == 180 && data_buffer[1] == 105){
        switch (data_buffer[2]){
          case 12:
          set_led_pin(LED_1_PIN, 1);             // Turn on LED1
          break;
          
          case 4:
          set_led_pin(LED_1_PIN, 0);             // Turn off LED1
          break;
          
          default:
          break;
        }
      }
      
// Reset state to listen for new messages
      trf_reset_received();
    }
  }
}
//END---------------------------------------------------------------
[/code]

А я Вам говорил “забудьте” не потому, что там что-то с прерываниями, а потому, то tinyRF - откровенное говно. Работает в пределах комнаты и то не всегда уверенно. По крайней мере, у меня было так.

Я вам безусловно верю. Но у меня противоположное мнение. Уверенно и устойчиво работает в пределах двухэтажного дома.
Тем более пока альтернативы нет.

В добрый путь!

1 лайк

вот тут библиотеки - RCSwitch on other than external interrupt pin - #4 by vlad2005 - Programming Questions - Arduino Forum

“чтобы всем, не зависимо от стипендии у кого повышенная у кого какая досталось по куску” (c) В.Высоцкий

1 лайк

Спасибо Евгений Петрович. Ваша поддержка очень важна.

вот это написано в 11:23

а вот это в 13:43

Быстро вы справились, за 2 часа переписали код под новую либу и уже проверили в пределах всего дома?

При таких способностях зачем вы вообще что-то спрашиваете на форумах - не тратьте время, решайте проблемы сами. (это не сарказм)

2 лайка

Вы весьма внимательны. Браво. ( не сарказм). Делал пару лет назад сыну в городе выключатель на тини13 и если вы заметили, там в описании есть данные конкретного пульта. И совсем забыл про него. А тут стал просматривать свои записи, и он мне вдруг попался. Достал тини13, тут же залил этот код, поставил в макетку вместо тини 85 и прошелся по дому. Понравилось и решил освежить библиотеку в памяти и попробовать её на 85. Вот такая история.

Стараюсь в меру своих сил. Но иногда приятно пообщаться с умными людьми. У меня в деревне таких нет, вот и форум как отдушина.

Спасибо всем. Вопрос решен с помощью уважаемого ua6em
За что ему огромная благодарность.