PDA

View Full Version : How to make PWM to all the pins at the portB in same time on 16f628



dejankengur
- 10th December 2010, 09:05
How to make PWM to all the pins at the portB in same time on 16f628
or is there another command: for example, eight LEDs connected portb 0,1,2,3,4,5,6,7 to work with 50% at the same time.
At the same time to light and perish one by one with 100%.
but never to perish under 50%.

please help

sayzer
- 10th December 2010, 09:29
Use a 7408.

Connect one input of each "AND" to PWM output of F628A, all other inputs to your PORTB pins.

Whenever and whichever of your PORTB pin is high, you will get the same PWM output.

Jerson
- 10th December 2010, 09:30
This should give you ideas
http://www.picbasic.co.uk/forum/content.php?r=217-MIBAM-%28Mirror-Imaged-Bit-Angle-Modulation%29

dejankengur
- 10th December 2010, 10:08
Use a 7408.

Connect one input of each "AND" to PWM output of F628A, all other inputs to your PORTB pins.

Whenever and whichever of your PORTB pin is high, you will get the same PWM output.

CAN YOU tell me examples of how to do it

sayzer
- 11th December 2010, 16:18
This picture is from WEB.

dejankengur
- 26th December 2010, 14:50
http://picprojects.org.uk/projects/ledchaserpwm/index.htm
vivi this. In assembly language, I do not understand assembly,
Watch the clip 1.30 to 1.50 min. That I want to do but do not know how the PICBASIC PRO

ScaleRobotics
- 26th December 2010, 17:25
http://picprojects.org.uk/projects/ledchaserpwm/index.htm
vivi this. In assembly language, I do not understand assembly,
Watch the clip 1.30 to 1.50 min. That I want to do but do not know how the PICBASIC PRO

There are a lot of effects in that video. This will do the "scanner" part: http://www.picbasic.co.uk/forum/showthread.php?t=10564&p=70256#post70256 (http://www.picbasic.co.uk/forum/showthread.php?t=10564)

dejankengur
- 26th December 2010, 19:55
errors with 16f628
Fatal TEST.ASM 435 : [308] macro buffer overflow


;----[ MIBAM Setup ]--------------------------------------------------------
BAM_COUNT CON 8 ; How many BAM Pins are used?
INCLUDE "MIBAM.pbp" ; Mirror Image BAM module

BAM_DUTY VAR BYTE[BAM_COUNT]
LED1 VAR BAM_DUTY[0] ; group them in an array for easy access
LED2 VAR BAM_DUTY[1] ; with FOR loops etc.
LED3 VAR BAM_DUTY[2]
LED4 VAR BAM_DUTY[3]
LED5 VAR BAM_DUTY[4]
LED6 VAR BAM_DUTY[5]
LED7 VAR BAM_DUTY[6]
LED8 VAR BAM_DUTY[7]

ASM
BAM_LIST macro ; Define PIN's to use for BAM
BAM_PIN (PORTB,0, LED1) ; and the associated Duty variables
BAM_PIN (PORTB,1, LED2)
BAM_PIN (PORTB,2, LED3)
BAM_PIN (PORTB,3, LED4)
BAM_PIN (PORTB,4, LED5)
BAM_PIN (PORTB,5, LED6)
BAM_PIN (PORTB,6, LED7)
BAM_PIN (PORTB,7, LED8)
endm
BAM_INIT BAM_LIST ; Initialize the Pins
ENDASM

Speed CON 6 ; Smaller = Faster
TracerSpeed CON 15 ; Smaller = Faster Left/Right
Brightness CON 200 ; Tracers DutyCycle
DrainSpeed CON 30 ; Smaller = Shorter Trail

Idx VAR BYTE
LoopCount VAR BYTE
NextLED VAR BYTE
TraceDIR VAR BIT

TraceDIR = 0
LoopCount = 0
NextLED = 0

Main:
if LoopCount = TracerSpeed then ; __[ Cylon/Kitt Scanner ]__
LoopCount = 0
BAM_DUTY(NextLED) = Brightness
if TraceDIR then ; if scanning left
NextLED = NextLED - 1
if NextLED = 0 then TraceDIR = 0
else ; else scanning right
NextLED = NextLED + 1
if NextLED = BAM_COUNT-1 then TraceDIR = 1
endif
endif

FOR Idx = 0 to BAM_COUNT - 1 ; Drain all dutycycles
IF BAM_DUTY(Idx) > 0 then
BAM_DUTY(Idx) = BAM_DUTY(Idx)*DrainSpeed/(DrainSpeed+1)
ENDIF
NEXT Idx
pause Speed
LoopCount = LoopCount + 1
GOTO Main

ScaleRobotics
- 26th December 2010, 20:43
errors with 16f628
Fatal TEST.ASM 435 : [308] macro buffer overflow

I did not get that error with your code, but I did need to add the stuff about wsave psave etc variables, which is explained in the mibam thread.


;____[ For 12F/16F only - Interrupt Context save locations]_________________
wsave var byte $20 SYSTEM ' location for W if in bank0
;wsave var byte $70 SYSTEM ' Alternate save location for W
' if using $70, comment out wsave1-3
' --- IF any of these next three lines cause an error ?? -------------------
' Comment them out to fix the problem ----
' -- The chip being used determines which variables are needed -------------
wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1
wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2
'wsave3 VAR BYTE $1A0 SYSTEM ' location for W if in bank3
'---DO NOT change these-----------------------------------------------------
ssave VAR BYTE BANK0 SYSTEM ' location for STATUS register
psave VAR BYTE BANK0 SYSTEM ' location for PCLATH register

Darrel Taylor
- 26th December 2010, 22:33
The macro buffer overflow happens when you use PM for the assembler.

Use MPASM instead.

dejankengur
- 28th December 2010, 07:48
Thanks guys
But how to high with 2.5 volts all pins at PirtB in the same time.

dejankengur
- 29th December 2010, 11:24
Help:) help:)