

вот так выглядит
пачка
пакет-15пачек
пакеты
/****************************************************
made slav0n
Chip type : ATtiny13
9.6 MHz
фузы заводские, только снять галку CKDIV8
;Hfuse FF
;Lfuse 7A
****************************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <util/delay.h> /* for _delay_ms() */
//#include "m8_128.h"
#define out_36kHz PB1
#define swch_36_38 PB4
#define out_1 PB0
#define out_2 PB2
#define TSOP PB3
volatile unsigned char flg_err;
ISR(SIG_OUTPUT_COMPARE0B)
{
static unsigned char timer_strob;
static unsigned char timer_paket;
static unsigned char flg_err_paket;
timer_strob++;
if(timer_strob==66)//середина пачки
{
if(timer_paket <15)
{
//проверяем принял-ли TSOP сигнал и поднимаем флаг ошибки
if(PINB&(1<<TSOP) && TCCR0A&(1<<COM0B0))flg_err_paket =1;
TCCR0A ^= (1<<COM0B0);//изменяем сигнал на противоположный
}
}
else
if(timer_strob==66+66)//конец-начало пачки
{
timer_strob =0;
timer_paket++;
if(timer_paket ==65)//конец-начало пакета
{
timer_paket =0;
if(flg_err_paket)flg_err =1;//были-ли ошибки в пакете?
else flg_err =0;
flg_err_paket =0;
}
if(timer_paket <15)
{
//конфигурация Галуа, рандомгенератор
static unsigned char Q = 1;
Q = (Q>>1) ^ (Q&1 ? 0b11010111 : 0);
if(Q&1)TCCR0A |= (1<<COM0B0);
else TCCR0A &=~(1<<COM0B0);
}
else TCCR0A &=~(1<<COM0B0);//отключаем выход если пауза пакета
}
}
//============================================================
int __attribute__((naked)) main(void)
{
PORTB = (1<<swch_36_38)|(1<<TSOP);//подтяжка
DDRB = (1<<out_36kHz)|(1<<out_1)|(1<<out_2);//выходы
TCCR0A = (1<<COM0B0)|(1<<WGM01); //на выходе меандр. сброс при совпадении
TCCR0B = 1; //предделитель на 1, запуск таймера
//TCCR0B = 0; //стоп таймер
TIMSK0 = (1<<OCIE0B);//разрешаем прерывание по совпадению В
if(PINB & (1<<swch_36_38))OCR0A = 124; //38khz
else OCR0A = 131; //36khz
sei();
while(1)
{
if(flg_err){PORTB |=(1<<out_1);PORTB &=~(1<<out_2);}
else {PORTB |=(1<<out_2);PORTB &=~(1<<out_1);}
}
}
Вернуться в Самодельные электронные устройства
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2