Генерация синхроимпульсов

nikitab900@gmail.com
Offline
Зарегистрирован: 30.01.2014

Здравствуйте! Извините за нубский вопрос...

Как мне реализовать подобное (см. картинку)? Т.е. нужно получить несколько синхросигналов синхронизированных между собой но с разной частотой и скважностью. Пробовал библиотеку PWM lib (http://forum.arduino.cc/index.php?topic=117425.0), но сигналы, естественно, разбегаются. Частота первого сигнала 15625 Гц со скважностью около 20%, второго - всего 50 Гц с такой же скважностью (да да, пытаюсь сделать синхрогенератор для видикона:)). Пологаю, надо курить прерывания по таймеру?)

nikitab900@gmail.com
Offline
Зарегистрирован: 30.01.2014

Решил делать "влоб":

int i=0;

void setup()
{
  DDRB = 0xFF; //PIN11 is write mode
  DDRH = 0xFF; //PIN9 is write mode
}

void loop()
{
  PORTH = _BV(PH6);  //VSYNC High on PIN9
  while (i<313)
  {    
    PORTB = _BV(PB5);  //HSYNC High on PIN11
    delayMicroseconds(5);
    __asm__("nop\n\t"); //HSYNC High = 4.76us
    PORTB = !_BV(PB5);  //VSYNC Low on PIN11    
    delayMicroseconds(22);
    
    if (i<1)
    {  
      PORTH = !_BV(PH6);  //VSYNC Low on PIN9
    }
    
    delayMicroseconds(37);
    i++;
    __asm__("nop\n\t"); //15640 Hz   
  }
  i=0;  
}

Криво немного, но работает). Стабильность выходной частоты нормальная (осциллограф показывает изредка небольшие скачки, но на сколько это важно покажут только испытания непосредственно на видиконе).

 
Мне помогла статья - http://cxem.net/arduino/arduino65.php
maksim
Offline
Зарегистрирован: 12.02.2012

nikitab900@gmail.com пишет:

изредка небольшие скачки

Запретите глобально прерывания cli().

nikitab900@gmail.com
Offline
Зарегистрирован: 30.01.2014

Спасибо! Попробую завтра