you don't have to make sure it's on the rising edge. Interrupt will do it for you. When you set your interrupt you can select rising or falling edge.
you don't have to make sure it's on the rising edge. Interrupt will do it for you. When you set your interrupt you can select rising or falling edge.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
And I set that in the registers, right? And then I can run a wire from PIN 17 to an interrupt pin and do an ON INTERRUPT command? Would it look something like this or totally different? I am going to try and find some examples.
horizloop:
ON INTERRUPT
PORTB.2 = 0
PORTB.3 = 1
PAUSEUS 139
PORTB.3 = 0
PORTB.2 = 1
PAUSEUS 50
ADCIN 0, adval ' A/D 8 bit value from PORTA.0 into adval
SEROUT2 PORTC.6,16416,[BIN8 adval,13,10] ' Output 8 bit word serially to PC from C.6
PAUSE 87
horizpulse = horizpulse + 1
IF horizpulse < 784
NOP...
i'll have more spare time tomorrow for that... BUT have a look on this thread download the code i did. It use the interrupt on an pin to do specific task. Can be handy to start. Code is well documented.
ON INTERRUPT GOTO define the place to go when an intterupt happen. See PBP manual on that statement. care will have to be made in the interrupt routine too. sould not be too loang... at minimum less than the time between each interrupts.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Well I would think I would only need one in the loop, just to make sure the Reset(HWPM) and Horizontal 2 are on their rising edge as in synch as possible.
What if I did something like this??
horizloop:
PORTB.2 = 0
PORTB.3 = 1
PAUSEUS 139
ENABLE
ON INTERRUPT GOTO H2lock
DISABLE
PAUSEUS 15
ADCIN 0, adval ' A/D 8 bit value from PORTA.0 into adval
SEROUT2 PORTC.6,16416,[BIN8 adval,13,10] ' Output 8 bit word serially to PC from C.6
PAUSEUS 87
horizpulse = horizpulse + 1
IF horizpulse < 784 THEN
GOTO horizloop
ELSE
PAUSEUS 270
GOTO vertloop
ENDIF
H2lock:
PORTB.3 = 0
PORTB.2 = 1
RESUME
NOP, On Interruot goto is placed at the header of your code before your main loop. Since it's working in background, it will jump by himself to the interrupt routine. did you look at my previous link?
INTCON and probably others have to be set for interrupt type/source.
i'll make something like this later today.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
What do you think of something like this>?
' Connect analog input to (RA0)
' Connect clocks to PORTB
' PORTB.0 is the Vphase1 clock
' PORTB.1 is the Vphase2 clock
' PORTB.2 is the Hphase1 clock
' PORTB.3 is the Hphase2 clock
' PORTB.4 is the reset clock
' Connect pin 2 from the DB9 connector to PORTC.6
' Have a +5V source ready to touch PORTA.2 to trigger clocking process
include "modedefs.bas"
' Define ADCIN parameters
Define ADC_BITS 8 ' Set number of bits in result
DEFINE OSC 20 ' Sets clock speed to 20Mhz
Define ADC_CLOCK 4 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 50 ' Set sampling time in uS
ON INTERRUPT GOTO H2lock ' When Reset clock is high
INTCON1 = %1001000 ' Enable RB0 Interrupt
INTCON = $80 ' Disables Interrupts
TRISA = %11111111 ' Set PORTA to all input
ADCON1 = %00001101 ' Set PORTA analog, except for pin 2
TRISB = %00000000 ' Set PORTB to all output
Pause 500 ' Wait .5 second
Pause 500 ' Wait .5 second
horizpulse var byte
vertpulse var byte
adval var byte ' Create adval to store result
horizpulse = 1 ' Initialize counters, initial states
vertpulse = 1
PORTB.0 = 0
PORTB.1 = 0
PORTB.2 = 1
PORTB.3 = 0
PORTB.4 = 0
buttonloop:
IF PORTA.2 = 1 then
GOTO vertloop
else
GOTO buttonloop ' Waits for 5V that signals shutter is closed
ENDIF
vertloop:
horizpulse = 1
PORTB.0 = 1
PAUSEUS 139
PORTB.0 = 0
PORTB.1 = 1
PAUSEUS 139
PORTB.0 = 1
PORTB.1 = 0
PAUSEUS 139
PORTB.0 = 0
PAUSEUS 270
vertpulse = vertpulse + 1
IF vertpulse < 512 THEN
GOTO horizloop
ELSE
GOTO buttonloop
ENDIF
horizloop:
PORTB.2 = 0
PORTB.3 = 1
PAUSEUS 139
INTCON = $80 ' Re-enables interrupts
PAUSEUS 15
ADCIN 0, adval ' A/D 8 bit value from PORTA.0 into adval
SEROUT2 PORTC.6,16416,[BIN8 adval,13,10] ' Output 8 bit word serially to PC from C.6
PAUSEUS 87
horizpulse = horizpulse + 1
IF horizpulse < 784 THEN
GOTO horizloop
ELSE
PAUSEUS 270
GOTO vertloop
ENDIF
DISABLE
H2lock:
PORTB.3 = 0
PORTB.2 = 1
RESUME
ENABLE
END
Bookmarks