i have a code that shot a single pulse from pin D5 timer 0 (based on josh levine code), it works fine. the code is below
#define OSP_SET_WIDTH(cycles) (OCR0B = 0xff-(cycles-1))
void osp_setup(uint8_t cycles) {
TCCR0B = 0;
TCNT0 = 0x00;
OCR0A = 0;
OSP_SET_WIDTH(cycles);
TCCR0A = _BV(COM0B0) | _BV(COM0B1) | _BV(WGM00) | _BV(WGM01);
TCCR0B = _BV(WGM02) | _BV(CS00);
DDRD |= _BV(5);
}
void osp_setup() {
osp_setup(1);
}
#define OSP_FIRE() (TCNT0 = OCR0B - 1)
#define OSP_INPROGRESS() (TCNT0>0)
#define OSP_SET_AND_FIRE(cycles) {uint8_t m=0xff-(cycles-1); OCR0B=m;TCNT0 =m-1;}
void setup()
{
osp_setup();
}
void loop()
{
OSP_SET_AND_FIRE(4);
delayMicroseconds(20);
}
however, i want to generate the same pulse in pin 10 or 9 which is timer 1, so a change the code a bit just like this
#define OSP_SET_WIDTH(cycles) (OCR1B = 0xff-(cycles-1))
void osp_setup(uint8_t cycles) {
TCCR1B = 0;
TCNT1 = 0x00;
OCR1A = 0;
OSP_SET_WIDTH(cycles);
TCCR1A = _BV(COM1B0) | _BV(COM1B1) | _BV(WGM10) | _BV(WGM11);
TCCR1B = _BV(WGM12) | _BV(CS10);
DDRD |= _BV(10);
}
void osp_setup() {
osp_setup(1);
}
#define OSP_FIRE() (TCNT1 = OCR1B - 1)
#define OSP_INPROGRESS() (TCNT1>0)
#define OSP_SET_AND_FIRE(cycles) {uint8_t m=0xff-(cycles-1); OCR1B=m;TCNT1 =m-1;}
void setup()
{
osp_setup();
}
void loop()
{
OSP_SET_AND_FIRE(4);
delayMicroseconds(20);
}
but it doesn't work, and i am stuck, any help? i use arduino nano
Thank you
it doesn't work
it didn't generate the desired signal
that is almost the same asit doesn't work
.... what did it generate?