Prutsertje
bloep....
Ik heb een probleempje. Ik heb een programmaatje geschreven in JAL. Het is een timer die aftelt en bij 00:00 moet stoppen. In principe doet het dat ook als ik handmatig pulsjes aan de ingangen van de pic voor up en down geef. Als ik nu de rotary encoder via een D-flipflop aansluit om deze taak van up of down pulsjes over te nemen gaat het mis, het programma stopt soms netjes bij 00:00 en soms (meestal) wordt doorgeteld 99:59 etc....
Nu worden de poorten A1 en A2 die ik gebruik voor het instellen van de tijd (up/down) tijdens de aftel routine niet gebruikt en ik heb zelfs al geprobeerd om ze in deze routine uit te schakelen.(dus output maken) maar het wil niet baten. Kan het zijn dat de D-Flipflop (SN74LS74) die ik gebruik dusdanig op de PIC stoort dat deze rare sprongen gaat maken ?? Hoe kan ik het beste de verbindingen tussen de PIC en de D-Flipflop ontstoren om te proberen of het hier aan ligt ??
Confusion
There are only 10 types of people in the world - those who understand binary, and those who don't
Lijkt me sterk dat het door de flipflop komt.
Heeft de flipflop geen last van de contact dender van de rotary encoder?
Heb je misschien een schema en (een gedeelte van ) de code?
Prutsertje
bloep....
Ik de code nu niet bij de hand, zal deze morgen even posten. Maar ik vindt het vreemd dat het probleem zich alleen voordoet als ik de flipflop aansluit.
Prutsertje
bloep....
ok, hier en stukje van de code
-- main
initialiseren
hd44780_clear
intflagT0 = false
tick = 16
port_a = all_input
initmr0
forever loop
pin_a1_direction = output
pin_a2_direction = output
if pin_a3 == true then
hd44780_clear
klep_open
end if
hd44780_position2 (6)
uvaan
tijd_op_display
while intflagT0 == false loop -- wait to TMR0 Int
if pin_a0 == true then -- scan set button
delay_50ms -- antidender routine
if pin_a0 == true then
mode_set -- goes to set mode
end if
end if
end loop
if binseconden == 00 then
binseconden = 100
if binminuten == 00 then
uit
end if
end if
binseconden = binseconden - 1
if binseconden == 99 then
binseconden = 59
binminuten = binminuten - 1
end if
intflagT0 = false
end loop
procedure uit is
hd44780_line2
hd44780 = "o"
hd44780 = "k"
forever loop
end loop
end procedure
Misschien dat dit er ook iets mee te maken heeft:
procedure initmr0 is
status_rp0 = true
status_rp1 = false
intcon = 0b_1010_0000
tmr0 = 0b_1000_0111 -- option_reg
status_rp0 = false
-- aprox. values
tmr0 = 12 -- 4Mhz ... 4 x 250ns x (256-12) x 256 .... x 16
delay_1us(12)
-- ******************
end procedure
procedure interrupt_handler is pragma interrupt
if tick == 0 then
intflagT0 = true
tick = 16
end if
tick = tick - 1
initmr0
end procedure
Ik hoop dat het in de code zit, is het tenminste "makkelijk" op te lossen. Wie helpt ??
Confusion
There are only 10 types of people in the world - those who understand binary, and those who don't
De code ziet er wel ok uit.
Misschien dat er nog iets raars staat in de procedure mode_set?
Wat gebeurt er als je de rotary encoder loskoppelt van de flipflop?
Prutsertje
bloep....
Op 6 juni 2003 11:24:17 schreef Confusion:
De code ziet er wel ok uit.
Misschien dat er nog iets raars staat in de procedure mode_set?Wat gebeurt er als je de rotary encoder loskoppelt van de flipflop?
Het loskoppelen van de rotary encoder zal ik dit weekend eens proberen.
de procedure mode_set:
procedure mode_set is
pin_a1_direction = input
pin_a2_direction = input
intcon_gie = false -- deactivate interrupts
positie = false
setmin
hd44780_position2 (5)
tijd_op_display
hd44780_instruction( 0b_0000_1111 ) -- display on, cursor on, blink on
hd44780_position2 (6)
while pin_a0 == true loop -- wait while button is pushed
end loop
espera = true
while espera == true loop -- button scan
if pin_a1 == true then
delay_1ms -- antidender routine
if pin_a1 == true then
set_hm
end if
while pin_a1 == true loop -- wait while button is pushed
checkokknop
end loop
end if
if pin_a2 == true then
delay_1ms -- antidender routine
if pin_a2 == true then
set_hmaf
end if
while pin_a2 == true loop -- wait while button is pushed
checkokknop
end loop
end if
checkokknop
end loop
hd44780_clear
delay_10ms
initmr0
intcon_gie = true -- activate interrupts
end procedure