FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Среда, 28.06.2017, 08:27
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » программный шим
программный шим
alex555 Дата: Понедельник, 11.04.2016, 23:47 | Сообщение # 1
Рядовой
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
Доброго времени суток. Подскажите пожалуйста как организовать программный шим в среде программирования ФЛПРОГ. Можно ли его совмещать с аппаратным шимом?
 
alex555 Дата: Вторник, 21.02.2017, 20:11 | Сообщение # 2
Рядовой
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
Добрый вечер. Может кто подскажет с блоком пользователя "программный шим". Библиотекой пользовался с форума http://arduino.ru/forum/programmirovanie/analogwrite-na-lyubom-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++;
}
Прикрепления: progSHIM-CODE-.ubi(24Kb)
 
alex555 Дата: Вторник, 21.02.2017, 20:23 | Сообщение # 3
Рядовой
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
файл ФЛПРОГ
Прикрепления: 4211420.flp(62Kb)
 
alex555 Дата: Вторник, 21.02.2017, 20:36 | Сообщение # 4
Рядовой
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
Пример  получившегося  файла ARDUINO IDE/
Строчку #define PIN__126594874_2 NOMERPIN  в начале программы  надо привести к виду #define PIN_4, где 4 номер выхода шим.

Добавлено (21.02.2017, 20:36)
---------------------------------------------
Или может кто подскажет в каком направлении копать. Библиотеку какую-нибудь

Прикрепления: pr47.rar(1Kb)
 
alex555 Дата: Четверг, 23.02.2017, 00:30 | Сообщение # 5
Рядовой
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
Получилось с горем пополам.

пользовался ресурсами форума http://arduino.ru/forum/programmirovanie/analogwrite-na-lyubom-vyvode
Библиотеку PWM ненашел все ссылки битые. Приходится делать новую вкладку"PWM" в скетче и вставлять 
туда    "скетчнаНОВОЙвкладкеНазываетсяPWM". Невкакую нехочет работать с функцией защиты от дребезга контактов(я подоз
реваю что дело в millis() ). Тригер ТТ работает.Впринципе если первым в программе будет включаться 
светодиод с ШИМОМ то дребезг контактов мешать не будет. Вроде как используется 2 таймер нужно это учитывать при подключении
других устройств.Можно попробывать поменять таймер в библиотеке-функции.Следует обратить внимание на #define PIN_(здесь должен быть 
номер выхода)
Прикрепления: PWM.txt(3Kb) · 6609262.txt(1Kb) · pr10.rar(1Kb) · 6234096.flp(63Kb) · 0012692.ubi(24Kb)
 
Форум » Основной » Спросить у знатоков » программный шим
Страница 1 из 11
Поиск:

FLProg © 2017
Яндекс.Метрика