Перейти к содержанию
    

Ronin777

Участник
  • Постов

    5
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. это симулятор, "обвеска" идет программная (Proteus), я вроде разобрался в чем проблема, у меня не получилось настроить ШИМ контроллера (скорее всего это неполадка в Proteus) поэтому пришлось реализовать ШИМ программно, вроде все получилось. А идея программы заключается в том, что мы подаем на аналоговый вход с датчика температуры сигнал и в зависимости от этого сигнала управляем двигателем, чем больше напряжение на аналоговом входе тем выше скорость двигателя. Будет ли это работать в железе никому не интересно, боюсь препод и в СИ особо не разбирается, но надеюсь он меня поймет:)
  2. Здравствуйте еще раз...сделал в Протеусе вот такую схемку далее заливаю вот такой код #include<pic.h> #define START_FUN 768 #include "delay.h" int adc_res; int pwm_val; main(){ TRISA =0xFF; TRISC = 0; /******** настройка ШИМ *********/ T2CON = 0x01; //TMR2 выходной делитель 1:1, предделитель - 1:1 PR2 = 0xFF; //длительность ШИМ CCPR1L = 0; CCP1CON= 0x0C; //включить ШИМ TMR2ON = 1; //TMR2 включить /******** настройка АЦП **********/ ADCON0= 0x81; //модуль включен, Fosc/32 ADCON1= 0x8E; //выравнивание вправо, 1 вход аналоговый ADIF = 0; //сбросить флаг прерывания от АЦП DelayUs(40); ADGO = 1; //начать преобразование while (1){ if( ADIF ){ ADIF = 0; adc_res = ADRESH * 256 + ADRESL; if(adc_res > START_FUN){ pwm_val = (adc_res - START_FUN) * 5; CCPR1L=(char)(pwm_val>>2); CCP1CON=((char)(pwm_val<<4)&0x30) | 0x0C; } else{ pwm_val = 0; CCPR1L=(char)(pwm_val>>2); CCP1CON=((char)(pwm_val<<4)&0x30) | 0x0C; } DelayUs(40); ADGO = 1; } } } проблема заключается в том что на PORTC не генерируется ШИМ...он постоянно остается 0...что не так сделал подскажите пожалуйста... PS Ув. админы извините за флуд сразу не заметил этого раздела...
×
×
  • Создать...