пример кода не сколькими сообщениями выше.kote52 писал(а): Давай те код,
Вы сами начните и вам помогут.
неверноkote52 писал(а):Вообще есть мысли смотреть регистр TIFR1
пример кода не сколькими сообщениями выше.kote52 писал(а): Давай те код,
неверноkote52 писал(а):Вообще есть мысли смотреть регистр TIFR1
Код: Выделить всё
ISR(TIMER1_OVF_vect)
{
// сюда попадаем при нарастающем фронте
}
ISR(TIMER1_COMPA_vect)
{
// сюда попадаем при спадающем фронте
}
#define PERIOD_kHz 7999UL //настроим Т1 на 1мс (1 кГц) = 8000000/1000Гц=8000-1=7999
#define IGLA 500 //Импульс 40.0%
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Disconnected
// OC1B output: Non-Inverted PWM
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 1 ms
// Output Pulse(s):
// OC1B Period: 1 ms Width: ... ms
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10); // OC1B output: Non-Inverted PWM
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1=0;
ICR1=0x1F3F; // 1F3F(7999) - 1кГц - 1.0000 ms
OCR1A=0;
OCR1B = (PERIOD_kHz*(IGLA))*0.001; // 40% OC1B output: Non-Inverted PWM
OCR1A=OCR1B; //
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (1<<OCIE1A) | (1<<TOIE1);
sei();
Код: Выделить всё
ISR(TIMER1_OVF_vect)
{
// сюда попадаем при нарастающем фронте
}
ISR(TIMER1_COMPA_vect)
{
// сюда попадаем при спадающем фронте
}а что вам нужно?Starichok51 писал(а):мне это не нужно
Добавлено after 9 minutes 44 seconds:Starichok51 писал(а):то проверяешь пин этого порта
Мой студент то же двигался точно в таком же правильном направлении, и удвигался до водителя яндекс-такси.kote52 писал(а):то мне надо понимать что я двигаюсь в правильном направление
плюсDimon456 писал(а):пример кода не сколькими сообщениями выше.
Теперь отвечаю на вопросCOKPOWEHEU писал(а):По прерыванию TIMERx_COMPY для прямого ШИМ попадаете на низкий уровень на выходе, по TIMERx_OVF - на высокий.
так интереснее будет, может kote52 сам додумается.Starichok51 писал(а):а зачем ты разделил прерывания на канал А, а выход ШИМ на канал В?
Мой студент то же двигался точно в таком же правильном направлении, и удвигался до водителя яндекс-такси.kote52 писал(а):то мне надо понимать что я двигаюсь в правильном направление
плюсDimon456 писал(а):пример кода не сколькими сообщениями выше.
[/uquote]COKPOWEHEU писал(а):По прерыванию TIMERx_COMPY для прямого ШИМ попадаете на низкий уровень на выходе, по TIMERx_OVF - на высокий.
так интереснее будет, может kote52 сам додумается.[/uquote]Starichok51 писал(а):а зачем ты разделил прерывания на канал А, а выход ШИМ на канал В?
да, это можно сделать.kote52 писал(а):Предположу, это было сделано чтоб друг другу не мешать, с помощью канал А я могу попасть в любую точку периода задав регистру OCR1A иное значение, отличное от PWR.
окStarichok51 писал(а):изменяя число в OCR1A, можно попасть в любую точку периода. хоть в заведомый ноль на выходе, хоть в заведомую единицу на выходе
хм... а как же тогда попасть "в заведомый ноль на выходе" с запасом времени на переходные процессыStarichok51 писал(а):важно помнить, что число в OCR1A не должно превышать число в OCR1B.
450км, только китайцы, доставка около 2 месяцев.slav0n писал(а):и иди в магаз