View Full Version : Lcd
Chordline
02-28-05, 07:19 AM
I am trying to modify the LCD code to display my compass and sonar values on the LCD. I am using the standard LCD program, but i cannot seem to figure it out. Anyone help ??
( lcd driver for MinPod )
SCRUB
COLD
( ****************************************************************
( I/O PORTS
(
( I/O Ports Assign Function
( ~~~ ~~~~~ ~~~~~~~~~~~~~~~
( I/O PA0 LCD, DB0
( I/O PA1 LCD, DB1
( I/O PA2 LCD, DB2
( I/O PA3 LCD, DB3
( I/O PA4 LCD, DB4
( I/O PA5 LCD, DB5
( I/O PA6 LCD, DB6
( I/O PA7 LCD, DB7
( O PE6 LCD, RS (register select. LOW: command, HIGH: data)
( O PE5 LCD, R/W (READ: signal high, WRITE: signal low)
( O PE4 LCD, E (chip enable, active high)
( ****************************************************************
HEX
( ==== Tools ==== )
: LCD8@ ( -- d )
00 FB2 ! ( data in )
PE5 ON ( RD high
PE4 ON ( E high enable chip
FB1 @ ( read data bus )
PE4 OFF ( E low disable chip
; EEWORD
: LCD8! ( d -- )
FF FB2 ! ( data out )
PE5 OFF ( WR low
FB1 ! ( output data )
PE4 ON ( E high enable chip
PE4 OFF ( E low disable chip
; EEWORD
: CMD> ( -- d ) PE6 OFF LCD8@ ; EEWORD
: LCD> ( -- d ) PE6 ON LCD8@ ; EEWORD
: WNB ( -- ) BEGIN CMD> 80 AND 0= ?TERMINAL OR UNTIL ; EEWORD
: >CMD ( d -- ) PE6 OFF LCD8! WNB ; EEWORD
: >LCD ( d -- ) PE6 ON LCD8! WNB ; EEWORD
: LCD-INIT ( -- )
EF FF1 ! ( outputs high for R/W.E5 RS.E6, low for E.E4 )
7F FF2 ! ( DDR outputs for E.A6 R/W.A5 RS.A4 )
0F FF3 ! ( release all PE4-7 lines from PER )
FF FB1 ! ( outputs all port A high
FF FB2 ! ( DDR outputs
0 FB3 ! ( release all port A lines from PER )
38 >CMD ( reset sequence for
38 >CMD ( EIGHT bit interface
6 >CMD ( entry mode set: increment; no shift
( F >CMD ( display on; cursor on; blink on
C >CMD ( display on; cursor off; blink off
1 >CMD ( display clear
80 >CMD ( cursor in top left position
; EEWORD
: CLEAR WNB 1 >CMD ; EEWORD
: AT8C WNB 8C >CMD ; EEWORD
: HOME WNB 2 >CMD ; EEWORD
: CRLF WNB C0 >CMD ; EEWORD
: MOVE-CURSOR WNB 80 OR >CMD ; EEWORD
: RIGHT-UPPER-CORNER 27 MOVE-CURSOR ; EEWORD
: CURSOR? WNB CMD> 7F AND ; EEWORD
: LCD>L WNB 10 >CMD CURSOR? 27 > IF RIGHT-UPPER-CORNER THEN ; EEWORD
: LCD>R WNB 14 >CMD CURSOR? 27 > IF HOME THEN ; EEWORD
: LCD-EMIT WNB >LCD ; EEWORD
: LCD-SPACE BL LCD-EMIT ; EEWORD
: LCD-SPACES 0 MAX BEGIN ?DUP WHILE 1- LCD-SPACE REPEAT ; EEWORD
: LCD-TYPE
BEGIN
DUP 0= NOT
WHILE
1- SWAP DUP @ LCD-EMIT 1+ SWAP
REPEAT
2DROP
; EEWORD
: LCD-PTYPE
BEGIN
DUP 0= NOT
WHILE
1- SWAP DUP P@ LCD-EMIT 1+ SWAP
REPEAT
2DROP
; EEWORD
: D.RLCD ( d \ n -- )
>R SWAP OVER DABS <# #S SIGN #> R> OVER - LCD-SPACES LCD-TYPE
; EEWORD
: .LCD ( n -- ) DUP ABS 0 <# #S SIGN #> LCD-TYPE ; EEWORD
: $>P
<BUILDS
CR KEY DROP
PHERE 1 PALLOT
0
BEGIN
KEY DUP D = NOT ( NOT A CR, D = CR IN HEX, 13 = CR IN DEC
WHILE
P, 1+
REPEAT
DROP
0 P,
SWAP P!
DOES>
; EEWORD
$>P S1$
IsoMax Time:
EEWORD
VARIABLE SECOND EEWORD
DECIMAL
( display tick on lcd )
: LCD-TICK
50000 PERIOD ( With DECIMAL 50000 PERIOD,
( the variable TCFTICKS will be incremented
( 100 times per second.
0 SECOND !
ISOMAX-START
SECOND @ .LCD
TCFTICKS @
BEGIN
TCFTICKS @ OVER - 100 >
IF
SECOND 1+! ( tick++
AT8C ( move cursor at
SECOND @ .LCD ( display tick on lcd
DROP TCFTICKS @
THEN
?TERMINAL UNTIL DROP ( stop if any key is hit
; EEWORD
: TEST1
LCD-INIT
S1$ PCOUNT LCD-PTYPE
CR ." Now displaying tick on LCD "
CR ." To stop, hit any key... "
LCD-TICK
; EEWORD
TEST1
My Compass value is DIRW? and my sonar value is E0 Range. I have tried to modify the code myself and have succeed only in killing it so it doesnt load.. Dohhh. I am at loss for ideas. I would like the top line to read " Sonar = (E0 Range)"
and just below that " Compass = (DIRW?)"
Its a 2X40 LCD and im not figuring out how to make it update but keep each value on different lines.....
Thanks...
ED
nmitech
02-28-05, 11:17 PM
SCRUB
COLD
( lcd driver for MinPod )
( **************************************************
( I/O PORTS
(
( I/O Ports Assign Function
( ~~~ ~~~~~ ~~~~~~~~~~~~~~~
( I/O PA0 LCD, DB0
( I/O PA1 LCD, DB1
( I/O PA2 LCD, DB2
( I/O PA3 LCD, DB3
( I/O PA4 LCD, DB4
( I/O PA5 LCD, DB5
( I/O PA6 LCD, DB6
( I/O PA7 LCD, DB7
( O PE6 LCD, RS (register select. LOW: command, HIGH: data)
( O PE5 LCD, R/W (READ: signal high, WRITE: signal low)
( O PE4 LCD, E (chip enable, active high)
( **************************************************
HEX
( ==== Tools ==== )
: LCD8@ ( -- d )
00 FB2 ! ( data in )
PE5 ON ( RD high
PE4 ON ( E high enable chip
FB1 @ ( read data bus )
PE4 OFF ( E low disable chip
; EEWORD
: LCD8! ( d -- )
FF FB2 ! ( data out )
PE5 OFF ( WR low
FB1 ! ( output data )
PE4 ON ( E high enable chip
PE4 OFF ( E low disable chip
; EEWORD
: CMD> ( -- d ) PE6 OFF LCD8@ ; EEWORD
: LCD> ( -- d ) PE6 ON LCD8@ ; EEWORD
: WNB ( -- ) BEGIN CMD> 80 AND 0= ?TERMINAL OR UNTIL ; EEWORD
: >CMD ( d -- ) PE6 OFF LCD8! WNB ; EEWORD
: >LCD ( d -- ) PE6 ON LCD8! WNB ; EEWORD
: LCD-INIT ( -- )
EF FF1 ! ( outputs high for R/W.E5 RS.E6, low for E.E4 )
7F FF2 ! ( DDR outputs for E.A6 R/W.A5 RS.A4 )
0F FF3 ! ( release all PE4-7 lines from PER )
FF FB1 ! ( outputs all port A high
FF FB2 ! ( DDR outputs
0 FB3 ! ( release all port A lines from PER )
38 >CMD ( reset sequence for
38 >CMD ( EIGHT bit interface
6 >CMD ( entry mode set: increment; no shift
( F >CMD ( display on; cursor on; blink on
C >CMD ( display on; cursor off; blink off
1 >CMD ( display clear
80 >CMD ( cursor in top left position
; EEWORD
: CLEAR WNB 1 >CMD ; EEWORD
: DSPAT WNB >CMD ; EEWORD
: HOME WNB 2 >CMD ; EEWORD
: CRLF WNB C0 >CMD ; EEWORD
: MOVE-CURSOR WNB 80 OR >CMD ; EEWORD
: RIGHT-UPPER-CORNER 27 MOVE-CURSOR ; EEWORD
: CURSOR? WNB CMD> 7F AND ; EEWORD
: LCD>L WNB 10 >CMD CURSOR? 27 > IF RIGHT-UPPER-CORNER THEN ; EEWORD
: LCD>R WNB 14 >CMD CURSOR? 27 > IF HOME THEN ; EEWORD
: LCD-EMIT WNB >LCD ; EEWORD
: LCD-SPACE BL LCD-EMIT ; EEWORD
: LCD-SPACES 0 MAX BEGIN ?DUP WHILE 1- LCD-SPACE REPEAT ; EEWORD
: LCD-TYPE
BEGIN
DUP 0= NOT
WHILE
1- SWAP DUP @ LCD-EMIT 1+ SWAP
REPEAT
2DROP
; EEWORD
: LCD-PTYPE
BEGIN
DUP 0= NOT
WHILE
1- SWAP DUP P@ LCD-EMIT 1+ SWAP
REPEAT
2DROP
; EEWORD
: D.RLCD ( d \ n -- )
>R SWAP OVER DABS <# #S SIGN #> R> OVER - LCD-SPACES LCD-TYPE
; EEWORD
: .LCD ( n -- ) DUP ABS 0 <# #S SIGN #> LCD-TYPE ; EEWORD
: $>P
<BUILDS
CR KEY DROP
PHERE 1 PALLOT
0
BEGIN
KEY DUP D = NOT ( NOT A CR, D = CR IN HEX, 13 = CR IN DEC
WHILE
P, 1+
REPEAT
DROP
0 P,
SWAP P!
DOES>
; EEWORD
$>P S1$
SONAR =
EEWORD
$>P S2$
Inches
EEWORD
$>P S3$
Compass =
EEWORD
$>P S4$
Degrees
EEWORD
( ----- I2C routines for Sonar & Compass -----
VARIABLE INCHES EEWORD
VARIABLE DEGREES EEWORD
VARIABLE BITLINE EEWORD
( VARIABLE SONARSTARTADDRESS EEWORD
( VARIABLE SBUFFOFFSET EEWORD
( VARIABLE SONARFIRESTATE EEWORD
: SCL? TA0 ON? ; EEWORD ( test if SCL is allowed high, not down by another
: SCL+ SCL? DROP ; EEWORD ( actual usage for I2C to see if line released
: SCL- TA0 OFF ; EEWORD ( I/O turned off
: SDA? TA1 ON? ; EEWORD
: SDA+ SDA? DROP ; EEWORD
: SDA- TA1 OFF ; EEWORD
: I2CSTART ( sequence to begin i2c comms
SDA+ ( bring SDA low while SCL is high then SCL low to begin clocking
SCL+
SDA-
SCL-
SDA+ ( LET GO DATA
; EEWORD
: I2CSTOP ( sequence to end i2c comms
SDA- ( bring SCL high while SDA is low, then DA high too
SCL+
SDA+
; EEWORD
: CLK.
SCL+
SCL-
; EEWORD
: CLK.?
SCL+ ( clock in the ack' bit
SDA?
SCL-
; EEWORD
: ACK.?
SDA+ ( MAKE LINE HIGH SO SLAVE CAN ACK WITH LOW
CLK.?
SDA+
; EEWORD
: ACK.!
SDA-
CLK.
SDA+
; EEWORD
HEX
: BITLINE> ( BIT SHIFT OUT
BITLINE @ 2* DUP BITLINE !
100 AND
IF
SDA+
ELSE
SDA-
THEN
CLK.
SDA+ ( LET GO
; EEWORD
: >BITLINE ( BIT SHIFT IN
CLK.?
IF
1
ELSE
0
THEN
BITLINE @ 2*
+ BITLINE !
; EEWORD
: I2COUTBYTE
BITLINE !
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
ACK.?
; EEWORD
: I2CINBYTE
0 BITLINE !
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
BITLINE @
; EEWORD
HEX
( to fire sonar :- address SONAR-FIRE
: FIRE ( addr --- )
I2CSTART
I2COUTBYTE DROP
00 I2COUTBYTE DROP
50 I2COUTBYTE DROP
I2CSTOP
; EEWORD
( read range data from sonar
: RANGE ( addr --- )
I2CSTART
DUP I2COUTBYTE DROP
02 I2COUTBYTE DROP
I2CSTART
1 + I2COUTBYTE DROP
I2CINBYTE ACK.! ><
I2CINBYTE I2CSTOP OR INCHES !
; EEWORD
: DIR? ( 0-FF value from register 1
I2CSTART
C0 I2COUTBYTE DROP
1 I2COUTBYTE DROP
I2CSTART
C1 I2COUTBYTE DROP
I2CINBYTE I2CSTOP .
; EEWORD
: DIRW? ( 0-EOF value from registers 2, 3
I2CSTART
C0 I2COUTBYTE DROP
2 I2COUTBYTE DROP
I2CSTART
C1 I2COUTBYTE DROP
I2CINBYTE ACK.! ><
I2CINBYTE I2CSTOP OR DEGREES !
; EEWORD
( ----- display string & data on lcd -----
: TEST-LCD
LCD-INIT
S1$ PCOUNT LCD-PTYPE
90 DSPAT S2$ PCOUNT LCD-PTYPE
CRLF
S3$ PCOUNT LCD-PTYPE
D0 DSPAT S4$ PCOUNT LCD-PTYPE
CR ." Any key hit will stop the program..."
BEGIN
E0 FIRE
E0 RANGE
( display range on top line
8A DSPAT 5 LCD-SPACES
8A DSPAT INCHES @ DECIMAL .LCD
DIRW?
( display compass on bottom line
CA DSPAT 5 LCD-SPACES
CA DSPAT DEGREES @ DECIMAL .LCD
?TERMINAL UNTIL
; EEWORD
TEST-LCD
Chordline
03-01-05, 07:46 AM
I tried loading the code, it couldnt get it togo past this section without hanging up.
2DROP
; EEWORD OK
OK
: D.RLCD ( d \ n -- )
>R SWAP OVER DABS <# #S SIGN #> R> OVER - LCD-SPACES LCD-TYPE
; EEWORD OK
OK
: .LCD ( n -- ) DUP ABS 0 <# #S SIGN #> LCD-TYPE ; EEWORD OK
OK
: $>P
; EEWORD OK
OK
$>P S1$
S1$ ?
SONAR =
SONAR ?
EEWORD OK
OK
$>P S2$
S2$ ?
Inches
Inches ?
EEWORD OK
OK
$>P S3$
$>P ?
Compass =
Compass ?
EEWORD OK
OK
$>P S4$
It hung up at the last entry. I tried putting ; in front of eeword, and it would load with lots o errors.. Some i have never seen before... I will continue to try and figure it out.. but your help is appreciated..
Thanks... ED
:D :D
RMDumse
03-01-05, 08:09 AM
Yep. The greater than sign seems to give this forum lots of trouble. There's a whole big definition between the : $P and ; which didn't come through. And since there are other < and > signs elsewhere in the code, I better let LC edit it, and see if he can't get those signs to show up.
Chordline
03-01-05, 08:16 AM
thanks randy.. Ill be eagerly awaiting the update.. so its just that parts of the code didnt come thru ? I have printed out the code, and am studying how you did it.. its a great learning tool. Thanks
ED..
Oh by the way, the books on forth i bought.. waste o money and time. No Help... They are written for people programing in another type of forth, and only help if your trying to program main frames.. Dohh..
nmitech
03-01-05, 08:47 AM
Sorry, the previous post is now edited. Please try again.
Chordline
03-01-05, 09:44 AM
It almost went through.. It is still having trouble with the following, but i do get a display on my LCD now, Its just not liking these variables, .. Humm
: $>P
<BUILDS
CR KEY DROP
PHERE 1 PALLOT
0
BEGIN
KEY DUP D = NOT ( NOT A CR, D = CR IN HEX, 13 = CR IN DEC
WHILE
P, 1+
REPEAT
DROP
0 P,
SWAP P!
DOES>
; EEWORD OK
OK
$>P S1$
OK
SONAR =
SONAR ?
EEWORD OK
OK
$>P S2$
OK
Inches
Inches ?
EEWORD OK
OK
$>P S3$
OK
Compass =
Compass ?
EEWORD OK
OK
$>P S4$
OK
Degrees
Degrees ?
EEWORD OK
OK
OK
Thanks.. ED
nmitech
03-01-05, 09:59 AM
From my post above, simply highlight from SCRUB all the way through TEST-LCD, right click and COPY. Go to the NMITerm window right click and PASTE to download . No problem there! Please email me at techsupport@newmicros.com, i will email you a copy.
chris
Chordline
03-01-05, 10:04 AM
even with the erors loading those lines, it still runs, only all i get is the compass, the sonar fires and only displays a one.. but the compass is right on.... How do i insert a delay ? slow down the cycles? that is the every cycles line? so it will skip over and run on every x cycles right ? the sonar and comapss are sooo quick you cant even read the last digit.. Awesome...
Thanks
Ed
Chordline
03-01-05, 10:07 AM
yes i did load the Whole program from scrub all the way down...
I dont cut and paste from the forum.. I save the entire program and sequentially number them as i revise them. Ie Sonar.. Sonar1 Etc.. Sorry. that is just a copy from the load screen. I wanted you to see where it doesnt like it when its loading......
Sorry for the confussion..
nmitech
03-01-05, 10:20 AM
The strings look OK to me, not sure why they are rejected. Can you PM the file to me, techsupport@newmicros.com
Thanks
nmitech
03-01-05, 10:56 AM
I added a delay loop in the TEST-LCD routine below so you can tune your sonar and compass until you happy with the results. Then later when you use the SCHEDULE-RUN or INSTALL the machine(s), you can remove the loops below,
BEGIN
8000 0 DO LOOP
?TERMINAL UNTIL
: TEST-LCD
LCD-INIT
S1$ PCOUNT LCD-PTYPE
90 DSPAT S2$ PCOUNT LCD-PTYPE
CRLF
S3$ PCOUNT LCD-PTYPE
D0 DSPAT S4$ PCOUNT LCD-PTYPE
CR ." Any key hit will stop the program..."
BEGIN
E0 FIRE
E0 RANGE
( display range on top line
8A DSPAT 5 LCD-SPACES
8A DSPAT INCHES @ DECIMAL .LCD
DIRW?
( display compass on bottom line
CA DSPAT 5 LCD-SPACES
CA DSPAT DEGREES @ DECIMAL .LCD
8000 0 DO LOOP
?TERMINAL UNTIL
; EEWORD
Chordline
03-01-05, 11:04 AM
IT WONT LET ME PM IT, IT SAYS ITS TOO LONG...
HERE IT IS AFTER LOADING
SCRUB
IsoMax V0.76
COLD
IsoMax V0.76
OK
( lcd driver for MinPod ) OK
OK
( ************************************************** OK
OK
( I/O PORTS OK
( OK
( I/O Ports Assign Function OK
( ~~~ ~~~~~ ~~~~~~~~~~~~~~~ OK
( I/O PA0 LCD, DB0 OK
( I/O PA1 LCD, DB1 OK
( I/O PA2 LCD, DB2 OK
( I/O PA3 LCD, DB3 OK
( I/O PA4 LCD, DB4 OK
( I/O PA5 LCD, DB5 OK
( I/O PA6 LCD, DB6 OK
( I/O PA7 LCD, DB7 OK
( O PE6 LCD, RS (register select. LOW: command, HIGH: data) OK
( O PE5 LCD, R/W (READ: signal high, WRITE: signal low) OK
( O PE4 LCD, E (chip enable, active high) OK
( ************************************************** OK
OK
OK
HEX OK
OK
( ==== Tools ==== ) OK
: LCD8@ ( -- d )
00 FB2 ! ( data in )
PE5 ON ( RD high
PE4 ON ( E high enable chip
FB1 @ ( read data bus )
PE4 OFF ( E low disable chip
; EEWORD OK
OK
: LCD8! ( d -- )
FF FB2 ! ( data out )
PE5 OFF ( WR low
FB1 ! ( output data )
PE4 ON ( E high enable chip
PE4 OFF ( E low disable chip
; EEWORD OK
OK
: CMD> ( -- d ) PE6 OFF LCD8@ ; EEWORD OK
: LCD> ( -- d ) PE6 ON LCD8@ ; EEWORD OK
: WNB ( -- ) BEGIN CMD> 80 AND 0= ?TERMINAL OR UNTIL ; EEWORD OK
: >CMD ( d -- ) PE6 OFF LCD8! WNB ; EEWORD OK
: >LCD ( d -- ) PE6 ON LCD8! WNB ; EEWORD OK
OK
: LCD-INIT ( -- )
EF FF1 ! ( outputs high for R/W.E5 RS.E6, low for E.E4 )
7F FF2 ! ( DDR outputs for E.A6 R/W.A5 RS.A4 )
0F FF3 ! ( release all PE4-7 lines from PER )
FF FB1 ! ( outputs all port A high
FF FB2 ! ( DDR outputs
0 FB3 ! ( release all port A lines from PER )
38 >CMD ( reset sequence for
38 >CMD ( EIGHT bit interface
6 >CMD ( entry mode set: increment; no shift
( F >CMD ( display on; cursor on; blink on
C >CMD ( display on; cursor off; blink off
1 >CMD ( display clear
80 >CMD ( cursor in top left position
; EEWORD OK
OK
: CLEAR WNB 1 >CMD ; EEWORD OK
: DSPAT WNB >CMD ; EEWORD OK
: HOME WNB 2 >CMD ; EEWORD OK
: CRLF WNB C0 >CMD ; EEWORD OK
: MOVE-CURSOR WNB 80 OR >CMD ; EEWORD OK
: RIGHT-UPPER-CORNER 27 MOVE-CURSOR ; EEWORD OK
: CURSOR? WNB CMD> 7F AND ; EEWORD OK
: LCD>L WNB 10 >CMD CURSOR? 27 > IF RIGHT-UPPER-CORNER THEN ; EEWORD OK
: LCD>R WNB 14 >CMD CURSOR? 27 > IF HOME THEN ; EEWORD OK
OK
: LCD-EMIT WNB >LCD ; EEWORD OK
OK
: LCD-SPACE BL LCD-EMIT ; EEWORD OK
: LCD-SPACES 0 MAX BEGIN ?DUP WHILE 1- LCD-SPACE REPEAT ; EEWORD OK
OK
: LCD-TYPE
BEGIN
DUP 0= NOT
WHILE
1- SWAP DUP @ LCD-EMIT 1+ SWAP
REPEAT
2DROP
; EEWORD OK
OK
: LCD-PTYPE
BEGIN
DUP 0= NOT
WHILE
1- SWAP DUP P@ LCD-EMIT 1+ SWAP
REPEAT
2DROP
; EEWORD OK
OK
: D.RLCD ( d \ n -- )
>R SWAP OVER DABS <# #S SIGN #> R> OVER - LCD-SPACES LCD-TYPE
; EEWORD OK
OK
: .LCD ( n -- ) DUP ABS 0 <# #S SIGN #> LCD-TYPE ; EEWORD OK
OK
: $>P
<BUILDS
CR KEY DROP
PHERE 1 PALLOT
0
BEGIN
KEY DUP D = NOT ( NOT A CR, D = CR IN HEX, 13 = CR IN DEC
WHILE
P, 1+
REPEAT
DROP
0 P,
SWAP P!
DOES>
; EEWORD OK
OK
$>P S1$
OK
SONAR =
SONAR ?
EEWORD OK
OK
$>P S2$
OK
Inches
Inches ?
EEWORD OK
OK
$>P S3$
OK
Compass =
Compass ?
EEWORD OK
OK
$>P S4$
OK
Degrees
Degrees ?
EEWORD OK
OK
OK
( ----- I2C routines for Sonar & Compass ----- OK
OK
VARIABLE INCHES EEWORD OK
VARIABLE DEGREES EEWORD OK
VARIABLE BITLINE EEWORD OK
( VARIABLE SONARSTARTADDRESS EEWORD OK
( VARIABLE SBUFFOFFSET EEWORD OK
( VARIABLE SONARFIRESTATE EEWORD OK
OK
: SCL? TA0 ON? ; EEWORD ( test if SCL is allowed high, not down by another OK
: SCL+ SCL? DROP ; EEWORD ( actual usage for I2C to see if line released OK
: SCL- TA0 OFF ; EEWORD ( I/O turned off OK
OK
: SDA? TA1 ON? ; EEWORD OK
: SDA+ SDA? DROP ; EEWORD OK
: SDA- TA1 OFF ; EEWORD OK
OK
: I2CSTART ( sequence to begin i2c comms
SDA+ ( bring SDA low while SCL is high then SCL low to begin clocking
SCL+
SDA-
SCL-
SDA+ ( LET GO DATA
; EEWORD OK
OK
: I2CSTOP ( sequence to end i2c comms
SDA- ( bring SCL high while SDA is low, then DA high too
SCL+
SDA+
; EEWORD OK
OK
: CLK.
SCL+
SCL-
; EEWORD OK
OK
: CLK.?
SCL+ ( clock in the ack' bit
SDA?
SCL-
; EEWORD OK
OK
: ACK.?
SDA+ ( MAKE LINE HIGH SO SLAVE CAN ACK WITH LOW
CLK.?
SDA+
; EEWORD OK
OK
: ACK.!
SDA-
CLK.
SDA+
; EEWORD OK
OK
HEX OK
: BITLINE> ( BIT SHIFT OUT
BITLINE @ 2* DUP BITLINE !
100 AND
IF
SDA+
ELSE
SDA-
THEN
CLK.
SDA+ ( LET GO
; EEWORD OK
OK
: >BITLINE ( BIT SHIFT IN
CLK.?
IF
1
ELSE
0
THEN
BITLINE @ 2*
+ BITLINE !
; EEWORD OK
OK
: I2COUTBYTE
BITLINE !
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
BITLINE>
ACK.?
; EEWORD OK
OK
: I2CINBYTE
0 BITLINE !
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
>BITLINE
BITLINE @
; EEWORD OK
OK
HEX OK
OK
( to fire sonar :- address SONAR-FIRE OK
: FIRE ( addr --- )
I2CSTART
I2COUTBYTE DROP
00 I2COUTBYTE DROP
50 I2COUTBYTE DROP
I2CSTOP
; EEWORD OK
OK
( read range data from sonar OK
: RANGE ( addr --- )
I2CSTART
DUP I2COUTBYTE DROP
02 I2COUTBYTE DROP
I2CSTART
1 + I2COUTBYTE DROP
I2CINBYTE ACK.! ><
I2CINBYTE I2CSTOP OR INCHES !
; EEWORD OK
OK
: DIR? ( 0-FF value from register 1
I2CSTART
C0 I2COUTBYTE DROP
1 I2COUTBYTE DROP
I2CSTART
C1 I2COUTBYTE DROP
I2CINBYTE I2CSTOP .
; EEWORD OK
OK
: DIRW? ( 0-EOF value from registers 2, 3
I2CSTART
C0 I2COUTBYTE DROP
2 I2COUTBYTE DROP
I2CSTART
C1 I2COUTBYTE DROP
I2CINBYTE ACK.! ><
I2CINBYTE I2CSTOP OR DEGREES !
; EEWORD OK
OK
OK
( ----- display string & data on lcd ----- OK
: TEST-LCD
LCD-INIT
S1$ PCOUNT LCD-PTYPE
90 DSPAT S2$ PCOUNT LCD-PTYPE
CRLF
S3$ PCOUNT LCD-PTYPE
D0 DSPAT S4$ PCOUNT LCD-PTYPE
CR ." Any key hit will stop the program..."
BEGIN
E0 FIRE
E0 RANGE
( display range on top line
8A DSPAT 5 LCD-SPACES
8A DSPAT INCHES @ DECIMAL .LCD
DIRW?
( display compass on bottom line
CA DSPAT 5 LCD-SPACES
CA DSPAT DEGREES @ DECIMAL .LCD
?TERMINAL UNTIL
; EEWORD OK
OK
TEST-LCD
Any key hit will stop the program... OK
nmitech
03-01-05, 11:19 AM
I am sorry, please email me at techsupport@newmicros.com . I need the clean text file, and already edited. Thanks!
vBulletin v3.0.7, Copyright ©2000-2012, Jelsoft Enterprises Ltd.