I am stumped!!!


Closed Thread
Results 1 to 20 of 20

Thread: I am stumped!!!

Hybrid View

  1. #1


    Did you find this post helpful? Yes | No

    Default

    keypad ohms out good, brand new actually, but as I mentioned before PortB.1-3 are my rows and 4-7 are my columns with the above code, pressing a button on the keypad does not pull any pin low.

  2. #2


    Did you find this post helpful? Yes | No

    Default

    I changed TRISB = %11111110 to TRISB = %11110000 now pressing keypad the selected PORTB 4-7 pulls low to 2.2VDC, by the way PORTB.0 is connect first in series with a 330 ohm resistor, then to the four 1N4148's. I thought limiting the current to 15mA would be easier on the internal pull-ups.

  3. #3


    Did you find this post helpful? Yes | No

    Default

    Thanks for the drawing, that is how this is connected, yes I am aware of "scanning the keypads" Bruce has been a great help, but I am just narrowing it down to pressing on button, pins 1-3 low, and pin 0 high just to see how interrupt's work. I am looking to use the interrupt to sleep all the time, detect when key is pressed, wake up, set PORTB.0, and 4-7 as inputs, bits 1-3 as out, pause about 50, then began scanning keypad something like this:

    recycle:
    @ Sleep
    @ NOP
    @ NOP
    goto recycle

    ' my Interrupt handler
    search:
    PORTB = 0
    TRISB = $f1
    PAUSEUS 10
    keypadscan:
    FOR row = 1 TO 3
    PORTB = 0
    TRISB = (DCD row) ^ $fe
    col = PORTB >> 4
    IF col != $f THEN keypressed
    NEXT row
    GOTO recycle

    Haven't got all this worked out yet, but thats another day

  4. #4


    Did you find this post helpful? Yes | No

    Default

    I'm just stumped with the original code above why am I already in the interrupt when I power up, just to confirm that I changed the INT handler to:
    '---[INT - interrupt handler]---------------------------------------------------
    ToggleLED1:
    TOGGLE LED
    pause 50
    @ INT_RETURN

    and sure enough the led is flashing...

    By the way, what program are you using to upload your schematic?

  5. #5


    Did you find this post helpful? Yes | No

    Default

    Hmmm, came back here today to focus on the post here from Bruce but it seems to have vanished, or am I losing my mind? Maybe its both

    Anyhow, it was mentioned that so to speak that I should take a snapshot of PortB, I am so lost. If on power up PortB.0 is high and pullups are enabled, on the rest of the pins: TRISB = %11111110 PortB = %00000001 then with my meter focusing on pins 4-7 shows 5VDC or logic HIGH, should I do this:

    WHILE (portb >> 4) != 15
    pause 20
    wend
    INTCON.0 = 0
    return

    or substitute 15 for a 0?

    Seems it would be 15 but with that I apparently staying in my interrupt routine.

    I've been experimenting with ON INTERRUPT and Darryl Taylor's Instant Interrupts:

    DEFINE OSC 4
    CMCON=%00000111
    VRCON = 0
    PAUSEus 10
    TRISA = %00000110
    TRISB = %11111110
    PORTA = %00000000
    PORTB = %00000001
    OPTION_REG.7 = 0
    OPTION_REG.6 = 0
    INTCON = %00001000

    led var portA.3
    INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
    INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts
    ASM
    INT_LIST macro ; IntSource, Label, Type, ResetFlag?
    INT_Handler RBC_INT, _check, PBP, yes
    endm
    INT_CREATE

    ENDASM
    @ INT_ENABLE RBC_INT
    PAUSE 50

    cycle:
    gosub readportb
    HIGH led
    pause 100
    LOW led
    pause 100
    @ Sleep
    @ Nop
    @ Nop
    goto cycle

    readportb:
    WHILE (portb >> 4) != 15
    PAUSE 20
    WEND
    INTCON.0 = 0
    return


    check:
    PAUSE 250
    WHILE (portb >> 4) != 15
    PAUSE 20
    WEND
    @ INT_RETURN


    Any Suggestion, preferably in Crayola so its clear?

    Thanks

  6. #6
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    Try this;
    Code:
    DEFINE OSC 4
    CMCON=%00000111
    VRCON = 0 
    PAUSEus 10 
    TRISA = %00000110
    TRISB = %11110000   ' using upper 4-bits for interrupt
    PORTA = %00000000 
    PORTB = %00000001
    OPTION_REG.7 = 0 
    OPTION_REG.6 = 0
     
    led var portA.3
     
    INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
    INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts
     
    ASM
    INT_LIST macro ; IntSource, Label, Type, ResetFlag?
        INT_Handler RBC_INT, _check, PBP, yes
        endm
        INT_CREATE 
    ENDASM
     
    @ INT_ENABLE RBC_INT 
     
    cycle:
        HIGH led
        pause 100
        LOW led
        pause 100
        @ Sleep
        goto cycle
     
    check: 
        WHILE (portb >> 4) != 15
          PAUSE 10
        WEND 
        @ INT_RETURN
    The purpose of WHILE (portb >> 4) != 15 is to wait until a button that generated the interrupt is released. It also reads the port, which is required before DT_INTs can clear the interrupt flag.

    To clear the interrupt-on-change flag bit you first have to read the port, then clear the flag. If you read the port while a button is still pressed, then clear the flag, another interrupt will be generated once the button is released.
    Attached Images Attached Images  
    Last edited by Bruce; - 28th July 2010 at 20:58. Reason: Forgot Crayola...;o)
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  7. #7


    Did you find this post helpful? Yes | No

    Default

    Thanks a million Bruce, I will try that now.

    P.S. I about fell on the floor laughing when I refreshed the page and say the crayon

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts