Добрый вечер. Может кто подскажет с блоком пользователя "программный шим". Библиотекой пользовался с форума
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++;
}