Забудьте. Я Вам это по личному опыту говорю.
Программный I2C не спасёт - Программный i2c 1 МГц (для 16 МГц устройств) для AVR. | Аппаратная платформа Arduino ???
Хорошо, тем более она так же
// the pin which will be connected to receiver module
// this pin has to support EXTERNAL interrupts
буду за другим компьютером скину другую библиотеку, она неполноценная, файлы надо будет закинуть в папку скетча
Возьмите таки ATmega328 и просто используйте там 1-ое прерывание. Достаточно заменить константу 0 на 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 - откровенное говно. Работает в пределах комнаты и то не всегда уверенно. По крайней мере, у меня было так.
Я вам безусловно верю. Но у меня противоположное мнение. Уверенно и устойчиво работает в пределах двухэтажного дома.
Тем более пока альтернативы нет.
В добрый путь!
вот тут библиотеки - RCSwitch on other than external interrupt pin - #4 by vlad2005 - Programming Questions - Arduino Forum
“чтобы всем, не зависимо от стипендии у кого повышенная у кого какая досталось по куску” (c) В.Высоцкий
Спасибо Евгений Петрович. Ваша поддержка очень важна.
вот это написано в 11:23
а вот это в 13:43
Быстро вы справились, за 2 часа переписали код под новую либу и уже проверили в пределах всего дома?
При таких способностях зачем вы вообще что-то спрашиваете на форумах - не тратьте время, решайте проблемы сами. (это не сарказм)
Вы весьма внимательны. Браво. ( не сарказм). Делал пару лет назад сыну в городе выключатель на тини13 и если вы заметили, там в описании есть данные конкретного пульта. И совсем забыл про него. А тут стал просматривать свои записи, и он мне вдруг попался. Достал тини13, тут же залил этот код, поставил в макетку вместо тини 85 и прошелся по дому. Понравилось и решил освежить библиотеку в памяти и попробовать её на 85. Вот такая история.
Стараюсь в меру своих сил. Но иногда приятно пообщаться с умными людьми. У меня в деревне таких нет, вот и форум как отдушина.
Спасибо всем. Вопрос решен с помощью уважаемого ua6em
За что ему огромная благодарность.