During a simulation with a 'tight' loop PE6 becomes un-responsive, with no way of canceling the simulation meaning that I have to use Task Manager to shut down PE6 (and lose any changes made but not yet saved).
I normally have the simulation speed set to 30 as this gives the fastest display but once simulation is started if there are no pauses within the program this can't be altered either.
If the above program is run with 'Define Simulation' declared, everything works as expected. If 'Define Simulation' is commented out, PE6 becomes totally un-responsive. Of course, it could just be my old Windows XP machine but I thought I'd mention it...
I normally have the simulation speed set to 30 as this gives the fastest display but once simulation is started if there are no pauses within the program this can't be altered either.
Code:
[color=Green]'14M2 Dual 4017 Driver
'V1 30th October.
'V1b 20th November
'V1c 20th November, improved detection. Detection output placed in loop
'so as to better indicate operation with minimal delay
'V1d 20th November, took out delays.
'V1e Removed sub-routines in main loop to speed up program
'operation.[/color]
[color=Navy]#No_Data
#Picaxe [/color][color=Black]14M2[/color]
[color=Navy]#Define [/color][color=Black]Simulate[/color]
[color=Navy]#Define [/color][color=Black]Microseconds[/color]
[color=Navy]#Define [/color][color=Black]InvertOutput[/color]
[color=Blue]Symbol SigH [/color][color=DarkCyan]=[/color][color=Blue]b.1 [/color][color=Green]'High signal[/color]
[color=Blue]Symbol SigL [/color][color=DarkCyan]=[/color][color=Blue]b.2 [/color][color=Green]'Low Signal
'These are inverted by a BC547 buffer so the logic
'for SigH needs to go Low, and for SigL needs to go High
'To do this, InvertOutput MUST be defined
'Ena Pin 13 of the 4017 must be held low[/color]
[color=Blue]symbol Clk [/color][color=DarkCyan]=[/color][color=Blue]b.5 [/color][color=Green]'Clock Pin 14 of the 4017 [/color]
[color=Blue]symbol Rset [/color][color=DarkCyan]=[/color][color=Blue]b.4 [/color][color=Green]'Reset Pin 15 of the 4017[/color]
[color=Blue]Symbol [/color][color=Purple]Det1 [/color][color=DarkCyan]=[/color][color=Purple]Pinc.1 [/color][color=Green]'Detect bank 1[/color]
[color=Blue]Symbol [/color][color=Purple]Det2 [/color][color=DarkCyan]=[/color][color=Purple]Pinc.2 [/color][color=Green]'Detect bank 2
'Other detect lines could be connected to Pinc.3, Pinc.4 or Pinc.0
'This would give the maximum detect sensors as:
'9 Pinc.1 only
'18 1 & 2
'27 1, 2 & 3
'36 1, 2, 3, & 4
'45 0, 1, 2, 3, 4[/color]
[color=Blue]Symbol Scan [/color][color=DarkCyan]=[/color][color=Navy]9 [/color][color=Green]'Groups of 9 LEDs or sensors connected to 4017[/color]
[color=Blue]Symbol [/color][color=Purple]Current[/color][color=DarkCyan]=[/color][color=Purple]b0 [/color][color=Green]'Current Position[/color]
[color=Blue]Symbol [/color][color=Purple]OutputTime[/color][color=DarkCyan]=[/color][color=Purple]w1 [/color][color=Green]'Count of output loop[/color]
[color=Navy]#Ifdef [/color][color=Black]Microseconds [/color][color=Blue]Then
Symbol Time_Length [/color][color=DarkCyan]= [/color][color=Navy]500
[/color][color=Blue]SetFreq M32[/color]
[color=Navy]#Else
[/color][color=Blue]Symbol Time_Length [/color][color=DarkCyan]= [/color][color=Navy]50
#EndIf[/color]
[color=Blue]Let [/color][color=Purple]Current[/color][color=DarkCyan]=[/color][color=Navy]0[/color]
[color=Blue]High Rset
Low Clk[/color]
[color=Navy]#IfDef [/color][color=Black]InvertOutput [/color][color=Blue]Then
High SigH [/color][color=Green]'Set High Out High (Inverted)
[/color][color=Blue]Low SigL [/color][color=Green]'Set Low Out Low (Inverted)[/color]
[color=Navy]#Else
[/color][color=Blue]Low SigH [/color][color=Green]'Set High Out Low
[/color][color=Blue]High SigL [/color][color=Green]'Set Low Out High [/color]
[color=Navy]#EndIf[/color]
[color=Black]Start:
[/color][color=Blue]Do
For [/color][color=Purple]Current[/color][color=DarkCyan]=[/color][color=Navy]1 [/color][color=Blue]to Scan
High Clk [/color][color=Green]'Clock the 4017
[/color][color=Blue]Low Clk [/color][color=Green]'Finish the clock pulse
[/color][color=Navy]#IfDef [/color][color=Black]Simulate [/color][color=Blue]Then
Pause [/color][color=Navy]1000
#EndIf
[/color][color=Blue]If [/color][color=Purple]Det1[/color][color=DarkCyan]=[/color][color=Navy]0 [/color][color=Blue]Then
Let [/color][color=Purple]OutputTime[/color][color=DarkCyan]=[/color][color=Blue]Time_Length
[/color][color=Green]'Set Detect Signal
[/color][color=Navy]#IfDef [/color][color=Black]InvertOutput [/color][color=Blue]Then
[/color][color=Green]'Invert Output logic
[/color][color=Blue]Low SigH
High SigL
[/color][color=Navy]#Else
[/color][color=Green]'Output logic normal
[/color][color=Blue]High SigH
Low SigL
[/color][color=Navy]#EndIf
[/color][color=Blue]EndIf
If [/color][color=Purple]Det2[/color][color=DarkCyan]=[/color][color=Navy]0 [/color][color=Blue]Then
Let [/color][color=Purple]OutputTime[/color][color=DarkCyan]=[/color][color=Blue]Time_Length
[/color][color=Green]'Set Detect Signal
[/color][color=Navy]#IfDef [/color][color=Black]InvertOutput [/color][color=Blue]Then
[/color][color=Green]'Invert Output logic
[/color][color=Blue]Low SigH
High SigL
[/color][color=Navy]#Else
[/color][color=Green]'Output logic normal
[/color][color=Blue]High SigH
Low SigL
[/color][color=Navy]#EndIf
[/color][color=Blue]EndIf
If [/color][color=Purple]OutputTime [/color][color=DarkCyan]> [/color][color=Navy]0 [/color][color=Blue]Then
Dec [/color][color=Purple]OutputTime
[/color][color=Blue]EndIf
If [/color][color=Purple]OutputTime[/color][color=DarkCyan]=[/color][color=Navy]1 [/color][color=Blue]Then
[/color][color=Green]'Clear Detect signal
[/color][color=Navy]#IfDef [/color][color=Black]InvertOutput [/color][color=Blue]Then
[/color][color=Green]'Invert Output logic
[/color][color=Blue]High SigH
Low SigL
[/color][color=Navy]#Else
[/color][color=Green]'Output logic normal
[/color][color=Blue]Low SigH
High SigL
[/color][color=Navy]#EndIf
[/color][color=Blue]EndIf
Next [/color][color=Purple]Current
[/color][color=Blue]High Rset [/color][color=Green]'Reset the 4017
[/color][color=Blue]Low Rset [/color][color=Green]'Remove the reset
[/color][color=Blue]Loop[/color]