программный шим
программный шим
Доброго времени суток. Подскажите пожалуйста как организовать программный шим в среде программирования ФЛПРОГ. Можно ли его совмещать с аппаратным шимом?
программный шим
Добрый вечер. Может кто подскажет с блоком пользователя "программный шим". Библиотекой пользовался с форума http://arduino.ru/forum/programmirovani ... bom-vyvode. Если быть точнее не библиотекой а функцией(библиотека не скачивается). Функция вставляется в новую вкладку
#ifdef ALL
#define PIN_0
#define PIN_1
#define PIN_2
#define PIN_3
#define PIN_4
#define PIN_5
#define PIN_6
#define PIN_7
#define PIN_8
#define PIN_9
#define PIN_10
#define PIN_11
#define PIN_12
#define PIN_13
#define PIN_14
#define PIN_15
#define PIN_16
#define PIN_17
#define PIN_18
#define PIN_19
#endif
#define SBI(port, pin) asm volatile ("sbi %0, %1" :: "I" (_SFR_IO_ADDR(port)), "I" (pin))
#define CHECK(pwms, port, pin) \
asm volatile ( \
"cpc %0, %1 \n\t" \
"brlo 0f \n\t" \
"cbi %2, %3 \n\t" \
"rjmp 1f \n\t" \
"0: sbi %2, %3 \n\t" \
"1: nop \n\t" \
: "+r" (pwm), "+r" (pwms) \
: "I" (_SFR_IO_ADDR(port)), "I" (pin)\
)\
void Init_PWM()
{
cli();
TCCR2A = 0;
TCCR2B = 3; //CLK
OCR2A = 1;
TIMSK2 = 2; //разрешаем прерывание по совпадению
sei();
#ifdef PIN_0
SBI(DDRD, 0);
#endif
#ifdef PIN_1
SBI(DDRD, 1);
#endif
#ifdef PIN_2
SBI(DDRD, 2);
#endif
#ifdef PIN_3
SBI(DDRD, 3);
#endif
#ifdef PIN_4
SBI(DDRD, 4);
#endif
#ifdef PIN_5
SBI(DDRD, 5);
#endif
#ifdef PIN_6
SBI(DDRD, 6);
#endif
#ifdef PIN_7
SBI(DDRD, 7);
#endif
#ifdef PIN_8
SBI(DDRB, 0);
#endif
#ifdef PIN_9
SBI(DDRB, 1);
#endif
#ifdef PIN_10
SBI(DDRB, 2);
#endif
#ifdef PIN_11
SBI(DDRB, 3);
#endif
#ifdef PIN_12
SBI(DDRB, 4);
#endif
#ifdef PIN_13
SBI(DDRB, 5);
#endif
#ifdef PIN_14
SBI(DDRC, 0);
#endif
#ifdef PIN_15
SBI(DDRC, 1);
#endif
#ifdef PIN_16
SBI(DDRC, 2);
#endif
#ifdef PIN_17
SBI(DDRC, 3);
#endif
#ifdef PIN_18
SBI(DDRC, 4);
#endif
#ifdef PIN_19
SBI(DDRC, 5);
#endif
}
volatile uint8_t pwm;
volatile uint8_t pwms[20];
void analog_Frequence(byte prescaler)
{
TCCR2B = prescaler; //CLK
}
void analog_Write(byte pin, byte value)
{
pwms [pin]= value;
}
byte analog_State(byte pin)
{
return pwms[pin];
}
ISR(TIMER2_COMPA_vect)
{
asm volatile ("clr %0" : "+r" (TCNT2)); // TCNT2 = 0;
#ifdef PIN_0
CHECK(pwms[0], PORTD, 0);
#endif
#ifdef PIN_1
CHECK(pwms[1], PORTD, 1);
#endif
#ifdef PIN_2
CHECK(pwms[2], PORTD, 2);
#endif
#ifdef PIN_3
CHECK(pwms[3], PORTD, 3);
#endif
#ifdef PIN_4
CHECK(pwms[4], PORTD, 4);
#endif
#ifdef PIN_5
CHECK(pwms[5], PORTD, 5);
#endif
#ifdef PIN_6
CHECK(pwms[6], PORTD, 6);
#endif
#ifdef PIN_7
CHECK(pwms[7], PORTD, 7);
#endif
#ifdef PIN_8
CHECK(pwms[8], PORTB, 0);
#endif
#ifdef PIN_9
CHECK(pwms[9], PORTB, 1);
#endif
#ifdef PIN_10
CHECK(pwms[10], PORTB, 2);
#endif
#ifdef PIN_11
CHECK(pwms[11], PORTB, 3);
#endif
#ifdef PIN_12
CHECK(pwms[12], PORTB, 4);
#endif
#ifdef PIN_13
CHECK(pwms[13], PORTB, 5);
#endif
#ifdef PIN_14
CHECK(pwms[14], PORTC, 0);
#endif
#ifdef PIN_15
CHECK(pwms[15], PORTC, 1);
#endif
#ifdef PIN_16
CHECK(pwms[16], PORTC, 2);
#endif
#ifdef PIN_17
CHECK(pwms[17], PORTC, 3);
#endif
#ifdef PIN_18
CHECK(pwms[18], PORTC, 4);
#endif
#ifdef PIN_19
CHECK(pwms[19], PORTC, 5);
#endif
asm volatile ("inc %0" : "+r" (pwm)); //pwm++;
}
#ifdef ALL
#define PIN_0
#define PIN_1
#define PIN_2
#define PIN_3
#define PIN_4
#define PIN_5
#define PIN_6
#define PIN_7
#define PIN_8
#define PIN_9
#define PIN_10
#define PIN_11
#define PIN_12
#define PIN_13
#define PIN_14
#define PIN_15
#define PIN_16
#define PIN_17
#define PIN_18
#define PIN_19
#endif
#define SBI(port, pin) asm volatile ("sbi %0, %1" :: "I" (_SFR_IO_ADDR(port)), "I" (pin))
#define CHECK(pwms, port, pin) \
asm volatile ( \
"cpc %0, %1 \n\t" \
"brlo 0f \n\t" \
"cbi %2, %3 \n\t" \
"rjmp 1f \n\t" \
"0: sbi %2, %3 \n\t" \
"1: nop \n\t" \
: "+r" (pwm), "+r" (pwms) \
: "I" (_SFR_IO_ADDR(port)), "I" (pin)\
)\
void Init_PWM()
{
cli();
TCCR2A = 0;
TCCR2B = 3; //CLK
OCR2A = 1;
TIMSK2 = 2; //разрешаем прерывание по совпадению
sei();
#ifdef PIN_0
SBI(DDRD, 0);
#endif
#ifdef PIN_1
SBI(DDRD, 1);
#endif
#ifdef PIN_2
SBI(DDRD, 2);
#endif
#ifdef PIN_3
SBI(DDRD, 3);
#endif
#ifdef PIN_4
SBI(DDRD, 4);
#endif
#ifdef PIN_5
SBI(DDRD, 5);
#endif
#ifdef PIN_6
SBI(DDRD, 6);
#endif
#ifdef PIN_7
SBI(DDRD, 7);
#endif
#ifdef PIN_8
SBI(DDRB, 0);
#endif
#ifdef PIN_9
SBI(DDRB, 1);
#endif
#ifdef PIN_10
SBI(DDRB, 2);
#endif
#ifdef PIN_11
SBI(DDRB, 3);
#endif
#ifdef PIN_12
SBI(DDRB, 4);
#endif
#ifdef PIN_13
SBI(DDRB, 5);
#endif
#ifdef PIN_14
SBI(DDRC, 0);
#endif
#ifdef PIN_15
SBI(DDRC, 1);
#endif
#ifdef PIN_16
SBI(DDRC, 2);
#endif
#ifdef PIN_17
SBI(DDRC, 3);
#endif
#ifdef PIN_18
SBI(DDRC, 4);
#endif
#ifdef PIN_19
SBI(DDRC, 5);
#endif
}
volatile uint8_t pwm;
volatile uint8_t pwms[20];
void analog_Frequence(byte prescaler)
{
TCCR2B = prescaler; //CLK
}
void analog_Write(byte pin, byte value)
{
pwms [pin]= value;
}
byte analog_State(byte pin)
{
return pwms[pin];
}
ISR(TIMER2_COMPA_vect)
{
asm volatile ("clr %0" : "+r" (TCNT2)); // TCNT2 = 0;
#ifdef PIN_0
CHECK(pwms[0], PORTD, 0);
#endif
#ifdef PIN_1
CHECK(pwms[1], PORTD, 1);
#endif
#ifdef PIN_2
CHECK(pwms[2], PORTD, 2);
#endif
#ifdef PIN_3
CHECK(pwms[3], PORTD, 3);
#endif
#ifdef PIN_4
CHECK(pwms[4], PORTD, 4);
#endif
#ifdef PIN_5
CHECK(pwms[5], PORTD, 5);
#endif
#ifdef PIN_6
CHECK(pwms[6], PORTD, 6);
#endif
#ifdef PIN_7
CHECK(pwms[7], PORTD, 7);
#endif
#ifdef PIN_8
CHECK(pwms[8], PORTB, 0);
#endif
#ifdef PIN_9
CHECK(pwms[9], PORTB, 1);
#endif
#ifdef PIN_10
CHECK(pwms[10], PORTB, 2);
#endif
#ifdef PIN_11
CHECK(pwms[11], PORTB, 3);
#endif
#ifdef PIN_12
CHECK(pwms[12], PORTB, 4);
#endif
#ifdef PIN_13
CHECK(pwms[13], PORTB, 5);
#endif
#ifdef PIN_14
CHECK(pwms[14], PORTC, 0);
#endif
#ifdef PIN_15
CHECK(pwms[15], PORTC, 1);
#endif
#ifdef PIN_16
CHECK(pwms[16], PORTC, 2);
#endif
#ifdef PIN_17
CHECK(pwms[17], PORTC, 3);
#endif
#ifdef PIN_18
CHECK(pwms[18], PORTC, 4);
#endif
#ifdef PIN_19
CHECK(pwms[19], PORTC, 5);
#endif
asm volatile ("inc %0" : "+r" (pwm)); //pwm++;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
программный шим
Пример получившегося файла ARDUINO IDE/
Строчку #define PIN__126594874_2 NOMERPIN в начале программы надо привести к виду #define PIN_4, где 4 номер выхода шим.
Добавлено (21.02.2017, 20:36)
---------------------------------------------
Или может кто подскажет в каком направлении копать. Библиотеку какую-нибудь
Строчку #define PIN__126594874_2 NOMERPIN в начале программы надо привести к виду #define PIN_4, где 4 номер выхода шим.
Добавлено (21.02.2017, 20:36)
---------------------------------------------
Или может кто подскажет в каком направлении копать. Библиотеку какую-нибудь
У вас нет необходимых прав для просмотра вложений в этом сообщении.
программный шим
Получилось с горем пополам.
пользовался ресурсами форума http://arduino.ru/forum/programmirovani ... bom-vyvode
Библиотеку PWM ненашел все ссылки битые. Приходится делать новую вкладку"PWM" в скетче и вставлять
туда "скетчнаНОВОЙвкладкеНазываетсяPWM". Невкакую нехочет работать с функцией защиты от дребезга контактов(я подоз
реваю что дело в millis() ). Тригер ТТ работает.Впринципе если первым в программе будет включаться
светодиод с ШИМОМ то дребезг контактов мешать не будет. Вроде как используется 2 таймер нужно это учитывать при подключении
других устройств.Можно попробывать поменять таймер в библиотеке-функции.Следует обратить внимание на #define PIN_(здесь должен быть
номер выхода)
пользовался ресурсами форума http://arduino.ru/forum/programmirovani ... bom-vyvode
Библиотеку PWM ненашел все ссылки битые. Приходится делать новую вкладку"PWM" в скетче и вставлять
туда "скетчнаНОВОЙвкладкеНазываетсяPWM". Невкакую нехочет работать с функцией защиты от дребезга контактов(я подоз
реваю что дело в millis() ). Тригер ТТ работает.Впринципе если первым в программе будет включаться
светодиод с ШИМОМ то дребезг контактов мешать не будет. Вроде как используется 2 таймер нужно это учитывать при подключении
других устройств.Можно попробывать поменять таймер в библиотеке-функции.Следует обратить внимание на #define PIN_(здесь должен быть
номер выхода)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей