ВОТ ЧТО ПОЛУЧИЛОСЬ.
ОЧЕНЬ ПРОШУ НЕ ТЫКАТЬ ССЫЛКАМИ НА ПОДОБНЫЕ ТЕМЫ. Апо человечиски прошу помочь разобратся в чем ошибки. т.к уже второй день и на работе нармально не работается и спится плохо все думаю и думаю перепробовал разные варианты
Программа написаная мной первая поэтому еще прошу посоветовать как можно ее улудшить или исправить!
СИЛЬНО НЕ РУГАЙТЕ
ATmega работает на частоте 8 MHz.
- Код: Выделить всё • Развернуть
#include <mega32.h>
char t1=20; // количество импульсов в пачке
char t2=50; // пауза между пачками импульсов 50
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)// прерывание по переполнению таймера 0
{
// Reinitialize Timer 0 value
TCNT0=0x9B; // присваиваем регистру число с которого ему надо начинать считать
t1--;// вычетаем из переменной t1 единицу
// Place your code here
while (t1==0){ //пока t1 равно 0 делаем то что в скобках
t2--;// вычетаем из переменной t2 единицу
if (t2==0){ // если переменная t2 равна 0 то делаем то что в скобках
t1=20;
t2=50;
}
} // если переменная t1 равна 0 то ждем
// если переменная t1 не равна 0 то делаем то что в скобказ (инвертируем PORTA.0)
PORTA^=0x01;
}
// Declare your global variables here
void main(void)
{
PORTA=0x05;
DDRA=0x05;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x01;
TCNT0=0x9B;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x01;
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
if(PINA.1) {
PORTA.2=1;}
else {PORTA.2=0} // Place your code here
};
}
к PA.0 подключен ИК диод
PA.1 подключен TSOP 1736
PA.2 простой св диод для контроля за работой тсопа
в протеусе все протестил за 10 ms 34 колебания, в реале собираю дид моргает как сволоч эфекта ноль TSOP выдает 0 и пипец, я думал что засвечивается облепил ик диод пластелином весь не помогает,
частоту на ножке PA.1 расчитовал следующим образом (8000000/36000/2=111,1 получае число на котором таймер должен прирыватся 256-111=145 число с которого начинает считать таймер, у меня в программе 155 потому, что в протеусе пытался подогнат частоту.
Пока писал подумал может надо на TSOP обвеску по питанию повесить ну это я сегодня попробую а вообще смущают меня мои вычесления по поводу частоты на PA.1