Content-ID: <0_28158_877111347@emout01.mail.aol.com.5034> Content-type: text/plain In a message dated 17/10/97 11:59:04, MAILER-DAEMON@ns2.x-link.ml.org (Mail Delivery Subsystem) writes: << In a message dated 16/10/97 05:11:42, you write: << What is the best way to sense a push button press? I am multiplexing the PORTB data lines as a data bus and using PORTA as chip select as shown to me by Steve Smith. Will the below circuit work? >> In the circuit I sent The HC244 for the inputs is scanned once every 10mS and if button is down for three scans then it is valid Check out the debounce routiene by Scott Dattalo its on his website http://www.interstice.com/~sdattalo/technical/software/pic/debounce.html This will debounce a whole 8 bits and you can loose the flip flop just continue scanning the input register. Also if you are working at 4Mhz you can do lots between reading an input buffer to get keys every 10mS The section to read keys will take less than 10uS movlw b'11111111' ;Set port b to input. Tris port_b movlw b'00000111' ;Select an input buffer by seting b,4 address is b,0,1,2 movwf port_a movfw port_b ;Read port B movlw b'00010111' ;Deselect input buffer turn off hc138 The read needs only take 1uS to open the 244 and read the key status just do it every 10mS software should be able to handle it all If you want send mail and I will return a chunk of code for '84 that works in that circuit also attached are the LCD handlers for that module. Cheers Steve....... some software extracts fo the board CONOFF EQU B'00010000' ; CONTROL PORT OFF STATE ;---------------PORT ASSIGNMENTS A IS ALWAYS OUTPUT-------- ;---------------B IS BIDIRECTIONAL AND HAS ASSESS TO------- ;---------------UP TO 64 IO LINES VIA 138------------------ CON EQU PORTA ; PORT A IS CONTROL DTA EQU PORTB ; PORT B IS DATA ;---------------138 LOCATION ASSIGNMENTS------------------ OUT1 EQU B'00000000' ; OUTPUTS 0-7 OUT2 EQU B'00000001' ; OUTPUTS 8-15 OUT3 EQU B'00000010' ; OUTPUTS 15-23 OUT4 EQU B'00000011' ; OUTPUTS 16-29 AND BUZZER AND LCD CONT INP1 EQU B'00000100' ; INPUTS 0-7 INP2 EQU B'00000101' ; INPUTS 8-15 INP3 EQU B'00000110' ; INPUTS 16-23 INP4 EQU B'00000111' ; INPUTS 24-29 AND TEST SW AND CONT SW ;************* LCD FUNCTIONS ****************************** ;---------------LCD TEXT OUTPUTER----------- STRING MOVWF STRNUM ; SAVE STRING NUMBER MOVLW b'11111111' ; NEEDS TO BE FF BEFORE ENTERING STRING MOVWF TABOFF ; SAVE IN CHR COUNTER MOVLW LCDRS ; SET TO DATA CALL LCD_TXT ; DO IT DOSTR PAGE1 ; SET PAGE MARKER CALL CALLSTR ; GET STRING CHARTER POINTED TO IN TABOFF PAGE0 ; RESET PAGE MARKER MOVWF LCDCH ; SAVE CHAR ANDLW B'01111111' ; MASK END BIT (END OF STRING MARKER) CALL LCD_OUT BTFSS LCDCH,7 ; CHECK LAST GOTO DOSTR ; NOT FINISHED DO SOME MORE RETLW 0 ; CONTINUE PROGRAM ;--------------LCDRS----------------------------------------------- LCD_RS MOVLW BUZ ; LCD IN CONTROL MODE NO BUZ LCD_TXT MOVWF DTA ; INFO ON PORT MOVLW OUT4 ; SELECT ADDRESS ADDLW CONOFF ; ADD THE OFF LOCATION TO PORT LOCATION MOVWF CON ; SET CONTROL PORT BCF IOEN ; CLOCK DATA OUT BSF IOEN ; RETURN TO NON SELECTED RETLW 0 ; EXIT ;---------------LCD PAUSE------------------ LCD_OUT MOVWF DTA ; PUT LCD CONTROL DATA ON BUS BSF LCDEN ; Lcd enable HIGH BCF LCDEN ; Lcd enable LOW ; SEND IT MOVLW .19 ; DELAY FOR LCD TO CATCH UP CALL SHORT ; DO TIME RETLW 0 ; EXIT ;--------------LCD CLEAR DISPLAY----------------------------------- LCDCLR CALL LCD_RS ; CONTROL MODE MOVLW 01h ; CLEAR DISPLAY CALL LCD_OUT ; SHORT TIME DELAY MOVLW .5 ; TIME FOR LCD TO CATCH UP CALL LONG ; DO TIME RETLW 0 ; EXIT ;--------------LCD LINE 1 SELECT--------------------------------- L1 CALL LCD_RS ; CONTROL MODE MOVLW B'10000000' ; LINE 1 SET GOTO LCD_OUT ; SHORT TIME DELAY ;--------------LCD LINE 2 SELECT--------------------------------- L2 CALL LCD_RS ; CONTROL MODE MOVLW B'11000000' ; LINE 2 SET GOTO LCD_OUT ; SHORT TIME DELAY ;-------------LCD BACK 1 SPACE---------------------------------- BACK1 CALL LCD_RS ; CONTROL MODE MOVLW B'00010000' ; BACK ONE SPACE GOTO LCD_OUT ; SHORT TIME DELAY ;------------LCD LINE 2 POS 12---------------------------------- L1_8 CALL LCD_RS ; CONTROL MODE MOVLW B'10001000' ; LINE 1 POS 8 GOTO LCD_OUT ; SHORT TIME DELAY ;------------LCD LINE 2 POS 8------------------------------------ L2_8 CALL LCD_RS ; CONTROL MODE MOVLW B'11001000' ; LINE 2 POS 8 GOTO LCD_OUT ; SHORT TIME DELAY ;------------CUSOR BLINK----------------------------------------- BLINK CALL LCD_RS ; CONTROL MODE MOVLW B'00001110' ; CURSOR BLINK GOTO LCD_OUT ; SHORT TIME DELAY ;------------CURSOR NORMAL--------------------------------------- NO_BLINK CALL LCD_RS ; CONTROL MODE MOVLW B'00001100' ; CURSOR NORMAL GOTO LCD_OUT ; SHORT TIME DELAY ;-------------LCD INSERT SPACE W CONTAINS NUMBER OF------------- SPACE_0 MOVWF GP3 ; SAVE NUMBER OF SPACES SPACE_1 MOVLW .10 ; SPACE LOCATION CALL STRING ; GO DO IT DECFSZ GP3,F ; FINISHED GOTO SPACE_1 ; DO SOME MORE RETLW 0 ; EXIT ;************* END LCD FUNCTIONS ************************ >> --------------------- Forwarded message: From: MAILER-DAEMON@ns2.x-link.ml.org (Mail Delivery Subsystem) To: XYGAX@AOL.COM Date: 97-10-17 07:59:04 EDT The original message was received at Fri, 17 Oct 1997 08:56:43 +0200 (SAT) from wcpes.x-link.ml.org [163.195.20.11] ----- The following addresses had permanent fatal errors ----- ----- Transcript of session follows ----- 550 ... Host unknown (Name server: tbh.wcape.co.za: host not found) In a message dated 16/10/97 05:11:42, you write: << What is the best way to sense a push button press? I am multiplexing the PORTB data lines as a data bus and using PORTA as chip select as shown to me by Steve Smith. Will the below circuit work? >> In the circuit I sent The HC244 for the inputs is scanned once every 10mS and if button is down for three scans then it is valid Check out the debounce routiene by Scott Dattalo its on his website http://www.interstice.com/~sdattalo/technical/software/pic/debounce.html This will debounce a whole 8 bits and you can loose the flip flop just continue scanning the input register. Also if you are working at 4Mhz you can do lots between reading an input buffer to get keys every 10mS The section to read keys will take less than 10uS movlw b'11111111' ;Set port b to input. Tris port_b movlw b'00000111' ;Select an input buffer by seting b,4 address is b,0,1,2 movwf port_a movfw port_b ;Read port B movlw b'00010111' ;Deselect input buffer turn off hc138 The read needs only take 1uS to open the 244 and read the key status just do it every 10mS software should be able to handle it all If you want send mail and I will return a chunk of code for '84 that works in that circuit also attached are the LCD handlers for that module. Cheers Steve....... some software extracts fo the board CONOFF EQU B'00010000' ; CONTROL PORT OFF STATE ;---------------PORT ASSIGNMENTS A IS ALWAYS OUTPUT-------- ;---------------B IS BIDIRECTIONAL AND HAS ASSESS TO------- ;---------------UP TO 64 IO LINES VIA 138------------------ CON EQU PORTA ; PORT A IS CONTROL DTA EQU PORTB ; PORT B IS DATA ;---------------138 LOCATION ASSIGNMENTS------------------ OUT1 EQU B'00000000' ; OUTPUTS 0-7 OUT2 EQU B'00000001' ; OUTPUTS 8-15 OUT3 EQU B'00000010' ; OUTPUTS 15-23 OUT4 EQU B'00000011' ; OUTPUTS 16-29 AND BUZZER AND LCD CONT INP1 EQU B'00000100' ; INPUTS 0-7 INP2 EQU B'00000101' ; INPUTS 8-15 INP3 EQU B'00000110' ; INPUTS 16-23 INP4 EQU B'00000111' ; INPUTS 24-29 AND TEST SW AND CONT SW ;************* LCD FUNCTIONS ****************************** ;---------------LCD TEXT OUTPUTER----------- STRING MOVWF STRNUM ; SAVE STRING NUMBER MOVLW b'11111111' ; NEEDS TO BE FF BEFORE ENTERING STRING MOVWF TABOFF ; SAVE IN CHR COUNTER MOVLW LCDRS ; SET TO DATA CALL LCD_TXT ; DO IT DOSTR PAGE1 ; SET PAGE MARKER CALL CALLSTR ; GET STRING CHARTER POINTED TO IN TABOFF PAGE0 ; RESET PAGE MARKER MOVWF LCDCH ; SAVE CHAR ANDLW B'01111111' ; MASK END BIT (END OF STRING MARKER) CALL LCD_OUT BTFSS LCDCH,7 ; CHECK LAST GOTO DOSTR ; NOT FINISHED DO SOME MORE RETLW 0 ; CONTINUE PROGRAM ;--------------LCDRS----------------------------------------------- LCD_RS MOVLW BUZ ; LCD IN CONTROL MODE NO BUZ LCD_TXT MOVWF DTA ; INFO ON PORT MOVLW OUT4 ; SELECT ADDRESS ADDLW CONOFF ; ADD THE OFF LOCATION TO PORT LOCATION MOVWF CON ; SET CONTROL PORT BCF IOEN ; CLOCK DATA OUT BSF IOEN ; RETURN TO NON SELECTED RETLW 0 ; EXIT ;---------------LCD PAUSE------------------ LCD_OUT MOVWF DTA ; PUT LCD CONTROL DATA ON BUS BSF LCDEN ; Lcd enable HIGH BCF LCDEN ; Lcd enable LOW ; SEND IT MOVLW .19 ; DELAY FOR LCD TO CATCH UP CALL SHORT ; DO TIME RETLW 0 ; EXIT ;--------------LCD CLEAR DISPLAY----------------------------------- LCDCLR CALL LCD_RS ; CONTROL MODE MOVLW 01h ; CLEAR DISPLAY CALL LCD_OUT ; SHORT TIME DELAY MOVLW .5 ; TIME FOR LCD TO CATCH UP CALL LONG ; DO TIME RETLW 0 ; EXIT ;--------------LCD LINE 1 SELECT--------------------------------- L1 CALL LCD_RS ; CONTROL MODE MOVLW B'10000000' ; LINE 1 SET GOTO LCD_OUT ; SHORT TIME DELAY ;--------------LCD LINE 2 SELECT--------------------------------- L2 CALL LCD_RS ; CONTROL MODE MOVLW B'11000000' ; LINE 2 SET GOTO LCD_OUT ; SHORT TIME DELAY ;-------------LCD BACK 1 SPACE---------------------------------- BACK1 CALL LCD_RS ; CONTROL MODE MOVLW B'00010000' ; BACK ONE SPACE GOTO LCD_OUT ; SHORT TIME DELAY ;------------LCD LINE 2 POS 12---------------------------------- L1_8 CALL LCD_RS ; CONTROL MODE MOVLW B'10001000' ; LINE 1 POS 8 GOTO LCD_OUT ; SHORT TIME DELAY ;------------LCD LINE 2 POS 8------------------------------------ L2_8 CALL LCD_RS ; CONTROL MODE MOVLW B'11001000' ; LINE 2 POS 8 GOTO LCD_OUT ; SHORT TIME DELAY ;------------CUSOR BLINK----------------------------------------- BLINK CALL LCD_RS ; CONTROL MODE MOVLW B'00001110' ; CURSOR BLINK GOTO LCD_OUT ; SHORT TIME DELAY ;------------CURSOR NORMAL--------------------------------------- NO_BLINK CALL LCD_RS ; CONTROL MODE MOVLW B'00001100' ; CURSOR NORMAL GOTO LCD_OUT ; SHORT TIME DELAY ;-------------LCD INSERT SPACE W CONTAINS NUMBER OF------------- SPACE_0 MOVWF GP3 ; SAVE NUMBER OF SPACES SPACE_1 MOVLW .10 ; SPACE LOCATION CALL STRING ; GO DO IT DECFSZ GP3,F ; FINISHED GOTO SPACE_1 ; DO SOME MORE RETLW 0 ; EXIT ;************* END LCD FUNCTIONS ************************ Content-ID: <0_28158_877111347@emout01.mail.aol.com.5035> Content-type: text/plain; name="returned.dat" Reporting-MTA: dns; ns2.x-link.ml.org Received-From-MTA: DNS; wcpes.x-link.ml.org Arrival-Date: Fri, 17 Oct 1997 08:56:43 +0200 (SAT) Final-Recipient: RFC822; bserfontein@tbh.wcape.co.za Action: failed Status: 5.1.2 Remote-MTA: DNS; tbh.wcape.co.za Last-Attempt-Date: Fri, 17 Oct 1997 08:56:44 +0200 (SAT)