بخصوص دائرة pwm


(عباده) #1

اخي الحبيب / ابو ايادا
قمت بعمل نسخ للملف الموجود في مشاركتك pwm ولصقه في صفحة micro code studio
وعند compilerأعطاني العديد من الأخطاء ولم يتم تحويل النص
فأين الخطا انتظر ردك وجزاكم الله بكل خير


(majed.jabri) #2

moi majed de la tunisie ,je travaille depuis pas mal de temps sur le microcontroleur de la famille microchip .pour la generation d’un signal pwm je vous donne le programme suivant sous assembleur, je t’assure qu’il fonctionne bien et sous ma responsabilité le logicielle utiliser est MPLAB. si tu veux des

explication je suis votre service

list p=16f876

include <p16f876.inc#

[SIZE=2][SIZE=2]

[/size][/size]duty EQU 20h
TMP1 EQU 21h
TMP2 EQU 22h

ORG 0000h ; vecteur de RESET
GOTO DEBUT
ORG 0005h ; vecteur de début de programme
DEBUT BSF STATUS,5 ; : On accède à la 'Register Bank 1
BCF STATUS,6 ; RP1=0
BCF TRISC,2 ; RC2/CCP1 en sortie
MOVLW 3fh ; Configuration du registre Période du timer 2 ( ici à 24
MOVWF PR2
MOVLW 0C0h ; PORT B: EESSSSSS
MOVWF TRISB
MOVLW 87h
MOVWF OPTION_REG
BCF STATUS,5 ; RP0=0: On accède à la 'Register Bank 0
MOVLW 000h ; On configure le registre Duty Cycle à 0
MOVWF CCPR1L
MOVLW 00Fh ; On configure le registre CCP1CON: CCP1 en mode PWM
MOVWF CCP1CON
MOVLW 004h ; Configuration du registre T2CON: Fprescaler=F, Timer2 on
MOVWF T2CON
CLRF INTCON ; Aucune interruption autorisée
CLRF PORTB
MOVLW 00h ; Mise à 0 de la variable 'duty
MOVWF duty

CYCLE BTFSC PORTB,7 ; si PB7=1 on incremente la variable 'duty
CALL incre
BTFSC PORTB,6 ; si PB6=1 on decremente la variable 'duty
CALL decre
CALL tempo ; on marque une pause d’environ 1/2 seconde
GOTO CYCLE
incre MOVLW 016h ; on charge dans W la butee haute (ici à 22
SUBWF duty,0 ; on soustrait la variable à la butee haute
BTFSC STATUS,2 ; si le resultat est égale à 0 (Z=1) on sort de la routine
RETURN
INCF duty,1 ; On incremente la variable
MOVF duty,0;On sort le resultat dans le registre CCPR1L (Duty Cycle
MOVWF CCPR1L
RETURN
decre MOVF duty,1; On test le contenu de la variable en regardant
BTFSC STATUS,2;'état du bit Z. Si la variable est égale à 0 (Z=1
RETURN ; on sort de la routine
DECFSZ duty,1 ; On decremente la variable
NOP
MOVF duty,0; On sort le resultat dans le registre CCPR1L(Duty Cycle
MOVWF CCPR1L
RETURN
tempo MOVLW 0FFh ; tempo de 1/2 seconde
MOVWF TMP1
MOVLW 018h
MOVWF TMP2
TP1 DECFSZ TMP1,1
GOTO TP1
MOVLW 0FFh
MOVWF TMP1
DECFSZ TMP2,1
GOTO TP1
RETURN

END


(system) #3

اخي العزيز اريد من انتعطني الفرق العملي بين الثيروستور و pwn راجين منك الصبر لاني ضعيف في الامرين ولك مني جزير الشكر


(system) #4

اخى العزيز لا يوجد علاقة بين الاثنين

الثيريستور هو عبارة عن دايود بس مضاف الية gateتستخدم لتشغيلة و بيشخدم اصلا فى الشواحن و اى استخدام فية تقطيع للاشارة بتردد معين

اما PWM فهو اختصار Pulse Width Modulation
مثل طريقة لاخراج الاشارة بشكل معين مثل اشارة بس مش ب duty 50% غالبا بيكون مختلف

ارجو ان اكون قد افدت