Например TDA7294

Форум РадиоКот • Просмотр темы - Библиотека rc5xmit- как вывести сигнал без несущей?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 13:57:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср май 23, 2018 03:16:26 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Есть библиотека rc5xmit http://forum.arduino.cc/index.php?topic=7543.0
Она выдаёт сигнал на ИК светодиод.
Как можно добавить туда функцию передачи просто прямоугольных импульсов, не модулированных несущей 36 кГц?

хочу собрать устройство и подключить его прямо на выход ИК приёмника управляемой платы, чтоб избавиться от передачи света.

Код:
// RC5 Infrared Transmitter for Arduino Diecimila
//
// Two timers are used, TIMER2 and TIMER1. TIMER1 is used as the RC5 state machine clock,
// with tick length of irparams.t (e.g., 889 microseconds), the basic RC5 time unit.
// The on/off state of the IR LED carrier (pulse clock) may change on any given tick of
// this clock.
//
// TIMER2 is used to generate a square wave on OC2A (pin 11) at the frequency of the RC5
// pulse clock (e.g., 36 kHz). The pulse clock is modulated (turned on and off) by setting
// or clearing the COM2A0 bit of register TCCR2A. Therefore, an IR LED connected between
// pin 11 and ground is the only external circuitry needed to implement the basic IR
// transmitter.
//
// Using a high power IR LED (Vishay TSAL6100) connected this way (without a current-
// limiting resistor) results in an "on" current of about 80ma. This is within spec of
// that device (100ma max). The Arduino output pins are specced at 40ma max, so the
// current of 80ma exceeds the Arduino spec, but the duty cycle is low (50% max),
// so it's probably OK.
//
// RC5 encoding:
//
// START + TOGGLEBIT + UNITCODE + BUTTONCODE
//
// where:
//   START is a two-bit code, always 11
//   TOGGLEBIT is a one-bit code which toggles on each successive button
//   UNITCODE is a five-bit code specifying the unit being commanded (TV, VCR, etc.)
//   BUTTONCODE is a six-bit code for the button command
//
// Each bit, 0 or 1, is transmitted according to "Manchester" encoding:
//
//   0: MARK followed by SPACE, each of duration irparams.t
//   1: SPACE followed by MARK
//
// To adapt this code to use another RC5-compatible device, minimally
// the unit code needs to be set according to the device, and any
// specific button encodings need to be defined in irparams.h. Note
// the function brand() where the buttons and other parameters are
// actually loaded into the state machine structure.
//
// The demo program below simply sets the brand to PHILIPSTV,
// turns power on, waits 15 seconds, sets channel to 03, mutes the TV,
// waits 15 seconds, and turns the TV off.
//
// Note that the call to button(buttonid,retransmitcount) returns
// before the code is finished transmitting, so successive calls should
// be separted by at least some delay, e.g., 100 msec. The retransmission
// count is 2 here because that seems to be common.
//
// For more info on RC5, see: http://www.sbprojects.com/knowledge/ir/rc5.htm
//
// Joe Knapp   jmknapp AT gmail DOT com   30APR08

#include "c:\2\irparams.h"

#define IROUT 11    // pin 11 is OC2A output from TIMER2
#define BLINKLED 13  // mirrors the state of IROUT

#define TICKSPERUSEC ((SYSCLOCK/1000000.)/PRESCALE)
#define mark() (irparams.irledstate = 1)
#define space() (irparams.irledstate = 0)

// xmitter states
#define START       1
#define STOP        2
#define IDLE        3
#define REXMIT      4
#define CODE        5
#define MANCHONE    6
#define MANCHZERO   7
#define TOGGLE      8

// Pulse clock interrupt uses 16-bit TIMER1
#define INIT_TIMER_COUNT1 (65536 - (int)(TICKSPERUSEC*irparams.t))
#define RESET_TIMER1 TCNT1 = INIT_TIMER_COUNT1

// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

// function prototypes
void button(byte buttonid, int n) ;
void brand(byte brandcode) ;
uint8_t timer2top(unsigned int freq) ;
unsigned long buttoncode(byte buttonid) ;
int tmp1=0;

// state machine variables
struct rbutton {
  byte id ;
  unsigned long code ;   // button codes can be up to 32 bits
} ;
struct {
  byte xmitstate ;
  byte returnstate ;
  byte timer ;
  byte unitlength ;
  byte buttonlength ;
  byte sendflag ;
  byte retransmit ;
  byte codelen ;
  byte bitcounter ;
  byte togbit ;
  byte nbuttons ;
  byte blinkstate ;
  byte irledstate ;
  unsigned long unit ;
  unsigned long button ;
  unsigned long code1 ;
  unsigned int mask16 ;
  unsigned int t ;
  unsigned int retransgap ;
  struct rbutton buttons[MAXBUTTONS] ;
} irparams ;

void setup() {
  Serial.begin(9600) ;
  Serial.println("XMITIR 0.0.0.1a") ;
 
  cbi(TCCR2A,COM2A1) ; // disconnect OC2A for now (COM2A0 = 0)
  cbi(TCCR2A,COM2A0) ;
 
  cbi(TCCR2B,WGM22) ;  // CTC mode for TIMER2
  sbi(TCCR2A,WGM21) ;
  cbi(TCCR2A,WGM20) ;
 
  TCNT2 = 0 ;
 
  cbi(ASSR,AS2) ;  // use system clock for timer 2
 
  OCR2A = 255 ;   // set TOP to 255 for now
 
  cbi(TCCR2B,CS22) ;  // TIMER2 prescale = 1
  cbi(TCCR2B,CS21) ;
  sbi(TCCR2B,CS20) ;
 
  cbi(TCCR2B,FOC2A) ;  // clear forced output compare bits
  cbi(TCCR2B,FOC2B) ;

  pinMode(IROUT, OUTPUT) ;  // set OC2A to OUPUT
  pinMode(BLINKLED, OUTPUT) ;
  digitalWrite(BLINKLED, LOW) ;
 
  // setup pulse clock timer interrupt
  TCCR1A = 0;  // normal mode
 
  //Prescale /8 (16M/8 = 0.5 microseconds per tick)
  // Therefore, the timer interval can range from 0.5 to 128 microseconds
  // depending on the reset value (255 to 0)
  cbi(TCCR1B,CS12) ;
  sbi(TCCR1B,CS11) ;
  cbi(TCCR1B,CS10) ;
         
  //Timer1 Overflow Interrupt Enable
  sbi(TIMSK1,TOIE1) ;
         
  RESET_TIMER1;       
       
  sei();  // enable interrupts       

  // initialize some state machine variables
  irparams.sendflag = 0 ;
  irparams.togbit = 0 ;
  irparams.blinkstate = HIGH ;
  irparams.xmitstate = IDLE ;
}

// main loop
// Just for a demo, the code here the first time through just sets
// the brand to PHILIPSTV, turns the TV on, sets the channel to THREE,
// mutes the TV and finally turns the TV off.
void loop() {
  static byte first = 1 ;
  if (first) {
    brand(PHILIPSTV) ;
    button(ONE,3) ;  // hello world   settings
    delay(600) ;
    Serial.println("1") ;

// while (1) {}
   
for (tmp1=0; tmp1>=100; tmp1++) {
  if (tmp1 != 1) {
    Serial.println(tmp1) ;
    button(tmp1,3) ;
    delay(1000) ;
  }
}
    button(SEVEN,2) ; // 1
    delay(400) ;
    button(SEVEN,2) ;  //1
    delay(400) ;
    button(EIGHT,2) ;
    delay(400) ;
    button(EIGHT,2) ;
    delay(400) ;

 button(STORE ,2) ;

       
  //      delay(1000) ;
//    button(POWER,2) ;  // over and out
    first = 0 ;
  }
}

// xmit state machine
// RC5 protocol
ISR(TIMER1_OVF_vect) {
  RESET_TIMER1;

  switch(irparams.xmitstate) {
    case START:
      if (irparams.timer == 4) {
        irparams.code1 = ((unsigned long)irparams.unit << irparams.buttonlength) | irparams.button ;
        irparams.codelen = irparams.unitlength + irparams.buttonlength ;
        irparams.mask16 = (unsigned int)0x1 << (irparams.codelen - 1) ;
      }
     
      irparams.timer-- ;
      switch(irparams.timer) {
        case 3:
          mark() ;
          break ;
        case 2:
          space() ;
          break ;
        case 1:
          mark() ;
          irparams.xmitstate = TOGGLE ;
          break ;
      }
      break ;
    case TOGGLE:
      irparams.returnstate = CODE ; // go to CODE after toggle bit
      irparams.bitcounter = 0 ;
      if (irparams.togbit) {
        space() ;
        irparams.xmitstate = MANCHONE ;
      }
      else {
        mark() ;
        irparams.xmitstate = MANCHZERO ;
      }
      break ;
    case CODE:
      irparams.returnstate = CODE ;
      if (irparams.bitcounter == irparams.codelen) {
        space() ;
        irparams.xmitstate = STOP ;
        }
      else {
        if (irparams.code1 & irparams.mask16) {  // send ONE
          space() ;
          irparams.xmitstate = MANCHONE ;
        }
        else {
          mark() ;
          irparams.xmitstate = MANCHZERO ;
        }
        irparams.bitcounter++ ;
        irparams.mask16 >>= 1 ;
      }
      break ;
    case STOP:
      if (irparams.retransmit) {
        irparams.xmitstate = REXMIT ;
        irparams.timer = irparams.retransgap ;
        irparams.sendflag = 0 ;
      }
      else {
        irparams.xmitstate = IDLE ;
        irparams.sendflag = 0 ;
        space() ;
        irparams.togbit ^= 0x1 ;
      }
      break ;
    case IDLE:
      if (irparams.sendflag) {
        irparams.xmitstate = START ;
        space() ;
        irparams.timer = 4 ; // RC5 start is SPACE/MARK/SPACE/MARK
      }
      break ;
   case MANCHONE:
      mark() ;
      irparams.xmitstate = irparams.returnstate ;
      break ;
   case MANCHZERO:
      space() ;
      irparams.xmitstate = irparams.returnstate ;
      break ;
   case REXMIT:
     irparams.timer-- ;
     if (irparams.timer == 0) {
       irparams.sendflag = 1 ;
       irparams.xmitstate = IDLE ;
       irparams.retransmit-- ;
     }
     break ;
  }
 
  // update LEDs
  if (irparams.irledstate) {
    digitalWrite(BLINKLED, HIGH) ;
    sbi(TCCR2A,COM2A0) ;   // connect pulse clock
  }
  else {
    digitalWrite(BLINKLED, LOW) ;
    cbi(TCCR2A,COM2A0) ;   // disconnect pulse clock
  }
}
// end RC5 state machine

// send code for given buttonid, repeat n times
void button(byte buttonid, int n)
{
  irparams.button = buttoncode(buttonid) ;  // get code
  irparams.retransmit = n - 1;
  irparams.sendflag = 1;     // flag for the ISR to send irparams.button
}

// return ir code for given buttonid
unsigned long buttoncode(byte buttonid)
{
  int i ;
  byte found ;
 
  i = 0 ;
  found = 0 ;
  while (!found && (i < irparams.nbuttons)) {
    if (buttonid == irparams.buttons[i].id) {
      found = 1 ;
    }
    else
      i++ ;
  }
  if (found)
    return(irparams.buttons[i].code) ;
  else
    return(0) ;   // ERROR
}

// set parameters for given brand
void brand(byte brandcode)
{
  int i ;
  switch(brandcode) {
    case PHILIPSTV:
      OCR2A = timer2top(PHILIPSTV_PULSECLOCK) ;  // sets TOP value for TIMER2
      irparams.unit = PHILIPSTV_UNIT ;
      irparams.unitlength = PHILIPSTV_UNITLENGTH ;
      irparams.buttonlength = PHILIPSTV_BUTTONLENGTH ;
      irparams.t = PHILIPSTV_T ;
      irparams.retransgap = PHILIPSTV_RETRANSGAP ;
     
      // buttons
      irparams.nbuttons = 0 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B01 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C01 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B02 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C02 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B03 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C03 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B04 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C04 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B05 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C05 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B06 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C06 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B07 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C07 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B08 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C08 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B09 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C09 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B10 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C10 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B11 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C11 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B12 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C12 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B13 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C13 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B14 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C14 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B15 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C15 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B16 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C16 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B17 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C17 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B18 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C18 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B19 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C19 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B20 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C20 ;
      irparams.buttons[irparams.nbuttons].id = PHILIPSTV_B21 ;
      irparams.buttons[irparams.nbuttons++].code = PHILIPSTV_C21 ;
      break ;
    default:
      Serial.println("ERROR: brand not found") ;
      break ;
  }
}

// return TIMER2 TOP value per given desired frequency (Hz)
uint8_t timer2top(unsigned int freq)
{
  return((byte)((unsigned long)SYSCLOCK/2/freq) - 1) ;
}


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср май 23, 2018 05:18:33 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
попробуй передефайнить:
Код:
#define mark() (irparams.irledstate = 1)
#define space() (irparams.irledstate = 0)
на непосредственный вывод в порт

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср май 23, 2018 09:42:20 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
блин, генерация RC5 настолько проста, что вообще не понятно, к чему там какие-то либы править... в 1 цикл пишется на раз.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср май 23, 2018 14:20:09 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Кому проста, тот совета не спрашивает :-)
Раз библиотеку сделали, наверное, не зря люди старались.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср май 23, 2018 14:45:03 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
AonMaster писал(а):
наверное, не зря люди старались.
ну да: теперь кое-кто вместо того, чтобы прочитать про RC5 и сделать самому, пользуется этой библиотекой и задаёт вопросы на форумах.
не зря.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср май 23, 2018 16:15:13 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
AonMaster писал(а):
Как можно добавить туда функцию передачи просто прямоугольных импульсов, не модулированных несущей 36 кГц?
А для чего это нужно? И выложите полностью проект, а то тот zip не скачивается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср май 23, 2018 18:19:30 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А для чего это нужно? И выложите полностью проект, а то тот zip не скачивается.


Для того, чтоб управлять часами, у которых есть пульт, но нет кнопок - без пульта, подключившись к выходу ИК приемника.

Выкладываю архив.


Вложения:
rc5xmit.zip [4.5 KiB]
Скачиваний: 149
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Чт май 24, 2018 18:02:00 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
AonMaster писал(а):
Для того, чтоб управлять часами, у которых есть пульт, но нет кнопок - без пульта, подключившись к выходу ИК приемника.
Это понятно, но зачем вам понадобился
AonMaster писал(а):
Как можно добавить туда функцию передачи просто прямоугольных импульсов, не модулированных несущей 36 кГц?
МЕААААНДР.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Чт май 24, 2018 18:41:48 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
В смысле зачем? Этот код ведь на светодиод подаёт 36 кгц, модулированную импульсами RC-5.
Тогда после ИК приемника выделится меандр, если я правильно понимаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Пт май 25, 2018 08:09:56 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
ИК приемник выделит ровно то что вы пошлете.
Соедините выход пульта со входом приемника убрав ИК TSOP, естественно если питание пульта и приемника совпадает.
Можно пойти по другому пути, расположить в непосредственной близости от TSOP ИК-диод пульта, тогда останется функция управления по ИК-каналу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Пт май 25, 2018 08:35:58 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Dimon456, изучите принцип ИК-ДУ, чтобы впредь не говорить ерунды.
AonMaster, посмотрите на мой код, передающий команды RC5. хоть это и не ардуино, но, по-моему, все абсолютно должно быть понятно. примитивнее и не придумать.
Код:
/** Передача кода.
 * Передает коды в стандарте RC5
 * @param data передаваемый код
 */
static void send_code(uint16_t data){
   for(uint8_t i=0; i < RC5_CODELEN; i++){
      // передача старшего бита
      if(data & 0x2000){
         // send 1
         out_Lo();
         _delay_us(HALF_BIT_TIME);
         // программная генерация сигнала 1
#if MODULATED_OUTPUT == 1
         // модулированная единица
         modulate();
#else
         // немодулированная единица
         out_Hi();
         _delay_us(HALF_BIT_TIME);
#endif
      } else {
         // send 0
         // программная генерация сигнала 0
#if MODULATED_OUTPUT == 1
         // модулированная единица
         modulate();
#else
         // немодулированная единица
         out_Hi();
         _delay_us(HALF_BIT_TIME);
#endif
         // ноль
         out_Lo();
         _delay_us(HALF_BIT_TIME);
      }
      // сдвиг кода для передачи следующего бита
      data <<= 1;
   }
   // в конце передачи устанавливаем на выходе 0
   out_Lo();
}
как видите, я программно синтезировал модуляцию, которую можно отключать путем изменения дефайна MODULATED_OUTPUT что тут сложного?

прилагаю архив с полным исходником для моего проекта пульта управления лампы настроения: хотите - изучайте и делайте сами по образу и подобию, хотите - используйте, как есть...
Проект: https://simple-devices.ru/prj/9-electr/ ... te-control


Вложения:
RC_source.rar [22.77 KiB]
Скачиваний: 138

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Пт май 25, 2018 11:58:41 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Спасибо, попробую разобраться в Вашем коде.
:))

Прочитал, что вы не используете таймеры и прерывания для этого. Как-то всё просто получается, а другие зачем целые страницы кода и с таймерами в том числе пишут...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Пт май 25, 2018 13:20:28 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
AonMaster писал(а):
Как-то всё просто получается, а другие зачем целые страницы кода и с таймерами в том числе пишут...
за других не скажу, а я всегда реализую самое простое решение из возможных. потому что так проще и легче. простая задача - простое решение.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Сб май 26, 2018 10:06:45 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Перевёл код как мог в ардуино uno, попробовал (вырезав всё лишнее, оставил только посылку байта) - не работает.
Импульсы на выход идут.

Сделал только несущую (вставив в цикл только modulate() и убрав задержу) - померял частотомером (Актаком мультиметр) - 37,4 кГц.

На сайте вашем картинка с фьюзами нечитаема, на какой частоте работает Attiny13? У меня сейчас UNO на 16 МГц, может в этом дело?

Всё вроде получилось. :-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Чт июн 07, 2018 11:09:33 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 3
Спасибо, попробую разобраться в Вашем коде.
:))

Прочитал, что вы не используете таймеры и прерывания для этого. Как-то всё просто получается, а другие зачем целые страницы кода и с таймерами в том числе пишут...


Я когда-то искал, как из бейсика управлять громкостью звуковой карты. И один буржуй мне предложил за 20 баксов dll-ку на 200кбайт, совершенно искренне думая меня осчастливить. Я, понимая что всем в компе управляют регистры, пытался обьяснить ему это. Он искренне мне обьяснял, что я ошибаюсь и всем в компе управляют именно ДЛЛ-ки. В конце - концов послал его. Нашел адрес регистра и десятью буквами кода сделал управление громкостью. Вот такие дела.

Прошу прощенья. Я не совсем понял - вы хотите отправить на фотоприемник сигнал без несущей ? Он его не примет. Он так устроен. Немодулированную несущую - на выходе выдаст ноль. Без сигнала вообще - на выходе - единица. Сигнал без несущей - очень-очень узкие импульсы нуля. А вот инвертирует или нет данные весь тракт опто-передачи, не помню.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Вс июн 10, 2018 14:13:54 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Нет, я отправляю сигнал на выход фотоприёмника, т.е. на вход МК (подключаясь в схему параллельно). Поэтому несущая мне не нужна.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Вс июн 10, 2018 19:08:59 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 0
1. Параллельно выходу - не предсказуемо. Отсоедините выход фотоприемника совсем. И я не зря упоминал об инверсии, или неинверсии всего канала передачи. Пробуйте два варианта сигнала. Например - в одном Пауза = 1, в другом Пауза = 0.
2. А проще - цешкой проверьте напряжение выхода фотоприемника (без входного сигнала) , отсюда и делайте выводы.
3. Прогресс идет и не факт, что ваш фотоприемник - просто датчик. Он вполне себе может иметь свой интерфейс обмена с процем - типа Далласовского однопроводного. А это совсем другой фаршмак. Процессор вас просто "не поймет". Там хоть название есть ?


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Пн июн 11, 2018 06:04:55 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
хоть я этих приёмников и не очень много видал, но они все фильтровали сигнал от несущей и похоже, (тут на 100% утверждать не буду) что все имели выход с открытым коллектором, а это значит, что их можно параллелить.
но, МК, если его параллелить с датчиком (как планирует ТС) или надо отделить диодом (катод к МК) или выход настроить как ОК - для этого в регистр ПОРТ записывается 0, а в регистр ДДР - инверсный выходной сигнал и тогда либо нога болтается в Z состоянии или притягивается к земле (питания в эту ногу МК уже не даст).

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Библиотека rc5xmit- как вывести сигнал без несущей?
СообщениеДобавлено: Ср июн 13, 2018 06:49:24 
Опытный кот

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Пн дек 29, 2014 11:48:22
Сообщений: 793
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я решил этот вопрос отключением датчика на время управления моей схемой посредством электронного ключа, да и ранее уже написал, что всё заработало.
Процессор всё понял.
Спасибо за интересные сведения вам)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y