Отговори на тема  [ 8 мнения ] 
Проблем: програмата ми се стартира отново и отново 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Проблем: програмата ми се стартира отново и отново
Здравейте!
Проблема ми е следния:
искам да направя плавно тръгване на постояннотоков двигател, като за целта използвам pwm модула на pic16f684. Постепенно увеличавам коефициента на запълване на импулса, достигам пълна мощност, но не мога да накарам изхода да стане '1', а започва да се инкрементира отново.Проблема обаче възниква още при инициализацията на ПВМ модула. ето и кода:
Код:
   PROCESSOR   16F684
      LIST      p=16F684
      #include   <p16f684.inc>
      __CONFIG   _CP_OFF & _WDT_OFF & _MCLRE_ON & _INTOSCIO
      #define      B0   bcf STATUS,RP0;izbor na banka 0
      #define      B1   bsf STATUS,RP0;izbor na banka 1
   
W         EQU   0
F         EQU   1
DUTY   EQU     20H
CIKYL   EQU     21H      
CIKYL1   EQU     22H
   ORG H'00'
   GOTO   START
START

   B0
   CLRF PORTC ;Init PORTC
   MOVLW 07h ;Set RC<4,1:0> to
   MOVWF CMCON0 ;digital I/O
   B1
   CLRF ANSEL ;digital I/O
   MOVLW 00H ;Set RC<3:2> as OUT
   MOVWF TRISC
   B0
   BSF   PORTC,5
   B1
   BCF   OPTION_REG,5;TMR0 INTERNAL CLOCK
   BCF   OPTION_REG,7;PULL-UPS ENABLED

   BCF   OPTION_REG,3;PRESCALER ASS. TO TMR0

   BSF   OPTION_REG,0;PRESCALER=256
   BSF   OPTION_REG,1
   BCF   OPTION_REG,2

   GOTO   MAIN


SETUP_PWM   B1
         BSF      TRISC,5
         MOVLW   D'199'   ;
         MOVWF   PR2      ;2
         MOVLW   B'00001110';PWM ACTIV-LOW, DUTY'S LSbits=0
         B0
         MOVWF   CCP1CON   ;3
         ;4
         MOVLW   D'25'      ;PRIMERNA NA4ALNA STOJNOST
         MOVWF   CCPR1L      
      
         BCF      PIR1, TMR2IF;5.1
         BCF      T2CON,T2CKPS0;5.2
         BCF      T2CON,T2CKPS1;5.2
         BSF      T2CON,TMR2ON;5.3
      
   CHAKAJ   BTFSS   PIR1,1;4AKAME TAJMERA DA SE NAPYLNI
         GOTO   CHAKAJ
         B1
         BCF      TRISC,5;SET PWM OUTPUT

         RETURN
MAIN


      CALL   SETUP_PWM;

      B0
      CLRF   CCP1CON
      NOP
      B1
      BCF      TRISC,5
      BCF      ANSEL,5
      B0
      BCF      PORTC,5
   END

Ще съм много благодарен за всяка помощ. :)


Чет Мар 06, 2008 7:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
Нямаш край на MAIN. Тури едно goto $-1 преди END. Това END е директива на асемблера (компилатора.).


Пет Мар 07, 2008 2:58 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
@ji4ka:
Благодаря за отговора.
А защо да не напиша goto $ ? С goto $-1 ще се изпълнява последната инструкция постоянно, нали?


Пет Мар 07, 2008 11:41 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
Няма значение - важно е да зацикли програмата на място защото иначе програмния брояч си нараства и като стигне края на паметта започва отначало.


Пет Мар 07, 2008 9:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Като не искаш да ти се изпълнява последната инструкция,т.е да влезеш в празен цикъл:
B0
BCF PORTC,5
NOP
NOP
goto $-1
END


Пет Мар 07, 2008 10:32 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 02, 2004 7:22 pm
Мнения: 140
Мнение 
goto $-1 не изпълнява последната инструкция, а пак отива на него.


Пон Мар 10, 2008 11:53 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Не знам как ти работи програмата без goto,а освен това таймера по принцип си работи така,брои,препълва и пак почва от начало,освен ако ти не вземеш мерки да направиш изхода си независим от него когато е стигнал края.Според мен не си си построил програмата правилно,Трябвало е да иползваш прекъсване от таймера което ти установява изхода в 1 след като PWM а е стигнал края.Провери си да не ти е включен WDT,тогава наистина ще ти се ресетва постоянно програмата.


Пон Мар 10, 2008 11:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Най елегантното решение според мен би било :
GIE=0 (ако въобще се ползват прекъсвания)
SLEEP


Вто Мар 11, 2008 5:10 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни