Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 17.07.2011, 19:41  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Спасибо Вам всем за помощь! Буду пробовать. Результаты отпишу.
Реклама:
artyomugr вне форума  
Непрочитано 17.07.2011, 21:42  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Кстати , я с пультов снимал осциллограммы на звуковую карточку , запоминаются разные коды, а потом сравниваются... (есть и Нормальный осцилл,но не запоминающий , а так -несколько пультов просмотрел на - всё отлично , с таймингами) (есть куча осциллографов программных (я даже кондюки входные с карточки не снимал))
OlegNZH вне форума  
Непрочитано 17.07.2011, 22:24  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Сообщение от artyomugr Посмотреть сообщение
Что то я и с прерываниями запутался...

Разве прерывание не сработает когда придет стартовый импульс (лог 0) 2400мкс? я же настраиваю на спад, значит должно сработать по низкому уровню, переходом с высокого на низкий... у нас был лог. 1 а станет лог. 0 разве tick не начнет тикать?? =)
Я вам дал неверную информацию.
Дело в том, что сигнал с фото приемника будет инверсным и вы легко поймаете стартовый импульс.(Теперь получается что будут проблемы с поимкой последнего импульса, но будет работать и без него.)
Сигнал пульта Sony выглядит так http://www.sbprojects.com/knowledge/ir/sirc.php

Последний раз редактировалось CodeNameHawk; 17.07.2011 в 22:50.
CodeNameHawk вне форума  
Непрочитано 17.07.2011, 22:31  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Сообщение от artyomugr Посмотреть сообщение
Вот если бы был овцелограф... я-бы наверное уже решил проблему...
А так приходится мучить в слепую...
Теперь я понял почему на три делится , спасибо Вам!
Если нет осцила, попробуйте передать импульсы на СОМ порт и посмотреть их моей прогой. http://sites.google.com/site/mariankmh/home/ir-to-com

Там схема почти как у вас, только подключен внешний кварц на 11,0592 МНz и приемник заведен на INT1.
CodeNameHawk вне форума  
Непрочитано 17.07.2011, 22:43  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Немного переделал вашу программу
(схема подключения у меня как в предыдущем посте)
Код:
/**************************************************  ***
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 15.07.2011
Author  : 
Company : 
Comments: 


Chip type           : ATmega16
Program type        : Application
Clock frequency     : 11.0592 MHz
Memory model        : Small
External RAM size   : 0
Data Stack size     : 256
**************************************************  ***/

#include ‹mega16.h›

// Standard Input/Output functions
#include ‹stdio.h›

// Declare your global variables here
#define yes 0
#define no  1

volatile unsigned char jest_start_impuls=no;    //Стартового импульса нет 
volatile unsigned int  tick = 0;                //счетчик тиков таймера
volatile unsigned char b_cnt = 0;               //счетчик принятых бит

volatile unsigned char addr = 0;                //байт адреса
volatile unsigned char cmd = 0;                 //байт команды

const unsigned char dwa_w[7]={1,2,4,8,16,32,64};

void ostanovka_taimera_i_sbros_dannyh_posylki(void)
{
    TCCR1B=0x00;   //остановили таймер
    TCNT1=0x00;    //сброс таймера
    b_cnt = 0;     //обнулили счетчик битов
    cmd=0;
    addr=0;
    tick=0;
    jest_start_impuls=no;
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
        tick=TCNT1;     //сохранили количевство тиков таймера
        TCNT1=0x00;     //сброс таймера(если таймер запущен, начинается новый отсчет)     
        
        //это первое прерывание ?
        if (TCCR1B==0x00)   
        {
                //запускаем таймер,
                TCCR1B=4;   
        } else  //это уже не первое прерывание            
        {
                //был ли стартовый импульс ?
                if (jest_start_impuls==no)   
                {
                        //может это стартовый импульс ?
                        if ((tick ›110) && (tick‹150))
                        {
                                //Поймали стартовый импульс
                                jest_start_impuls=yes;   
                        }else  //Это не стартовый импульс
                        {
                                ostanovka_taimera_i_sbros_dannyh_posylki();
                        }
                }else   //стартовый импуль был, обрабатаваем дальше
                {       
                        //Проверка на минимальную длину импульса
                        if (tick ‹10)
                        {
                                //Пососылка короткая
                                ostanovka_taimera_i_sbros_dannyh_posylki();
                                //printf("EK %d\n\r",tick);
                        }        
                        if ((tick ›= 60) && (tick ‹ 150))                             //если случилось от  до  тиков
                        {
                                //приняли "1" 
                                if (b_cnt ‹ 7)  cmd  += dwa_w[b_cnt] ;                //первые 7 бит - команда
                                if (b_cnt ›= 7) addr += dwa_w[b_cnt-7] ;              //вторые 5 бит - адрес
                                tick=0;
                                b_cnt++;
                        }
                        if ((tick ›= 10) && (tick ‹ 60) )                              //если случилось от  до  тиков
                        {
                                //приняли "0" 
                                b_cnt++;
                        }

                        //Проверка на махимальную длину импульса
                        if (tick › 150)
                        {
                                ostanovka_taimera_i_sbros_dannyh_posylki();
                                //printf("ED %d\n\r",tick);
                        }        
                                
                        if (b_cnt == 11)                                                        
                        {
                                TCCR1B=0x00;                                                     //остановили таймер
                                printf("Com %d Adr %d \n\r", cmd, addr);
                                ostanovka_taimera_i_sbros_dannyh_posylki();
                        }
                        if (b_cnt › 11)                                                        
                        {
                                ostanovka_taimera_i_sbros_dannyh_posylki();
                                //printf ("EI \n\r");
                        }
                }  //конец if (jest_start_impuls=no)
                        
        }//конец end else
}

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
        ostanovka_taimera_i_sbros_dannyh_posylki();
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 43.200 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00; //TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: On
// INT1 Mode: Falling Edge
// INT2: Off
GICR|=0x80;
MCUCR=0x08;
MCUCSR=0x00;
GIFR=0x80;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 57600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0B;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

#asm ("sei")

while (1)
      {
      // Place your code here
      
      };
}
Работает устойчиво. Обратите внимание что на выходе команда повторяется три раза. Думаю сами избавитесь от этого.

В файле сам проект и проект для протеуса.
Decode Sony pult.rar
CodeNameHawk вне форума  
Сказали "Спасибо" CodeNameHawk
artyomugr (20.07.2011)
Непрочитано 18.07.2011, 09:43  
SPKostenko
Частый гость
 
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
SPKostenko на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

К тому, что сделал CodeNameHawk , уж точно нечего добавить.
SPKostenko вне форума  
Непрочитано 19.07.2011, 14:22  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Всегда можно что то поправить, я же писал, что прога не ловит старший бит адреса.
CodeNameHawk вне форума  
Непрочитано 20.07.2011, 12:08  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Сообщение от CodeNameHawk Посмотреть сообщение
if ((tick ›= 60) && (tick ‹ 150)) //если случилось от до тиков
{
//приняли "1"
if (b_cnt ‹ 7) cmd += dwa_w[b_cnt] ; //первые 7 бит - команда
if (b_cnt ›= 7) addr += dwa_w[b_cnt-7] ; //вторые 5 бит - адрес
tick=0;
b_cnt++;
}

Здравствуйте Спасибо Вам огромнейшее за код. Я кстати тоже смог всетаки поймать данные с пульта. Подправил немного код и все.

Вот поясните мне пожалуйста этот момент в Вашем коде, выше привожу цитату.

Не понятно мне это: cmd += dwa_w[b_cnt] ;

и это :

addr += dwa_w[b_cnt-7] ;
Просто начал изучать программирование недавно и такая конструкция встречается впервые.

С ув. Артем
artyomugr вне форума  
Непрочитано 20.07.2011, 12:23  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

+= увеличивает значение переменной на заданное число
-= уменьшение значения переменной на заданное число
*= умножить значение переменной на заданное число, результат записать в переменную
/= уменьшение значения переменной в заданное число раз
st_1 вне форума  
Непрочитано 20.07.2011, 12:41  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером в Atmega8

Забыли слово " и присваивает" (Просто это Важно! в контексте не явно сказано, Сами додумывайте , Акцент Должен быть)

Последний раз редактировалось OlegNZH; 20.07.2011 в 12:45.
OlegNZH вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться ,АЦП Тину 13, что то не так... Botan Микроконтроллеры, АЦП, память и т.д 2 14.09.2010 18:31
Помогите разобраться с таймером begun Proteus 1 11.04.2010 19:07
Помогите разобраться с импульсными стабилизаторами Vas2 Источники питания и свет 8 07.12.2007 17:27
pic16f870 - Помогите разобраться с таймерами bopohok Микроконтроллеры, АЦП, память и т.д 9 02.05.2007 16:50
кто пользуеться VMLABом. помогите разобраться... zuuuuk Proteus, KiCAD и другие ECAD 1 04.10.2006 12:12


Часовой пояс GMT +4, время: 05:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot