Кариёзный монстр писал(а): в качестве примеров там платка что автор самоучителя продает за 2500р, те тоже мимо(
Эту плату вы можете в PROTEUS собрать БЕСПЛАТНО !
У меня в начале курса - обучалка по AVR
Технический форум по робототехнике.
Кариёзный монстр писал(а): в качестве примеров там платка что автор самоучителя продает за 2500р, те тоже мимо(
Эту плату вы можете в PROTEUS собрать БЕСПЛАТНО !
//частота 1МГц
#include <tiny13.h>
#include <delay.h>
#define tsop PINB.1
#define led PORTB.3
//Счетчик битов RC5
unsigned char sct_bit = 0;
//Буффер RC5
unsigned char rc5=0,rc5old=1;
//Временные пределы
#define Tmin 22 //длинный промежуток 22х64мкс=1.4мс
#define Tmax 35 // 35х64мкс=2.2мс
#define TminK 11 //короткий промежуток 11х64мкс=0.7мс
#define TmaxK 19 // 19х64мкс=1.2мс
//Флаг центра
unsigned char centre = 0;
//Флаг попадания в промежутки
unsigned char not_korr = 0;
//число в счетчике таймера
unsigned char Timer = 0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
Timer = TCNT0; //запоминаем значение счетчика
TCNT0 = 0; //обнуляем счетчик
not_korr = 1;
switch (sct_bit) {
case 0:{
TCCR0B = 0x03; //запускаем таймер на частоте 15625 КГц (один такт 64мкс)
rc5 =!tsop;//записываем в эл.массива
sct_bit++;
centre = 1;
break;
}
case 13:{ // если бит последний то
TCCR0B = 0x00; //останавливаем таймер
TCNT0=0;
sct_bit = 0;
led=1; //зажигаем светодиод
rc5old=rc5;
rc5=0;
};
default:{
if ((Timer>TminK)&(Timer<TmaxK)) // проверка короткого промежутка
{
if (centre) {
centre = 0;
not_korr = 0;
}
else {
centre = 1;
rc5 = (rc5<<1)+!tsop;
sct_bit++;
not_korr=0;
};
};
if ((Timer>Tmin)&(Timer<Tmax)){ // проверка длинного промежутка
rc5 = rc5<<1+!tsop;
sct_bit++;
not_korr = 0;
};
if (not_korr == 1) { // если не попали ни в один из промежутков то
TCCR0B = 0x00;
TCNT0 = 0;
sct_bit = 0;
rc5=0;
return;
};
};
};
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCCR0B = 0x00;
TCNT0 = 0;
sct_bit = 0;
rc5=0;
}
void main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=out Func2=In Func1=In Func0=in
// State5=T State4=T State3=0 State2=T State1=T State0=t
PORTB=0x00;
DDRB=0x08;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x40;
MCUCR=0x01;
GIFR=0x40;
// Global enable interrupts
#asm("sei")
led=!led;
delay_ms(100);
led=!led;
while (1)
{
};
}
#include <tiny13.h>
int n;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if (n==100){n=0;PORTB.3=!PORTB.3;}
n++;
}
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;
// Global enable interrupts
#asm("sei")
while (1)
{
};
}
Лавич писал(а):Помогите советом.
Не могу установить нужную частоту на tiny13.
В чем причина такого поведения?
Лавич писал(а):Фьюзы не трогал вообще.
boez писал(а):Лавич писал(а):Помогите советом.
Не могу установить нужную частоту на tiny13.
В чем причина такого поведения?
Думаю в том, чтоЛавич писал(а):Фьюзы не трогал вообще.