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

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

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

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

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

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

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

 
Опции темы
Непрочитано 17.12.2008, 05:28  
Saadov
Почётный гражданин KAZUS.RU
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
Saadov на пути к лучшему
По умолчанию

Вдруг кому пригодится, ошибка была в следующем, даже стыдно сказать, таймер который генерит ШИМ,при команде
DISABLE_MODULATION останавливался,и каждая следующая генерация передачи бита начиналась с места остановки, после передачи предыдущего, так сказать,в счетчике оставалось неизвестное число.Добавив в команду DISABLE_MODULATION запись нужного числа в счетчик, проблема решилась- стабильно низкий уровень в паузах и в конце посылки. Спасибо всем,кто пытался помочь.
Реклама:
Saadov вне форума  
Непрочитано 22.12.2008, 18:30  
Chooze
Прохожий
 
Регистрация: 02.02.2007
Сообщений: 2
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Chooze на пути к лучшему
По умолчанию

Можно глянуть на итоговый код? Я думаю новичкам будет полезно.
Chooze вне форума  
Непрочитано 22.12.2008, 21:08  
Saadov
Почётный гражданин KAZUS.RU
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
Saadov на пути к лучшему
По умолчанию

Код сыроват, но рабочий. Интегрирован в мою программу,пришлось выбирать нужные функции,так что может быть что-то лишнее.

Код:
/*
Chip type           : ATmega32
Program type        : Application
Clock frequency     : 16,000000 MHz
**************************************************  ***/

#include ‹mega32.h›
#include "rc5codes.h"

#define RC5_DEVICE_CODE       RC5_DEV_EXPERIMENTAL
#define MAX_BITCOUNT                 128
#define RC5_TEMPLATE          (0x3000 | (RC5_DEVICE_CODE ‹‹ 6))

#define ENABLE_MODULATION  (TCCR2 = 0x6A) | (TCNT2=0xCE) 
#define DISABLE_MODULATION  (TCCR2 = 0x00) | (TCNT2=0xCE)

// activate half bit timer
#define ENABLE_BIT_TIMER TCCR1B=0x09
#define DISABLE_BIT_TIMER TCCR1B=0x00

#define ENABLE_BUTTONS GICR|=0xC0
#define DISABLE_BUTTONS GICR|=0x00

volatile unsigned int rc5data = 0;
volatile unsigned char bitcounter = MAX_BITCOUNT;
volatile unsigned char halfbitcounter; 

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
  unsigned char cmd = 0;
  cmd = RC5_CMD_STANDBY;
  rc5data = RC5_TEMPLATE | (cmd & 0x3f);

  // activate timer 1 (half bit timer) to write out bitstream
  bitcounter = 0;
  halfbitcounter = 0;
  DISABLE_BUTTONS;
  ENABLE_BIT_TIMER;
}

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
 unsigned char bitt = ((rc5data & 0x2000) ›› 13);
 unsigned char half = (bitt ^ ((halfbitcounter == 0) ? 1 : 0));

  // transmit 14 bit rc5 packet
  if(half && bitcounter ‹ 14) {
    ENABLE_MODULATION;
  } else {
    DISABLE_MODULATION;
  }

  if(bitcounter ›= MAX_BITCOUNT) {
    // we can now prepare for the next key press
    ENABLE_BUTTONS;
    DISABLE_BIT_TIMER;
  } else if(bitcounter == 14) {
    // rc5 packet has been transmitted
    DISABLE_MODULATION;
  }

  if(halfbitcounter == 0) {
    halfbitcounter++;
  } else {
    halfbitcounter = 0;
    bitcounter++;
    rc5data ‹‹= 1; // shift left rc5 data
  }
}

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=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x80;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

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

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 2000,000 kHz
// Mode: Fast PWM top=FFh
// OC2 output: Non-Inverted PWM
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00; 
OCR2=0x3F;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// INT1: On
// INT1 Mode: Low level
// INT2: Off
GICR|=0xC0;  
MCUCR=0x01;
MCUCSR=0x00;
GIFR=0xC0;

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

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

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}
Прикрепленный файл: 7447462.rar
Saadov вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Декодер RC5 vmax1987 Микроконтроллеры, АЦП, память и т.д 38 25.08.2010 22:26
Приемник RC5 в малом корпусе? Muzicant Микроконтроллеры, АЦП, память и т.д 1 17.02.2008 11:57
Совмещение динамической индикации и приема команд RC5 megAdriVeR Микроконтроллеры, АЦП, память и т.д 22 24.07.2007 21:18
Декодирование команд RC5 R_V_A Микроконтроллеры, АЦП, память и т.д 10 20.12.2006 19:52


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


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