Could you draw a picture of what you're try to achieve and approx speed of pulses?
George
Could you draw a picture of what you're try to achieve and approx speed of pulses?
George
Last edited by towlerg; - 29th November 2014 at 09:48. Reason: old , stupid and can't spell
Yes, I too think more description, and perhaps, some code would help. For one thing there are many ways to do the same thing and by knowing which path you've taken it might be less obtrusive to follow along rather than reinvent the wheel, so to speak. Also, are you designing - and might have room or to add external circuitry (say a logic gate or mux chip) - or must this be exclusively software?
It must be strictly code. The following code is just a small, simple example of pulsing four outputs.
What I want to do with the code is be able to change the assignment of the ports when an external input is received, therefore to be able to change the assignment as follows:Code:a var portb.0 b var portb.1 c var portb.2 d var portb.3 action: for x = 1 to 5 a = 1 b = 1 c = 0 d = 0 pause 200 a = 0 b = 0 c = 0 d = 0 pause 200 next x for x = 1 to 5 a = 0 b = 0 c = 1 d = 1 pause 200 a = 0 b = 0 c = 0 d = 0 pause 200 next x goto action
orCode:a var portb.3 b var portb.2 c var portb.1 d var portb.0
orCode:a var portb.0 b var portb.3 c var portb.2 d var portb.1
This is the only part I'm struggling with. I can do the rest of the code, but to change the assignment, I am having great difficulty.Code:a var portb.0 b var portb.2 c var portb.1 d var portb.3
As I said, I tried using if..then statements, select case, the above variables won't work once they've been set. I even tried using other variable to substitute for the port aliases. My setup didn't like it. To me it looks like it should work, but the pic might not see it that way.
Don't judge where the returns are and missing code. That was done just so you know that they didn't flow into each other. The way it works is that when action is run, it runs through its code continuously until a button is pressed. Once pressed, it jumps to an on..gosub command where it advances the pairing change option by one. When the pairs have been reassigned, it goes back to action and runs the code with the new pairing assignment.
Does any of this make any sense and am I at all on the right track or at least headed in the right direction or did I hit a dead end?Code:a var portb.0 b var portb.1 c var portb.2 d var portb.3 e var word f var word g var word h var word pair1: ' 1 and 2 vs. 3 and 4 e = a f = b g = c h = d return ' return to pairing change pair2: ' 1 and 4 vs. 2 and 3 e = a f = d g = b h = c return ' return to pairing change action: ' alternating flash for x = 1 to 5 e = 1 f = 1 g = 0 h = 0 pause 200 e = 0 f = 0 g = 0 h = 0 pause 200 next x for x = 1 to 5 e = 0 f = 0 g = 1 h = 1 pause 200 e = 0 f = 0 g = 0 h = 0 pause 200 next x
I'm not sure that helped. All I got from that was at different times the mapping between the bit variables A,B,C and D and the physical bits 0 thro 3 of PortB varies according to some rule.
Is that correct?
George
"No one is completely worthless. They can always serve as a bad example."
Anonymous
looks like a dead end to me . try this wayDoes any of this make any sense and am I at all on the right track or at least headed in the right direction or did I hit a dead end?
code is for a 12f1822 so uses porta and porta.3 is input only . but you get the idea
Code:'**************************************************************** '* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 29/11/2014 * '* Version : 1.0 * '* Notes : * '* : pic12f1822 * '**************************************************************** #CONFIG cfg1 = _FOSC_INTOSC cfg1&= _WDTE_ON cfg1&= _PWRTE_OFF cfg1&= _MCLRE_ON cfg1&= _CP_OFF cfg1&= _CPD_OFF cfg1&= _BOREN_ON cfg1&= _CLKOUTEN_OFF cfg1&= _IESO_ON cfg1&= _FCMEN_ON __CONFIG _CONFIG1, cfg1 cfg2 = _WRT_OFF cfg2&= _PLLEN_OFF cfg2&= _STVREN_ON cfg2&= _BORV_19 cfg2&= _LVP_OFF __CONFIG _CONFIG2, cfg2 #ENDCONFIG osccon=$6a '4 mhz anselA=0 trisa=000 a var byte b var byte c var byte d var byte pin_mode var byte x var byte a=0 b=1 c=2 d=4 pin_mode=0 action: for x = 1 to 5 lata.0[a] = 1 lata.0[b] = 1 lata.0[c]= 0 lata.0[d]= 0 pause 200 lata.0[a] = 0 lata.0[b] = 0 lata.0[c]= 0 lata.0[d]= 0 pause 200 next x for x = 1 to 5 lata.0[a] = 0 lata.0[b] = 0 lata.0[c]= 1 lata.0[d]= 1 pause 200 lata.0[a] = 0 lata.0[b] = 0 lata.0[c]= 0 lata.0[d]= 0 pause 200 next x gosub shuffle goto action shuffle : pin_mode=pin_mode+1 select case pin_mode case 1 a=4 ;a var portb.3 b=2 ;b var portb.2 c=1 ;c var portb.1 d=0 ;d var portb.0 case 2 a=0 ;a var portb.0 b=4 ;b var portb.3 c=2 ;c var portb.2 d=1 ;d var portb.1 case 3 a=0 ;a var portb.0 b=2 ;b var portb.2 c=1 ;c var portb.1 d=4 ;d var portb.3 case 4 a=0 ;a var portb.0 b=1 ;b var portb.1 c=2 ;c var portb.2 d=4 ;d var portb.3 pin_mode=0 end select return
another approach
Code:'* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 29/11/2014 * '* Version : 1.0 * '* Notes : * '* : pic12f1822 * '**************************************************************** #CONFIG cfg1 = _FOSC_INTOSC cfg1&= _WDTE_ON cfg1&= _PWRTE_OFF cfg1&= _MCLRE_ON cfg1&= _CP_OFF cfg1&= _CPD_OFF cfg1&= _BOREN_ON cfg1&= _CLKOUTEN_OFF cfg1&= _IESO_ON cfg1&= _FCMEN_ON __CONFIG _CONFIG1, cfg1 cfg2 = _WRT_OFF cfg2&= _PLLEN_OFF cfg2&= _STVREN_ON cfg2&= _BORV_19 cfg2&= _LVP_OFF __CONFIG _CONFIG2, cfg2 #ENDCONFIG osccon=$6a '4 mhz anselA=0 trisa=000 a var byte b var byte c var byte d var byte pin_mode var byte x var byte all_off var byte pins_on var byte a=1 ;portb.0 b=2 ;portb.1 c=4 ;portb.2 d=16 ;portb.4 pin_mode=0 all_off=!(a+b+c+d) lata = lata & all_off action: pins_on=a+b for x = 1 to 5 lata = lata | pins_on pause 200 lata = lata & all_off pause 200 next x pins_on=c+d for x = 1 to 5 lata = lata | pins_on pause 200 lata = lata & all_off pause 200 next x gosub shuffle goto action shuffle : pin_mode=pin_mode+1 select case pin_mode case 1 a=16 ;a var portb.3 b=4 ;b var portb.2 c=2 ;c var portb.1 d=1 ;d var portb.0 case 2 a=1 ;a var portb.0 b=16 ;b var portb.3 c=4 ;c var portb.2 d=2 ;d var portb.1 case 3 a=1 ;a var portb.0 b=2 ;b var portb.2 c=2 ;c var portb.1 d=16 ;d var portb.3 case 4 a=1 ;a var portb.0 b=2 ;b var portb.1 c=4 ;c var portb.2 d=16 ;d var portb.3 pin_mode=0 end select return
It is possible to use variables to name ports then change variable values to change ports. copied from my program --
http://www.harbornet.com/sunflower/PCB.pbp
' The PORTL and PORTH aliases are used for the PIN numbers (0-15)
' PORTL is 0-7 and PORTH is 8-15.
' Look in the .bas and .bal files for the chip you are using.
' If it's a 18F4620 then open c:\pbp\18F4620.bas
' PORTL VAR PORTB
' PORTH VAR PORTD
' TRISL VAR TRISB
' TRISH VAR TRISD
'
' PORTB AND PORTD can now be referenced by variables.
' http://www.picbasic.co.uk/forum/showthread.php?t=14493&
'
The default, I believe, is PORTB AND PORTC. The above changes in .bas and .bal changed that to ports B and D. The link explains in more detail
if azMotor then
azMotor_A = m1_ina '14 PORTD.6 ' Digital I/O PORT D.0 - D.7 NUMBERED 8 - 15
azMotor_B = m1_inb '13 PORTD.5
else
azMotor_A = m1_inb ' Software will reverse wires if motor or sensor installed backwards. 0 to 7 = PORTB.0 to PORTB.7
azMotor_B = m1_ina ' Configured in Install subroutine. Used in Set_Motors HBridge subroutine. 8 to 15 = PORTD.0 to PORTD.7
endif
low azmotor_a ' Brake azimuth motor
low azmotor_b
Bookmarks