Searching \ for '%LCD interface%' in subject line. ()
Make payments with PayPal - it's fast, free and secure! Help us get a faster server
FAQ page: techref.massmind.org/techref/lcds.htm?key=lcd
Search entire site for: 'LCD interface'.

_Sub string match.
PICList Thread
'16c84 lcd interface'
1996\11\15@182252 by Tony Matthews

flavicon
face
hi
Should I use port b 1-7 with 4-7 for data and if not why,I need a four
bit interface and will want read/write capability I've read all the
FAQ's and am less sure than ever.  Tony M.

1996\11\15@193115 by Bob Blick

picon face
Tony writes:
>hi
> Should I use port b 1-7 with 4-7 for data and if not why,I need a four
>bit interface and will want read/write capability I've read all the
>FAQ's and am less sure than ever.  Tony M.
>

Yes, that's how you should do it. However, unless you need to read the ram
in the display, the R/W pin is just a waste of pin. The lcd speed is
predictable, with clear/home being one of the slowest commands, so you can
use a timing loop to make sure you don't write to the lcd when it's still busy.

Cheers, Bob


'Serial LCD Interface'
1997\01\13@085707 by Ben Wirz
flavicon
face
Hello Everyone,

    Wirz Electronics has a new product that we would like to introduce to
everyone.

    The Serial LCD Interface (SLI) is a self contained display unit with
TTL and RS232 compatible asynchronous serial inputs. The unit is designed to
allow the engineer, technician, or hobbyist to integrate it into a circuit
with a minimum of interfacing requirements.  Jumperless control and
automatic detection of data rates eliminates difficult interfaces and
complex controlling code.  Low cost and line-powering features make it
suitable for use in commercial products.  With both alphanumeric and
hexadecimal display mode, SLI is a powerful debugging and display tool for
many applications.

Features:

  Jumperless Control/Operation
  Wide Baud Range, 30 to 125,000 bps
  RS232 and TTL Compatible
  RS232 Serial Powered *
  Auto-Baud Rate Detection
  ASCII and Hex Display Mode
  D Sub 9 Female Connector (DB-9) and IDC Connector
  Allows direct control of the LCD functions and features
  Designed for all 8x1 to 40x2 character HD44780 controlled
  LCDs with 14x1 pin connectors

Suggested Retail Price for a complete SLI Kit: $25.00 (US)
Suggested Retail Price for a complete SLI Kit and 16x2 LCD: $30.00 (US)

More information can be found at:  http://wirz.com/sli/

An Adobe Acrobat SLI Technical Reference is available at:
ftp://wirz.com/Serial_LCD/sli.pdf

Distributors:

Australia
DonTronics
PO Box 595, Tullamarine 3043
Tel: +613 9338-6286 Fax: +613 9338-2935
http://www.labyrinth.net.au/~donmck/

South Africa
Interface Products (Pty) Ltd.
PO Box 15775, Doornfontein 2028
Tel: +27 (11) 402-7750 Fax: +27 (11) 402-7751
http://www.ip.co.za/ip/

United States
Wirz Electronics
6100 Pershing 2-A, St. Louis MO 63112
Tel: +1 (314) 862-3370 Fax: +1 (314) 862-3371
http://www.wirz.com/


Sincerely,

Ben Wirz
Wirz Electronics
spam_OUTbenTakeThisOuTspamwirz.com
Ben Wirz                For Microchip PIC Products including the Simm Stick
                       development system and Easy PIC'n Book, as well
Wirz Electronics        as Motor Control, Polaroid Sonar Units, and more
.....benKILLspamspam@spam@wirz.com            Hobbyist Robotic & Electronic Supplies, visit:
                       http://www.wirz.com/


'[PICS] LCD interface'
1997\05\28@161506 by bennett
flavicon
picon face
part 0 78 bytes
Thanks





Attachment converted: wonderland:TEST9.ASM (TEXT/MSIE) (00002028)

1997\05\29@130059 by Bruce Cannon

flavicon
face
First double-check the wiring, be sure your wiring and the code agree on
interface mode (4 or 8 bits, hi or lo nybble, ect), then try the code from
one of the mchip app notes.  If it works compare code, if not try another
display unit.  I've had luck with mchip's app note code, parallax's app
note code, and CCS C compiler LCD driver.  I use a part called the LCD
Backpack by Scott Edwards Electronics to quickly test display modules, it
allows you to plug your module into it with a ribbon cable, then send rs232
data from PC, PIC, BASIC Stamp, whatever.  Very useful for eliminating
hardware problems.  He doesn't have a web site but Parallax sells them.
----------
Bruce Cannon
Style Management Systems

Remember: electronics is changing your world...for good!

----------
> From: Wayne Bennett (by way of Wayne Bennett <w.bennettspamKILLspamsct.gu.edu.au>)
<.....w.bennettKILLspamspam.....SCT.GU.EDU.AU>
> To:
> Subject: [PICS] LCD interface
> Date: Wednesday, May 28, 1997 1:02 PM
>
> Has any one had much success with interfacing the 16C74 with an
LCD(hitachi
> LM016L).  I'm not sure if I've fried the display or have an error in code
> (attached). If any one is willing to share code or pseudo code I'd
> appreciate the help
>
> Thanks
>
>
>
>
>

1997\05\29@152043 by Wayne Bennett

flavicon
picon face
Thanks for the reply's about my LCD interface problem.  I never worked out
the problem with using PORTE for the control lines and PORTD for data (ie.
74).  The code that I was using works fine if I change the control port to
either C or D so there has to be an initialisation error somewhere that I
haven't picked up on.

I'm now using PORTC for the control lines and everything seems to be fine.
Thanks again.
        _/       _/      _/_/_/_/
       _/       _/      _/     _/
      _/       _/      _/     _/
     _/  _/   _/      _/_/_/_/
    _/ _/ _/ _/      _/      _/
   _/_/   _/_/      _/      _/
  _/       _/  _/  _/_/_/_/

Wayne Bennett
Griffith University
Brisbane Australia
EraseMEw.bennettspam_OUTspamTakeThisOuTsct.gu.edu.au

'PIC & LCD LCD interfaces'
1997\05\29@154715 by wft

face
flavicon
face
Most LCD interfaces are virtually the same.  Try getting data at the
following locations:
http://www.hantronix.com:80/
http://www.ieeinc.com/
http://www.lukin.com.hk:80/SII/lcd.htm


hope these help

Gus
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WFT Electronics    wftspamspam_OUTfrii.com   http://www.frii.com/~wft
Gus Calabrese      303 321-1119......voicemail
Lola Montes        1799 Uinta Street   Denver, CO 80220
EMERGENCY:   791 High Street     Estes Park, CO  80517
if no success with @spam@wftKILLspamspamfrii.com, try .... KILLspamwftKILLspamspambigfoot.com

'LCD interface'
1997\05\30@033103 by Osama ALASSIRY

flavicon
face
You'r lucky to have all those PORTs !!!!    16c74??
I used a 4 bit I/F with 3 control lines -> just 7 bits from PORTB  (on a
16c84 !)
----
From: Wayne Bennett <RemoveMEw.bennettTakeThisOuTspamSCT.GU.EDU.AU>
To: spamBeGonePICLISTspamBeGonespamMITVMA.MIT.EDU
Date: 30 May 1997 4:18 AM
Subject: LCD interface

>Thanks for the reply's about my LCD interface problem.  I never worked
out
>the problem with using PORTE for the control lines and PORTD for data
(ie.
>74).  The code that I was using works fine if I change the control port
to
>either C or D so there has to be an initialisation error somewhere that I
>haven't picked up on.
>
>I'm now using PORTC for the control lines and everything seems to be
fine.
{Quote hidden}


'[PICS] LCD interface'
1997\06\02@182418 by Steve Smith
picon face
I have used '84 to drive LM016 with no problems the code is easy to transport
Mail me with request and I will send code segments which work 8 data bits E
and RS lcd is permantly in read mode. There are few constraints except text
should not exceed one half of a page of rom.
Steve.....


'PIC 16c84 4bit LCD interface - I need help'
1998\02\26@074242 by Ralf Sigmund
flavicon
face
After serveral trys to implement a 4 bit Interface to an HD44780 driven 2 x
16 LCD display I desperately seek some help.
I tried to use the code snippet Dave Duley posted some time ago.
Unfortunately it just did not work.
Perhaps I failed, because the source covered only the used functions and no
main program...
The Microchip AN 587 example code uses a 16c5x device.
As the only Pic Controller I have here is a 16c84 I ran into serious
problems
because i do not know all the registers and ports they use.
I am not sure in what order I should connect the RB lines to the Display and
if I should use rb0-rb3 or rb4-rb7 as data lines.
I tried Myke Predkos Thermo5 Basic Example which worked fine, but is an 8
bit interface without usage of the LCD R/W line.

Thanks for any help
Ralf

1998\02\26@084633 by Lauri Pirttiaho

flavicon
face
:After serveral trys to implement a 4 bit Interface to an HD44780 driven 2 x
:16 LCD display I desperately seek some help.
<etc...>

If you do not mind doing some actual coding yourself, the thing you
need is HD44780 manual. Now, fortunately, it is online. In

http://www.hea.com/hean2/lcdc/hd44780list.htm

at Hyundai pages you can find a rather complete manual for HD44780.
Notice the initilaization procedure, you need at the beginning.
You need that to set the 4-bit operating mode!

For 4-bit interface you need 7 lines: Enable, Register Select,
Red/Write and Data lines 4-7. Initiation of the 4-bit mode
is described in the "Initialization: By Instructions" link
and 8-bit data is written over the 4-bit interface with
most significant nibble first.

-- Lauri

---
<a href="http://www.ee.oulu.fi/~lapi/">For more info.</a>

1998\02\26@124602 by Steve Lawther

flavicon
face
    Ralf,
   
    see my test circuit and software for the 16C84 on
   
    http://ourworld.compuserve.com/homepages/steve_lawther/charlcd.htm
   
    This shows how to implement a 4 bit interface, and the test software
    gives you error codes, if it finds faults.
   
    Any problems, just shout.
   
               Steve Lawther
   


______________________________ Reply Separator _________________________________
Subject:      PIC 16c84 4bit LCD interface - I need help
Author:  MIME:RemoveMEralf.sigmundspamTakeThisOuTSTUD.UNI-HANNOVER.DE at INTERNET-HUSKY
Date:    26/02/98 14:56


After serveral trys to implement a 4 bit Interface to an HD44780 driven 2 x
16 LCD display I desperately seek some help.
I tried to use the code snippet Dave Duley posted some time ago.
Unfortunately it just did not work.
Perhaps I failed, because the source covered only the used functions and no
main program...
The Microchip AN 587 example code uses a 16c5x device.
As the only Pic Controller I have here is a 16c84 I ran into serious
problems
because i do not know all the registers and ports they use.
I am not sure in what order I should connect the RB lines to the Display and
if I should use rb0-rb3 or rb4-rb7 as data lines.
I tried Myke Predkos Thermo5 Basic Example which worked fine, but is an 8
bit interface without usage of the LCD R/W line.
   
Thanks for any help
Ralf
   

1998\02\26@124607 by mike

flavicon
picon face
In message  <199802261345.PAA13729EraseMEspam.....tk8.oulu.fi> EraseMEPICLISTspamMITVMA.MIT.EDU writes:
{Quote hidden}

Minor correction, I think you'll find the Read?write line is not
needed and should be tied low IF you don't want to read from the
display.

Regards,

Mike

1998\02\26@221805 by Adi

flavicon
face
Hi Ralf,

I am just beginning to tackle the same project, interfacing a PIC to
a HD44780 using the 4 bit interface. I am using a 74HC595 to free up
some I/O on the PIC. Anyways, you are supposed to use DB4 to DB7.
B.G. Micro sells some 2x20 LCD displays and their datasheet for the
display has some helpful info about the 4bit transfer. Their website
is http://www.bgmicro.com. I could also send the file if you like...

Regards,
Adi

{Quote hidden}

1998\02\27@003829 by Mark Lezama

flavicon
face
Ralf, if you want to used the HD44780 in a 4 bit interface:

1.- You have to used DB4-DB7 in the module it doesnt matter if you conect
rb0-rb3 or rb4-rb7 but you have to be wiser in what way you are sending the
information.

2.- When you circuit startup wait at least 15ms before send any inormation to
the HD44780.

3.- Put RS=0; R/W=0; dato=0011 (dato=DB7 DB6 DB5 DB4). dont check BF

4.-Wait at least 5ms.

5.- Put RS=0; R/W=0; dato=0011 (dato=DB7 DB6 DB5 DB4). dont check BF

6.- Wait at least 100uS.

7.- Put RS=0; R/W=0; dato=0011 (dato=DB7 DB6 DB5 DB4). dont check BF

8.- Put RS=0; R/W=0; dato=0010 (dato=DB7 DB6 DB5 DB4). this set 4 bit interface.
after this step you can check BF and have to send the commands for funtion sets,
etc.

Ralf Sigmund escribis:

{Quote hidden}

1998\02\27@015502 by Philippe

flavicon
face
At 13:29 26/02/98 +0100, you wrote:
>After serveral trys to implement a 4 bit Interface to an HD44780 driven 2 x
>16 LCD display I desperately seek some help.
>I tried to use the code snippet Dave Duley posted some time ago.
>Unfortunately it just did not work.
>Perhaps I failed, because the source covered only the used functions and no
>main program...

UMPS will help you to see why it does not work: it will simulate
the HC44780 LCD panel. Try it:

       http://www.sistudio.com/umps

Regards,
       Philippe.

 +--------------------------------------------------------+
 |  Virtual Micro Design                                  |
 |  Technopole Izarbel,                                   |
 |  64210 BIDART                                          |
 |  FRANCE                                                |
 |                                                        |
 |  Phone: +33 559.438.458   Fax: +33 559.438.401         |
 |                                                        |
 | E-Mail: EraseMEp.techerspamspamspamBeGoneidls.izarbel.tm.fr                    |
 | URL:    http://www.sistudio.com/umps                   |
 +--------------------------------------------------------+







{Quote hidden}


'LCD Interface ?'
1998\03\01@190517 by regeman
flavicon
face
Hello
I have some questions
Does anyone know where can i find info for Hitachi
44xxx lcd modules?
and if some available program for lcd serial
interface ? (Myke Predkos Thermo5 Basic Example,etc)
Thanks for any help!


_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com

'PIC 16c84 4bit LCD interface - I need help'
1998\03\03@202406 by Ron Kreymborg

flavicon
face
Ralf and Others

I started a project some time ago which included the requirement for a
2-line lcd display using a 4 line interface to a 16X84. Others on the
piclist helped me over a problem when I was setting the contrast
incorrectly (in fact not at all). The lcd module is now working well and
uses just 75 bytes (here a byte is 12 bits!).

For those who want to look at yet another lcd driver, it's on my web page
at http://www.shm.monash.edu.au/~r.kreymborg/pic/lcd.html and includes a test
program and all the necessary files in zip format to download.

Ron

On Thu, 26 Feb 1998, Ralf Sigmund wrote:

> After serveral trys to implement a 4 bit Interface to an HD44780 driven 2 x
> 16 LCD display I desperately seek some help.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ron Kreymborg                   Computer Systems Manager
Monash University               CRC for Southern Hemisphere Meteorology
Wellington Road
Clayton, VIC 3168               Phone     : 061-3-9905-9671
Australia                       Fax       : 061-3-9905-9689
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'PIC - VGA LCD interface question'
1998\03\24@141226 by Gary T. Pepper

flavicon
face
Hi All!

Has anyone every tried interfacing a Sharp LM641521 monocrhome VGA LCD
display (640 x 480 pixels) directly to a PIC processor??  If you have, can
you provide some info and/or code as to how to do it?  I was hoping that it
could be done without the need for a dedicated LCD graphics controller chip.

Thanks in advance,

Gary Pepper

e-mail: RemoveMEgpepperKILLspamspamcapitalnet.com


'Announce: Serial LCD Interface - OEM'
1998\06\22@231819 by Ben Wirz
flavicon
face
Wirz Electronics is proud to announce a new version of our very popular
Serial LCD Interface. SLI-OEM is the most cost effective Serial LCD
available, making it the ideal choice for the OEM.  Install the LCD of your
choice, or Wirz Electronics can provide custom units built to your
specifications.

LCD Types Supported:

 One line LCDs: 1x 8, 10, 16, 20, 24, 30, 32 and 40
 Two line LCDs with scrolling: 2x 8, 10, 16, 20, 24, 30, 32 and 40
 Four line by 20 LCDs with scrolling

Serial Input Speeds Supported: 110, 300, 600, 1200, 2400, 4800, 9600 and
19,200 bps

Sixteen byte character buffer.

The same interface to LCD functions as the original SLI.

LCD type and data rates are specified by eight DIP switches.

$10.00 USD in Production Quantities

More Information: http://wirz.com/sli-oem/
Complete Data Sheet: http://wirz.com/sli-oem/docs/sli-oem.pdf    (125K)

Sincerely,

Ben Wirz
Wirz Electronics
benSTOPspamspamspam_OUTwirz.com


'Serial LCD interface boards available'
1998\10\11@144441 by Gabriel Gonzalez
flavicon
face
Hi PICers,

I made a bunch of 'serial LCD interface' boards for one of our projects, and
ended up with a few left and I would like to recover their cost. These are
high quality FR4 two sided boards with solder mask and silk screen. They can
be powered from a PC serial port, from a regulated 5V source, or from an
unregulated source to a 78L05 regulator.
If anyone is interested, drop me a note. I can send you schematic, and board
layout for Eagle.

These are bare boards, and they use a 16C61. You can program it yourself, or
I can provide you with a programmed and tested one.

You can contact me at:

Gabriel Gonzalez
spamBeGonetgoSTOPspamspamEraseMEchih1.telmex.net.mx


'LCD interface'
1999\03\05@225829 by Seth C. Nelson
picon face
do you guys think that taking code from a BS2 (from Al Williams Stamps
Project of the Month) meant to drive an LCD (HD44780 controller chip) and,
using PICBasic Pro, putting it on a PIC to do the same would work?  thanks.
:-)




===================
Seth C. Nelson
Web Developer/
Windows Programmer
Specializing in HTML, ASP, VBScript, JavaScript, and VB
KILLspams.c.nelsonspamBeGonespamusa.net
Coming soon: http://scnet.webjump.com/
UIN: 32616325

The Nelson Group
11008 Pleasant Walk Rd.
Myersville, MD    21773-9221
(We will soon getting our new URL at http://scnet.webjump.com/ )
"Open Your Gate To The Future" -- Nelson Group Web Developers,
Low Cost Web Design Using The Latest In Web Technology
===================


'2 Wire LCD Interface and LCD Page'
1999\04\20@180442 by Myke Predko
flavicon
face
Hi Folks,

I've <i>finally</i> gotten my two wire LCD Interface for the PICMicro
completed and put on my web page:

http://www.myke.com/engres/lcd.htm

Along with the two wire interface, I also added a table of character
addresses for different LCD types.

I would appreciate it if you could take a look at it and let me know what
you think,

myke


'9237-op lcd interface'
1999\10\02@130344 by firewall_fred
flavicon
face
I purchased this unit from mpja, and found their spec sheet which shows pinouts.
What it doesn't describe is the method of interfacing with the unit. Anybody kn
ow how to work with this device?

Thanks!

PS: I appreciate the replies to my rs232 question - very helpful.


Get HushMail. The world's first free, fully encrypted, web-based email system.
Speak freely with HushMail.... http://www.hushmail.com

1999\10\02@181506 by Keelan Lightfoot

flavicon
face
Have a look at:

ftp://ftp.ee.ualberta.ca/pub/cookbook/faq/lcd.doc

This FAQ covers the Hitachi 44780 LCD interface, and compatibles.

- Keelan

>I purchased this unit from mpja, and found their spec sheet which shows
>pinouts. What it doesn't describe is the method of interfacing with the
>unit. Anybody know how to work with this device?

1999\10\02@233432 by Michael Barker

flavicon
face
From: <EraseMEfirewall_fredspamEraseMEHUSHMAIL.COM>


> I purchased this unit from mpja, and found their spec sheet which shows
pinouts. What it doesn't describe is the method of interfacing with the
unit. Anybody know how to work with this device?
>
Try looking at Myke Predko's website for interfacing PIC's to LCD's.
There is a lot of information about what is needed to set up the
interface as well as displaying characters.

Take a look at: http://www.myke.com/engres/lcd.htm
as well as some of his other articles at Rentron:
http://www.rentron.com/pic.htm

Michael Barker

P.S. - How is the LCD unit?  I was interested in purchasing one
of these as well as the 20x1 LCD modules.


Myke - hope you don't mind me plugging your sites-they've come in
handy plenty for me, especially after I bought your book on PICs.

1999\10\09@012727 by firewall_fred

flavicon
face
Michael:

I purchased a few of these and so far, I have yet to get any of them working. On
e of them may have been shot when I hooked it up in reverse - $3.95 pissed away
- no biggie. Yet the other two don't seem to respond at all. I would think that
even without a signal I should be able see something happen with the display whe
n the LCD voltage is adjusted from 0-5V, but I see no changes. The backlight LED
works great, so the worst case is they become sophisticated night-lights ;-)

I'm using the 4-bit interface. I thought timing might be an issue, so I slowed t
he 16F84 down to eliminate that as an issue. I can see the appropriate signals r
eaching the device on my o-scope, looks like clean signals with sharp rise/fall
transitions. I'm not one to give up easily, so I'll keep plugging away - if you
have suggestions, I'd be really happy to hear them.

Thanks!

--{Original Message removed}

1999\10\09@014837 by Jim Paul

picon face
Fred,

These displays, and any using the 44780 controller chip, are particular
about the initialization
routine to get them ready for use.  Make sure you have properly initialized
the display, and then
just feed it the data, and it should work.  I've used a couple of these
displays, and they work fine.
The key is initialization.  Also, make sure you have the read/write (R/W)
pin grounded.  Otherwise,
you'll be commanding the display to send data to the PIC instead of the
other way around.  Let me
know if this helps you get it going.


Regards,


Jim
{Original Message removed}

1999\10\09@021423 by Keith Causey

picon face
My apologies - I know this isn't directly PIC related (maybe one day I'll
design an interface to one) but does anyone here have any experience with
adjusting floppy drives? Thanks - Keith Causey - @spam@ffight@spam@spamspam_OUTgeocities.com

'9237-op lcd interface [OT]'
1999\10\09@191037 by paulb

flavicon
face
Keith Causey wrote:

> does anyone here have any experience with adjusting floppy drives?

 My experience says it's cheaper to buy a new one.  YMMV.

 Adjust?  Adjust?
--
 Cheers,
       Paul B.

1999\10\09@194853 by Don McKenzie

flavicon
face
"Paul B. Webster VK2BZC" wrote:
> Keith Causey wrote:
> > does anyone here have any experience with adjusting floppy drives?
>   My experience says it's cheaper to buy a new one.  YMMV.
>   Adjust?  Adjust?
>   Cheers,
>         Paul B.

It's even cheaper to buy a new one than to buy a head cleaner for one.

Don McKenzie  spamBeGonedonspamKILLspamdontronics.com http://www.dontronics.com

Don's Download Dungeon:   http://www.dontronics.com/download.html
Australian Electronics Ring http://www.dontronics.com/aering.html
Win $500USD Cash. Micro design contest:  http://www.simmstick.com

1999\10\09@201835 by Keith Causey

picon face
I just hate to rip them apart just to use the spindle motor.

> "Paul B. Webster VK2BZC" wrote:
> > Keith Causey wrote:
> > > does anyone here have any experience with adjusting floppy drives?
> >   My experience says it's cheaper to buy a new one.  YMMV.
> >   Adjust?  Adjust?
> >   Cheers,
> >         Paul B.
>
> It's even cheaper to buy a new one than to buy a head cleaner for one.
>

'FDD alignment - Was: 9237-op lcd interface [OT]'
1999\10\10@011523 by paulb

flavicon
face
Keith Causey wrote:

> I just hate to rip them apart just to use the spindle motor.

 Well of course I tend to feel that way too, but when you have one and
don't know *why* it misbehaves, things get difficult.

 There are a lot more interesting things than the spindle motor too,
such as the magnet on the flywheel and the Hall sensor, particularly the
track stepper motor and the track zero sensor (if it is, as it *should*
be, optical).

 To service them you need a program that tells you what is *really*
going on, whether for example, track zero is actually track zero and
the exact nature of mis-reads.  Or a test rig using - a PIC!  (And a
FDC, and a LCD.)

 A test disk is highly desirable, but a disk formatted with a "known
good", possibly new drive is probably close enough.  Of course, the head
of the DUT should be demagnetised and an attempt made to read a dummy
disk (to see whether it is damaged in the read process, including re-
read on a good drive and visual inspection afterward) as well as format
and re-read a blank disk, before the test disk is ever put in the DUT.

 All this is to determine exactly what is out of order.  If for
example, the head has been pushed out of seek alignment, then it will
fail to read a good disk but format and successfully read its own.  The
same will happen for a track zero sensor mis-alignment and an azimuth
error.

 You need the test disk and diagnostic program to distinguish these
possibilities.  *Very* sophisticated test disks can tell you how much
track alignment and azimuth are in error.

 A drive that will not format and re-read a blank disk is *not* out-of-
adjustment, it is *faulty*.  A couple I have don't even respond to the
interface.  They may actually be easier to fix (or easier to junk!) as
it becomes a matter of fault-finding rather than alignment.
--
 Cheers,
       Paul B.

'9237-op lcd interface'
1999\10\10@033913 by firewall_fred

flavicon
face
The documentation really sucks on this module, but I finally got it. My problem
was that the LCD drive voltage must be NEGATIVE. Not a mention of this in the do
cs - just 0 to 6VDC. As a side note I put together a simple 2 cap, 2 diode circu
it to create (-)3.3 VDC from the OSC2 pin on the 16F84 (RC osc). Could also be d
riven from a PORTx pin if your code allows. I haven't seen this anywhere (in rel
ation to this or any other LCD module), so if you have a place to post the (12kB
GIF) circuit, I'm sure others would appreciate it. Thanks for all the help from
everyone that contributed. In the end I can highly recommend the 9237-op from M
arlin P. Jones (http://www.mpja.com).

Fred

At 12:51 AM 10/9/99 -0500, you wrote:
{Quote hidden}

>{Original Message removed}

1999\10\10@075251 by Robert A. LaBudde

flavicon
face
At 03:39 AM 10/10/99 -0400, Fred wrote:
>The documentation really sucks on this module, but I finally got it. My
>problem was that the LCD drive voltage must be NEGATIVE. Not a mention of
>this in the docs - just 0 to 6VDC. As a side note I put together a simple 2
>cap, 2 diode circuit to create (-)3.3 VDC from the OSC2 pin on the 16F84 (RC
>osc). Could also be driven from a PORTx pin if your code allows. I haven't
>seen this anywhere (in relation to this or any other LCD module), so if you
>have a place to post the (12kB GIF) circuit, I'm sure others would
>appreciate it. Thanks for all the help from everyone that contributed. In
>the end I can highly recommend the 9237-op from Marlin P. Jones
>(http://www.mpja.com).

I've got one of these parts, but haven't tried to interface it. The MPJ
catalog references -5 V for backlight, but the spec sheet states +5 V.
Apparently there are a number of conflicts in the spec.

If you could post your 12k GIF file to the list (or privately), I'd
appreciate it.

Have you connected the backlight and contrast adjustment too?

================================================================
Robert A. LaBudde, PhD, PAS, Dpl. ACAFS  e-mail: .....ralspam_OUTspamlcfltd.com
Least Cost Formulations, Ltd.                   URL: http://lcfltd.com/
824 Timberlake Drive                            Tel: 757-467-0954
Virginia Beach, VA 23464-3239                   Fax: 757-467-2947

"Vere scire est per causae scire"
================================================================

1999\10\10@103920 by Jim Paul

picon face
Fred,

I'm glad to hear you got it working.   And regarding you fix and findings, I
have plenty of space on my website to put such things.  So, if you want me
to, I'll post it there and post a link on the list stating such.
Send me a file with whatever you want to put in it, and I'll format it and
post it to my website.


Thanks and Regards,


Jim



{Original Message removed}

1999\10\10@170641 by paulb

flavicon
face
Robert A. LaBudde wrote:

> I've got one of these parts, but haven't tried to interface it.  The
> MPJ catalog references -5 V for backlight, but the spec sheet states
> +5 V.
> Have you connected the backlight and contrast adjustment too?

 Steady on here!  Don't get confused.  The backlight (usually) has
two quite separate connections, which may be marked plus and minus 5V.
That doesn't mean it requires a negative supply - it doesn't!  It means
you can put a switching transistor in the negative line for logic level
control.

 Overall, it is *entirely* separate from the logic supply.  Very
separate indeed, the E-L backlit boards usually had the connections at
the opposite end of the board to guarantee isolation of the sundry
hundred-volt supply, as do many LED backlights simply in legacy.

 The negative contrast voltage requires less than one milliamp and
thus charge pump setups (using signal diodes, not power diodes) work
fine.
--
 Cheers,
       Paul B.

1999\10\11@212110 by Bill Kichman

flavicon
face
Ouch, I just ordered a bunch of these.  Have had absolutely no problem with
4-bit, 8-bit and serial pic setups on Powertip and Optrex units in the past,
and figured that if these have a 44780 chip, they must be ok too.  Hope
somebody finds the solution.  Has anybody confirmed they do need -5v
contrast voltage?

Bill Kichman, P.E.
Cornwall, PA

{Original Message removed}

1999\10\11@235011 by firewall_fred

flavicon
face
I was going to wait for Jim to announce his site, but there's been a bunch of in
terest in this - He recently posted my circuit here:

       http://www.jpes.com/LCD01.html

The test code for this is from here:

       http://home1.gte.net/cramer/PIC/normpic.htm

Between the two, you should be able to make it work, if not, let me know.



At 09:03 PM 10/11/99 -0400, you wrote:
>Ouch, I just ordered a bunch of these.  Have had absolutely no problem with
>4-bit, 8-bit and serial pic setups on Powertip and Optrex units in the past,
>and figured that if these have a 44780 chip, they must be ok too.  Hope
>somebody finds the solution.  Has anybody confirmed they do need -5v
>contrast voltage?
>
>Bill Kichman, P.E.
>Cornwall, PA
>
>{Original Message removed}


'2/3 Wire LCD Interface Alternative Designs'
2000\03\20@212635 by Jeff Frohwein
flavicon
face
Hi,

I just posted some 2/3 wire LCD interface alternative
designs if anyone's interested. In the 2 wire design
I basically replace Mike Predko's 74LS174 with a
74HC595 and an RC circuit. This allows 2 extra digital
output lines for other uses. An inherent part of this
design is that you can chain as many 74HC595's as you
want and gain many digital output lines if you can
stand the shift register load time delays imposed by
the extra chaining.
The 3 wire design is pretty straight forward. The 2 wire
design uses an RC circuit so a delay after shifting bits
is required to allow the data bits to latch. I have no
idea off the top of my head what percentage of Vcc that
the capacitor needs to charge to to generate a "reliable"
logic 1 but I would assume 90% of Vcc or better to be safe.
Once a "reliable" voltage level has been reached the RC
could be brought back low again for reloading bits if
need be.

Also, earlier today I posted a link to the iPic web
server running on a 12C509. This appears to be an
alternative to Denis Petrov's wwwPic running on a 16F84
and he also states that it is completely RFC1122 compliant
for legal use on the internet. Many good links here for
small system TCP/IP as well as a link to the C code for
a TFTP server running on a PIC.

http://www.devrs.com/   (Select NEWS or PIC.)

Jeff

2000\03\21@092838 by Jim Hartmann

flavicon
face
Here is another 2 wire SPI (shift register) driver from a "design idea"
published in EDN Jan 2000 (by your's truly :).  Originally designed to
reduce the number of opto-couplers needed to isolate shift register
devices.

Operation: Normally the /0bits and /1bits wires are at logic '1'.  To shift
a '0' bit, pulse /0bits low, and for a '1', pulse /1bits low.  To strobe
the data into the registers, pulse both /0bits and /1bits low at the same
time.  Shift registers may be cascaded as needed.

Clock generator, assumes data is clocked into the shift register on the low
to high transition of CLOCK (typically):
             ___        ___
/0bits-------|   \   +--|   \
            |nand)o-+  |nand)o--------> CLOCK
/1bits-------|___/   +--|___/

Strobe generator, assumes data is strobed on the low to high transition of
STROBE.
             ___
/0bits-------\   \
             )nor)o-------> STROBE
/1bits-------/___/

Data latch (RS latch), changes on high to low transition of input.  At
"strobe" time output is "don't care".
             ___
/0bits-------|   \
            |nand)o-----+
       +----|___/       |
       |                |
       +-------------+  |
                     |  |
       +-------------)--+
       |     ___     |
       +----|   \    |
            |nand)o--+----> DATA
/1bits-------|___/

:-Jim





Jeff Frohwein <TakeThisOuTjfrohwei.....spamTakeThisOuTHIWAAY.NET>.....spamTakeThisOuTMITVMA.MIT.EDU> on 03/20/2000 08:24:28
PM

Please respond to pic microcontroller discussion list
     <TakeThisOuTPICLISTKILLspamspamspamMITVMA.MIT.EDU>

Sent by:  pic microcontroller discussion list <.....PICLISTspamRemoveMEMITVMA.MIT.EDU>


To:   RemoveMEPICLISTspamspamBeGoneMITVMA.MIT.EDU
cc:
Subject:  2/3 Wire LCD Interface Alternative Designs


Hi,

I just posted some 2/3 wire LCD interface alternative
designs if anyone's interested. In the 2 wire design
I basically replace Mike Predko's 74LS174 with a
74HC595 and an RC circuit. This allows 2 extra digital
output lines for other uses. An inherent part of this
design is that you can chain as many 74HC595's as you
want and gain many digital output lines if you can
stand the shift register load time delays imposed by
the extra chaining.
The 3 wire design is pretty straight forward. The 2 wire
design uses an RC circuit so a delay after shifting bits
is required to allow the data bits to latch. I have no
idea off the top of my head what percentage of Vcc that
the capacitor needs to charge to to generate a "reliable"
logic 1 but I would assume 90% of Vcc or better to be safe.
Once a "reliable" voltage level has been reached the RC
could be brought back low again for reloading bits if
need be.

Also, earlier today I posted a link to the iPic web
server running on a 12C509. This appears to be an
alternative to Denis Petrov's wwwPic running on a 16F84
and he also states that it is completely RFC1122 compliant
for legal use on the internet. Many good links here for
small system TCP/IP as well as a link to the C code for
a TFTP server running on a PIC.

http://www.devrs.com/   (Select NEWS or PIC.)

Jeff

2000\03\21@101408 by jamesnewton

face picon face
That iPic thing is IMH(not)O total bull. First, no source has ever been
released, Second, it has been demonstrated that his "file system" is nothing
more than taking the port number from the http request and using it as the
starting address in EEPROM of the data to return. And finally, the fact that
he has the thing setup through a slip account on a PC (or other host)
removes about 9/10 of the work involved in connecting to the internet. Its
like saying "I have an internet enabled embedded device, and all you need is
a full PC to connect it to the internet". What's the point? What really
blows me away is that the guy isn't making use of all the hype to sell
advertising or promote his resume. Waste of bandwidth.

Denis Petrov's wwwPic also requires a serial connection, but it doesn't
require a slip account and at least its open source, so one person, so far,
has expressed a desire to extend it to support PPP which would allow it to
be connected directly to a modem for dial up access.

Really, non of these PIC solutions can possibly be fully compliant as they
can't support the
required packet sizes without external RAM as buffer.

Please correct me if I'm wrong on any of this.

Nice job on the LCD schematic.

---
James Newton spamBeGonejamesnewton@spam@spamspam_OUTgeocities.com 1-619-652-0593
http://techref.massmind.org NEW! FINALLY A REAL NAME!
Members can add private/public comments/pages ($0 TANSTAAFL web hosting)


{Original Message removed}


'[PIC]: Getting 2-wire LCD interface to work'
2001\02\27@012214 by mmucker
flavicon
face
All,

I just finished my first test of the "Myke Predko two-wire LCD interface"
and... it's not working, of course!

I don't know if it's my software (likely) or the LCD interface hardware I
built (possible).

Would someone who has built this hardware be willing to compile and run my
code against your hardware as a test?  (My code is written for an 16F84.)

Thanks in advance! (Private replies probably appropriate.)

-Matt

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics


2001\02\27@082842 by Drew Vassallo

picon face
>I just finished my first test of the "Myke Predko two-wire LCD interface"
>and... it's not working, of course!

I wouldn't say "of course," because Myke spent a LOT of time working up that
interface and web page for people to use (for free I might add), and it
works flawlessly.  It saved many a project for me when I was running out of
I/O pins.

>Would someone who has built this hardware be willing to compile and run my
>code against your hardware as a test?  (My code is written for an 16F84.)

Have you tried using Myke's code sample available from his LCD page?  If
that doesn't work for you, then it's your hardware.

If it is your software, you can certainly send the sections that you are
unsure of out to the list for people to comment on.

--Andrew
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics


2001\02\27@114008 by mmucker

flavicon
face
> >I just finished my first test of the "Myke Predko two-wire LCD interface"
> >and... it's not working, of course!
>
> I wouldn't say "of course," because Myke spent a LOT of time
> working up that
> interface and web page for people to use (for free I might add), and it
> works flawlessly.  It saved many a project for me when I was
> running out of
> I/O pins.

I'm sorry-- when I said 'of course,' that was supposed to be a reflection of
MY skills, not of Myke's!

I have every confidence that Myke's design is sound.  The question is
whether or not I executed the design properly.

-Matt

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics


'[PIC]: Getting 2-wire LCD interface to work (newbi'
2001\02\27@141121 by mmucker

flavicon
face
With no offers from anyone to run my LCD code, I'm posting it here for code
review.  I'd appreciate any help I can get.

My code is mostly a flat-out copy of Myke's demo code, with minor
modifications.  For instance, the code on Myke's page generates a huge
number of MPASM compiler warnings, so I tweaked (basically adding
destination operands) until the compiler warnings went away. Also, Myke's
code contained inline decimal math.  Rather than figuring out how to tell
the compiler to use decimal evaluation, I did the evaluation and replaced
the constant.  My code can be compared almost line for line with Myke's code
at http://www.myke.com/code/2wirepic.asm

My program is built on top of my first PIC program.  This program is
supposed to reset the LCD, display "Hi there" on the LCD, and then count
infinitely on the portB pins.

I can see that *something* is getting to the LCD, as it does change its
behavior/display when my project is powered up.

This is running on a 4MHz PIC16F84.  The LCD routines are marked with highly
visible comments if you want to scroll straight to them.  My initialization
code is also likely to have errors.

Many thanks in advance to anyone who looks at my code!

-Matt



My code looks like this:

       list    p=16f84
       __config _CP_OFF & _PWRTE_ON & _WDT_OFF ;add XT
       include <p16F84.inc>



;file register variables
inner   equ     0x0c    ;temp variable
outer   equ     0x0d    ;temp variable
output  equ     0x0e    ;the byte sent to the output pins of port b
Dlay    equ     0x0f    ;scratch byte for LCD delay routines
Temp    equ     0x10    ;temp byte for LCD routines
NOTemp  equ     0x11    ;temp byte for LCD routines

;constants
INNER_LOOP_DELAY        equ 0x8a
#DEFINE LCDData         PORTA,0
#DEFINE LCDClock        PORTA,1

;macros
ClockStrobe     MACRO
       bsf     LCDClock
       bcf     LCDClock
       ENDM

EStrobe         MACRO
       bsf     LCDData
       bcf     LCDData
       ENDM

;start of program
       org     0x00                    ;program memory base at 0x00
reset                                   ;reset vector
       goto    start                   ;Go to start of main program



       org     0x04                    ;Beginning of user code
start
;===========================================================================
=
;Setup stuff here.
;===========================================================================
=
       clrf    output                  ;clear the output shadow register
       clrf    outer                   ;initialize the outer loop counter
       clrf    PORTB                   ;clear the LED output pins
       clrf    PORTA                   ;clear the LCD output pins
       movlw   INNER_LOOP_DELAY
       movwf   inner                   ;initialize the inner loop counter

       bsf     STATUS,5                ;select bank 1
       clrf    TRISB                   ;set portb to outputs
       bcf     TRISA,0                 ;set LCDData to output
       bcf     TRISA,1                 ;set LCDClock to output
       bcf     STATUS,5                ;select bank 0



;===========================================================================
=
;Test things by writing to the LCD
;===========================================================================
=

       call    ResetLCD
       movlw   "H"
       call    SendLCDChar
       movlw   "i"
       call    SendLCDChar
       movlw   " "
       call    SendLCDChar
       movlw   "t"
       call    SendLCDChar
       movlw   "h"
       call    SendLCDChar
       movlw   "e"
       call    SendLCDChar
       movlw   "r"
       call    SendLCDChar
       movlw   "e"
       call    SendLCDChar

;===========================================================================
Main program code was here, stripped out for code review to save space.
;===========================================================================
test    goto    test


;===========================================================================
=
;LCD routines start here.
;===========================================================================
=
ResetLCD
       call    Dlay5                   ;Wait 20msec before resetting the LCD
       call    Dlay5
       call    Dlay5
       call    Dlay5

       bcf     STATUS,C                ;clear the carry flag (//WHY?)
       movlw   0x03                    ;reset command (//Is this right?  Should be 0x30?)
       call    NybbleOut               ;send the command
       call    Dlay5                   ;wait 5 usec before sending second time

       EStrobe
       call    Dlay160                 ;wait 160 usecs before sending third time

       EStrobe
       call    Dlay160                 ;wait 160 usecs before continuing

       ;LCD should now be reset.

       bcf     STATUS,C
       movlw   0x02                    ;LCS 4-bit mode command
       call    NybbleOut
       call    Dlay160

       movlw   0x28                    ;?? for two-line display
       call    SendLCDINST

       movlw   0x08                    ;turn off the display
       call    SendLCDINST

       movlw   0x01                    ;Clear display RAM
       call    SendLCDINST
       call    Dlay5

       movlw   0x06                    ;enable cursor move direction
       call    SendLCDINST

       movlw   0x0c                    ;turn LCD back on
       call    SendLCDINST

       return

SendLCDINST
       movwf   Temp
       swapf   Temp,w
       bcf     STATUS,C
       call    NybbleOut
       movf    Temp,w
       bcf     STATUS,C
       call    NybbleOut
       return

SendLCDChar
       movwf   Temp
       swapf   Temp,w
       bsf     STATUS,C
       call    NybbleOut
       movf    Temp,w
       bsf     STATUS,C
       call    NybbleOut
       return

NybbleOut
       movwf   NOTemp                  ;save the nybble to shift out
       swapf   NOTemp,F
       movlw   6                       ;clear the shift register
       movwf   Dlay
NOLoop1
       ClockStrobe
       decfsz  Dlay,F
       goto    NOLoop1

       bsf     LCDData                 ;Put out the Gate bit
       ClockStrobe

       bcf     LCDData                 ;Put out the RS bit
       rlf     PORTA,F
       ClockStrobe
       movlw   4
       movwf   Dlay
NOLoop2
       rlf     NOTemp,F
       bcf     LCDData
       rlf     PORTA,F
       ClockStrobe
       decfsz  Dlay,F
       goto    NOLoop2

       EStrobe
       return

Dlay160
       movlw   0xD8            ;256 - ( 160 / 4 )
       addlw   1
       btfss   STATUS,C
       goto    $-2
       return

Dlay5
       movlw   4
       movwf   Dlay
       movlw   0x18            ;256 - 0x0E8
       addlw   1
       btfsc   STATUS,Z
       decfsz  Dlay,F
       goto    $-3
       return

       end

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics


2001\02\27@152258 by Drew Vassallo

picon face
See comments where added:

>         call    ResetLCD

To be safe, you can send a cursor position command here.
i.e.,
         movlw   0x80   ; position line 1 column 0
         call  SendLCDINST

{Quote hidden}

These literals should all be 'X', not "X".  This is likely your biggest
problem.

>         bcf     STATUS,C                ;clear the carry flag (//WHY?)
>         movlw   0x03                    ;reset command (//Is this right?
>Should be 0x30?)

You clear the carry flag because it's an instruction, not data.  0x03 is
correct, not 0x30.

<SNIP>
>NybbleOut
>         movwf   NOTemp                  ;save the nybble to shift out
>         swapf   NOTemp,F

You can ensure that the shift register is REALLY cleared by making sure the
data bit is clear before sending all 6 bits to the shift register.
i.e.,
         bcf  LCDData

>         movlw   6                       ;clear the shift register
>         movwf   Dlay
>NOLoop1
>         ClockStrobe
>         decfsz  Dlay,F
>         goto    NOLoop1
>
<SNIP>

Try these changes.  They should help.

--Andrew
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics


2001\02\27@153122 by Drew Vassallo

picon face
One more thing about your LCD code:

The way Myke has his program set up, you MUST use Clock as PORTA, 1 and Data
as PORTA, 0.  This is because he shifts the data bits left into Carry and
then shifts again left into PORTA.  Also, he clears the Data bit before the
shift in order to force the Clock line low.  If you define your port control
lines differently (I don't remember if you did or not), then his code won't
work out-of-the-box.

Myke should probably have noted that in his code, but he didn't.

--Andrew
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics



'[PIC]: Getting 2-wire LCD interface to work (newbi'
2001\03\01@141423 by mmucker
flavicon
face
Drew,

Once again I wanted to thank you for taking the time to review my LCD code.

I finally found the source of the problem.  After many hours of frustrating
debugging work, I determined that the contacts on my breadboard were not
gripping pin RA.0, so the data was being properly output to the PIC pin, but
not making it to the shift register.  Holding the data line against the pin
instead of putting it in the breadboard caused my message to be properly
displayed on the LCD.

So, it wasn't the software, it wasn't the circuit, it was bad tools!

Thanks again,

-Matt

> {Original Message removed}

2001\03\01@191601 by miked

flavicon
face
>
> These literals should all be 'X', not "X".  This is likely your biggest
> problem.
>
Speaking of, how does one use the literal for ' ?
MPASM doesn't like movlw '''
I know I can just use the hex value.

--
http://www.piclist.com#nomail Going offline? Don't AutoReply us!
email TakeThisOuTlistservspamspammitvma.mit.edu with SET PICList DIGEST in the body



'[PIC:] Minimal LCD Interface, was Not about Olin,'
2004\02\17@095241 by Alan B. Pearce
face picon face
Or then there is the 2 wire version done by our own Myke Predko.
http://www.rentron.com/Myke1.htm

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics

2004\02\17@095241 by Alan B. Pearce

face picon face
Or then there is the 2 wire version done by our own Myke Predko.
http://www.rentron.com/Myke1.htm

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics

2004\02\17@124907 by Jim Franklin

flavicon
face
Hi Guys,

The move from being a lurker to a poster has really enlightened me; I didn't
expect this many excellent replies in such a short time span.

I have looked at Myke Predko's shift register interface, but wanted to move
some of the "smarts" away from the main PIC. I suppose that now I am using a
"real" C compiler to develop in, I could dispense with the master/slave
altogether.
The coding and interface stuff works ok on the breadboard, and the hardwired
test kit. So I may follow this route, even if just for an educational
excercise. I am using serial comms between the two processors, and it seems
to be stable and reliable enough for the task, (it is only at 9600 baud).
The master is running at 20MHz and the slave is at 4MHz, but again that is
irrelevant at the baud rates involved.
I have started to fillup the slave ROM with code now though, and have some
nice (even if I say it myself) little routines and control language between
them.

Regards
Jim



{Original Message removed}

2004\02\17@124907 by Jim Franklin

flavicon
face
Hi Guys,

The move from being a lurker to a poster has really enlightened me; I didn't
expect this many excellent replies in such a short time span.

I have looked at Myke Predko's shift register interface, but wanted to move
some of the "smarts" away from the main PIC. I suppose that now I am using a
"real" C compiler to develop in, I could dispense with the master/slave
altogether.
The coding and interface stuff works ok on the breadboard, and the hardwired
test kit. So I may follow this route, even if just for an educational
excercise. I am using serial comms between the two processors, and it seems
to be stable and reliable enough for the task, (it is only at 9600 baud).
The master is running at 20MHz and the slave is at 4MHz, but again that is
irrelevant at the baud rates involved.
I have started to fillup the slave ROM with code now though, and have some
nice (even if I say it myself) little routines and control language between
them.

Regards
Jim



{Original Message removed}

2004\02\17@190402 by Philip Pemberton

face picon face
In message <033201c3f565$7dc83280$e7bdf682EraseMEspamspace.rl.ac.uk>
         "Alan B. Pearce" <RemoveMEA.B.PearceEraseMEspamspam_OUTRL.AC.UK> wrote:

> Or then there is the 2 wire version done by our own Myke Predko.
> http://www.rentron.com/Myke1.htm
I submitted one to EPE (Everyday Practical Electronics) magazins, along with
my method for scanning and enhancing PCB diagrams printed in the magazines.
The scan/enhance trick got me a "Letter of the Month" award (for that issue)
and a Peak "Atlas LCR" LCR meter. Heh.
I *think* my LCD code is up on the Piclist website - "Universal LCD
controller library". Failing that, ask me nicely and I'll drag my laptop out
and send the code to whoever wants it. Speaking of which, I've probably still
got my SHT11 sensor driver code, too :)

Later.
--
Phil.                              | Acorn Risc PC600 Mk3, SA202, 64MB, 6GB,
@spam@philpemRemoveMEspamEraseMEdsl.pipex.com              | ViewFinder, 10BaseT Ethernet, 2-slice,
http://www.philpem.dsl.pipex.com/  | 48xCD, ARCINv6c IDE, SCSI
... Error 216: Tagline out of paper

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics

2004\02\17@234202 by Norris Smith

picon face
Could you post the scan/enhance pcb trick or a link thereto?

Thanks, Norris



Philip Pemberton wrote:

{Quote hidden}

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics

2004\02\17@235446 by Stephen D. Barnes

flavicon
face
I would be interested in the SHT11 code!

Regards,
Stephen D. Barnes


{Quote hidden}

--
http://www.piclist.com hint: The list server can filter out subtopics
(like ads or off topics) for you. See http://www.piclist.com/#topics

2004\02\18@074845 by Howard Winter

face
flavicon
picon face
Phil,

On Wed, 18 Feb 2004 00:00:44 GMT, Philip Pemberton
wrote:
> I submitted one to EPE (Everyday Practical
Electronics) magazins, along with
> my method for scanning and enhancing PCB diagrams
printed in the magazines.
> The scan/enhance trick got me a "Letter of the Month"
award (for that issue)
> and a Peak "Atlas LCR" LCR meter. Heh.

What issue was this, please?

I love the Atlas devices - I have the full set.  Had to
pay full prive for them, though...  I even suggested to
them the "numbered" terminators for the CAT5 tester,
when one of the ones I had gave a fault on one wire,
which indicated that it was the one I was "seeing".
They didn't even give me a replacement for the faulty
terminator, but brought out the numbered ones as a
product some time later!

Cheers,

Howard Winter
St.Albans, England

--
http://www.piclist.com hint: The PICList is archived three different
ways.  See http://www.piclist.com/#archives for details.


'[PIC] 3V3 to 5V LCD interface'
2005\06\28@034129 by Groups
flavicon
face
I need to interface a micro driven by 3.3V to an LCD that is powered from
5V.

Would series resistors in the signal lines be sufficient to prevent the
internal
feedthrough of 5V in the LCD effecting the micro port pins ?

Last time I did this, I inadvertently connected the micro pins direct to LCD
and noticed
distortion during the signal transitions (though the display seemed to work
ok and micro was
doing all it should have).

I suspect if the signal is current limited it would prevent this ?

Thanks in advance.



2005\06\28@090234 by alan smith

picon face
Would it be easier to run the PIC at 5V?  Essentially if you are driving OUT from the PIC, your levels are going to be lower than a 5V TTL but should still be sufficient to drive it.  Putting series resistors in would be for a termination issue, not to drop the voltage.  If you are really worried about it, there are several voltage translators out there where you can drive I/O from one to another.  784LVX series I think....?  Try a search on Fairchilds site for them

Groups <.....groupsRemoveMEspamorbitcoms.com> wrote:I need to interface a micro driven by 3.3V to an LCD that is powered from
5V.

Would series resistors in the signal lines be sufficient to prevent the
internal
feedthrough of 5V in the LCD effecting the micro port pins ?

Last time I did this, I inadvertently connected the micro pins direct to LCD
and noticed
distortion during the signal transitions (though the display seemed to work
ok and micro was
doing all it should have).

I suspect if the signal is current limited it would prevent this ?

Thanks in advance.



2005\06\28@091944 by Alan B. Pearce

face picon face
>I need to interface a micro driven by 3.3V to an LCD
>that is powered from 5V.

Maxim make some translator chips. IIRC there is also a version of the HC245
chip which is TTL levels, but runs from a 5V supply, which would do it if
run from the LCD supply.

2005\06\28@092530 by Groups

flavicon
face
The reason the micro is running on 3.3V is because the rest of the circuit
is running 3.3V (memory, Radio circuitry, coms interface etc).

The LCD is the only 5V device in the project. The LCDs are Plasma displays
and I am unable to obtain 3V supply versions of them yet readily
and at reasonable cost and low MOQ.

The idea of the resistors was to act as a current limit. (As long as they
were not so
high in value that they could not pull the Data lines of the LCD to 0V).

The LCD inputs can handle being driven at 3V no problem. My main concern is
that 5V internally in the LCD seems to be feeding back through the signal
pins.

Kind Regards

David Huisman
-----------------------------------------------------------------------
ORBIT COMMUNICATIONS Pty Ltd - Wireless Solutions that Work
(Telemetry, Control, Monitoring, Security, HVAC ...)
A.C.N. 107 441 869


Website : http://www.orbitcoms.com

{Original Message removed}

2005\06\28@093819 by Peter Onion

flavicon
face
On Tue, 2005-06-28 at 23:21 +1000, Groups wrote:

> The LCD inputs can handle being driven at 3V no problem. My main concern is
> that 5V internally in the LCD seems to be feeding back through the signal
> pins.

I think this because the PIC pins have protection diodes to Gnd and Vcc.
The 5v logic signals from the LCD will try and pull the PIC Vcc up to 5v
via these diodes.  

A series resistor on each line will allow the diodes to clamp the levels
on the PIC pins to 3v3 without drawing excessive current from the LCD
signal drivers.

Peter

2005\06\28@095737 by Jan-Erik Soderholm

face picon face
> A series resistor on each line will allow the diodes to clamp
> the
levels
> on the PIC pins to 3v3 without drawing excessive current from
the LCD
> signal drivers.

But, designing in the use of the
clamping/protecton diods,
is a bad idea, isn't it ?

Maybe just a
resistor based voltage divider 5V -> 3.3 V ?

Jan-Erik

>
> Peter
>
>
--

2005\06\28@100937 by Peter Onion

flavicon
face
On Tue, 2005-06-28 at 15:57 +0200, Jan-Erik Soderholm wrote:

> But, designing in the use of the
> clamping/protecton diods,
> is a bad idea, isn't it ?
>
> Maybe just a
> resistor based voltage divider 5V -> 3.3 V ?

I take your point.  I was assuming the pins were bidirectional so I
dismissed the idea of a divider, but on reflection it wouldn't matter
anyway.

Peter



2005\06\28@192710 by Groups

flavicon
face
Thanks for the feedback on this issue.



Kind Regards

David Huisman
-----------------------------------------------------------------------
ORBIT COMMUNICATIONS Pty Ltd - Wireless Solutions that Work
(Telemetry, Control, Monitoring, Security, HVAC ...)
A.C.N. 107 441 869


Website : http://www.orbitcoms.com
PO Box 4474 Lakehaven
NSW 2263, AUSTRALIA
Phone: 61-2-4393-3627
Fax  : 61-2-4393-3685
Mobile: 61-413-715-986

{Original Message removed}

2005\06\29@090334 by alan smith

picon face
To make the design as bullet proof as possible.....best to use a translator of some sort.  I am currently using  some 74LCX07 parts to do much the same.  PIC drives out to these OD buffers, so just adding the pullup on the output does the job.  When you assert a high on the input, it drives them to ground.  I'm interfacing the PIC that is running on 3.3V to logic running on 1.2V, 1.8V,2.5V.  This part should work fine for you since your not doing any bi-directional stuff.

Groups <.....groupsSTOPspamspam@spam@orbitcoms.com> wrote:Thanks for the feedback on this issue.



Kind Regards

David Huisman
-----------------------------------------------------------------------
ORBIT COMMUNICATIONS Pty Ltd - Wireless Solutions that Work
(Telemetry, Control, Monitoring, Security, HVAC ...)
A.C.N. 107 441 869


Website : http://www.orbitcoms.com
PO Box 4474 Lakehaven
NSW 2263, AUSTRALIA
Phone: 61-2-4393-3627
Fax : 61-2-4393-3685
Mobile: 61-413-715-986

{Original Message removed}

2005\06\29@104040 by Gerhard Fiedler

picon face
Groups wrote:

> Thanks for the feedback on this issue.

I always find it very interesting when the OP posts his conclusions, and
possibly the solution finally used (where applicable).

Gerhard


'[PIC] 8 x 2 LCD Interface Data Display Problem for'
2006\05\12@101735 by Patrick Desmond
picon face
Hello,

this is my first post to the list. I have a question about editing a ASM
file using Microchip's MPLAB IDE 7.3. I have been working with an ASM file
using the PIC 16F84A microchip. The code is written to sense RPM's of a
micro turbine engine, and test servo units. I did not write the original
file. Currently I can only display from 0 - 99,999 RPM's. I have been told
that the chip can count the piulses for an infinite number. I want to change
the program to display more than 100K. The LCD module I'm using is an 8 X 2
using a HD44780U controller.  The first line displays the 5 digits and the 3
letters "RPM" The second line displays a selectable number of blades from
2 - 5 with the letters "bs" after the numbers. I'm just learning about
editing code, programming chip's and converting ASM to HEX files, but at
this point I'm stuck and can't seem to get any further. Can anyone off some
assistance in editing this ASM file? I've included the ASM with this post
for reference and examination. Thanks for your help in advance.

Patrick

       LIST    P=16F84A,R=HEX
;
;       LCD TACHOMETER FOR R/C MODEL TURBINE ENGINE
;       DESMOND, P
;
; VERSION 3.25: 05/11/2006 UPDATE FOR KJ66
; VERSION 3.24: 1/19/2005  FIX BUG, REC_T CRASH AT 1500uS
; VERSION 3.22: 09/27/2004  MENU, 8*2 LCD,(B) BLADES SECECT
; VERSION 3.2: 09/08/2004  RA,4 CONTROLL +5V OUTPUT
;   VERSION 3.1: 09/04/2004  LEAVES SELECT
; VERSION 3.0: 08/30/2004  ADD REC_T V1 FOR RECEIVER TESTING
; VERSION 2.0: 08/26/2004  ADD MID & RANDOM MODES
;   VERSION 1.0: 08/25/2004
;
;-------SYSTEM---------------------
__CONFIG H'3FF1'
;-------DEFINE RAM------------
TMR0 EQU 1  ;TIMER 0
PC      EQU 2           ;PROGRAM COUNTER
STATUS  EQU 3
FSR     EQU 4           ;BUFFER OF INDIRECT ADDR
RA      EQU 5
RB      EQU 6
EEDATA  EQU 8           ;EEPROM DATA
EEADR   EQU 9           ;EEPROM ADDR
PCLATH  EQU H'A'
INTCON  EQU H'B'        ;INTERRUPT CONTROL
OPTIONF EQU 1           ;0X81
TRISA   EQU 5           ;0X85
TRISB   EQU 6           ;0X86
EECON1  EQU 8           ;0X88 IS EEPROM CONTROL1
EECON2  EQU 9           ;0X89 IS EEPROM CONTROL2

;-------DEFINE BIT-------------
;
C EQU 0
W       EQU 0           ;d VALUE FOR INCF......
F       EQU 1           ;d VALUE
OFF     EQU 0           ;FLAG BIT 0,
RP0     EQU 5           ;STATUS BIT 5 & 6 =REGISTER BANK SELECT
RP1     EQU 6
INPUT   EQU 7           ;RB7 AS INPUT PORT
TOIF    EQU 2           ;INTCON TMR0 OVERLOW INT FLAG
TOIE    EQU 5           ;INTCON TOIF ENABLE
GIE     EQU 7           ;INTCON GLOBAL INT ENABLE

;-------USER-------------------------------------
;-------REGISTERS------
;
TCNT0   EQU H'C'        ;= (0.6SEC /INT* PRESCAL*CLOCK)
INTR0   EQU H'D'        ;AFTER INT, SAVE W VALUE
INTR1   EQU H'E'        ;AFTER INT, SAVE STATUS
DD1     EQU H'F'        ;DATA FOR INPUT RPM
DD2  EQU H'10'
DD3     EQU H'11'
TEMP1   EQU H'12'       ;
TEMP2   EQU H'13'
TEMP3   EQU H'14'
SLOW_C EQU H'15' ;100-200 +- 1 EVERY INT_DST
INT_C EQU H'16' ;0-255 -1 EVERY INT_DST
FLAG_REG EQU H'17'
MODE_SEL EQU H'18'
PWM_C EQU H'19'
PUSH_C EQU H'1A'
RAND_HI EQU H'1B'
RAND_LO EQU H'1C'
TCNT EQU H'1D'

;-------BIT----------------
F_ON EQU 0
F_UP EQU 1
F_TDST EQU 2
F_REC EQU 3
TACHO_SEL EQU 4
;
;-------VARIABLES-----------
;
TMR     EQU D'181'      ;(PRESCALE 64*1uS) * 75 = 4800 uS
TCNT_2    EQU D'125'    ;4.8mS*125=600mS,BUT FIX SOME ODD CODE
TCNT_3    EQU D'84'   ;THIS TWO * PRESCALE 1:64,TO A 0.6 SECOND DURATION
TCNT_4    EQU D'62'
TCNT_5    EQU D'50'
BDELAY EQU D'40'
TMR1    EQU D'178'      ;(PRESCALE 256*78) = 19968 uS

RLIMIT EQU D'200' ;SERVO LIMIT
LLIMIT EQU D'100'

;-------LCD SOUTINE-------------------------
;-------REGISTERS---------
;
ADDRESS1 EQU H'41'
CHAR1  EQU H'42'
TEMP1_LCD EQU H'43'
TEMP2_LCD EQU H'44'
TEMP3_LCD EQU H'45'
TEMP4_LCD EQU H'46'
TABLE_INDEX EQU H'47' ;
;
;==========   MAIN PROGRAM   =========
;
       ORG     0
       GOTO    START
;----------------------------------------
;
ORG 4  ;INTERRUPT BEGIN

INTB    MOVWF   INTR0           ; SAVE W
       MOVF    STATUS,W        ; SAVE STATUS
       MOVWF   INTR1
       BCF     STATUS,RP0      ; MAKE SURE SELECT BANK0
CHECK_TDST
BTFSC FLAG_REG,F_TDST ;IF SET GOTO DST MODE
GOTO  INT_DST

;----------------------------------
;----- TACHOMETER INTERRUPT -----------

INT_TACHO
       MOVLW   TMR             ; RESTORE TIMER0
       MOVWF   TMR0            ;
       DECFSZ  TCNT0,F         ;SKIP IF ZERO
       GOTO    INTEND
RELOAD  MOVF    TCNT,W            ;RELOAD TCNT0
       MOVWF   TCNT0
;---------------------------------------------------
DISP_RPM
MOVLW   H'0'
       CALL    DDRAM_ADDRESS
       MOVLW   B'00110000'
       IORWF   DD1,1
       IORWF   DD2,1
       IORWF   DD3,1
       MOVFW   DD1
       CALL    PRINT_CHAR
       MOVFW   DD2
       CALL    PRINT_CHAR
       MOVFW   DD3
       CALL    PRINT_CHAR
 MOVLW   '0'
       CALL    PRINT_CHAR
 MOVLW   '0'
       CALL    PRINT_CHAR
    MOVLW   'R'
       CALL    PRINT_CHAR
       MOVLW   'P'
       CALL    PRINT_CHAR
       MOVLW   'M'
       CALL    PRINT_CHAR
RESET_COUNT
CLRF    DD1             ;DISPLAY DATA
       CLRF    DD2
       CLRF    DD3


;------ LEAF MODE SELECT --------
BTFSS RA,1  ;SELECT ?
BSF FLAG_REG,TACHO_SEL
MOVLW   TMR             ; RESTORE TIMER0
       MOVWF   TMR0            ;
GOTO INTEND

;------ END OF TACHO INT ---------





;---------------------------------
INT_DST
MOVLW   TMR1            ;256*78=19968 uS
MOVWF TMR0
MOVF PWM_C,W
MOVWF  TEMP1
;-------------------------------------
BIN2BCD MOVWF DD3  ;1
CLRF DD2  ;10
CLRF DD1  ;100

H1 MOVLW 0X64  ; 100
SUBWF DD3,F  ; SUBTRACT 100 FROM NUMBER
BTFSC STATUS,C ; NEGATIVE RESULT?
GOTO H2  ; NO? GOTO H2
GOTO H3  ; YES? GOTO H3 (100'S DDD3)
H2 INCF DD1,F  ; INCREMENT DD1 REGISTER
GOTO H1  ; & LOOP BACK FOR ANOTHER TEST
H3 MOVLW 0X64  ; 100
ADDWF DD3,F  ; ADD 100 BACK TO NUMBER

T1 MOVLW 0X0A  ; 10
SUBWF DD3,F  ; SUBTRACT 10 FROM NUMBER
BTFSC STATUS,C ; NEGATIVE RESULT?
GOTO T2  ; NO? GOTO T2
GOTO T3  ; YES? GOTO T3 (10'S DDD3)
T2 INCF DD2,F  ; INCREMENT DD2 REGISTER
GOTO T1  ; & LOOP BACK FOR ANOTHER TEST
T3 MOVLW 0X0A  ; 10
ADDWF DD3,F  ; ADD 10 BACK TO NUMBER
;--------------------------------------------------
MOVLW   H'40'
       CALL    DDRAM_ADDRESS
MOVLW   B'00110000'
       IORWF   DD1,1
       IORWF   DD2,1
       IORWF   DD3,1
MOVLW   ' '
       CALL    PRINT_CHAR
MOVFW   DD1
       CALL    PRINT_CHAR
       MOVFW   DD2
       CALL    PRINT_CHAR
       MOVFW   DD3
       CALL    PRINT_CHAR
       MOVLW   '0'
       CALL    PRINT_CHAR
MOVLW   ' '
       CALL    PRINT_CHAR
MOVLW   'u'
       CALL    PRINT_CHAR
       MOVLW   'S'
       CALL    PRINT_CHAR
BTFSC FLAG_REG,F_REC
GOTO INTEND
BSF RA,3
INT_DST1   ;10 uS LOOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ TEMP1,F
GOTO INT_DST1 ;END OF LOOP
BCF RA,3
DECF INT_C,F  ;INCREASE INT_COUNTER

;-------------------------------------
INTEND
MOVF    INTR1,W         ; RESTORE STATUS
       MOVWF   STATUS
       MOVF    INTR0,W         ; RESTORE W
       BCF     INTCON,TOIF     ; RESET FLAG OF INT T0
       RETFIE
;
;
;-------------------------------------------------
;============================================
;LCD SOUTINE

;==============================================================
PRINT_DATA
BSF RB,2  ;RS=1, DATA
MOVWF   ADDRESS1
BSF ADDRESS1,2
MOVF ADDRESS1,0
MOVWF   RB
BSF     RB,3
NOP
       BCF     RB,3
       CALL    LOOP_S  ;100 uS
       RETURN

PRINT_CONT
MOVWF   RB
BSF     RB,3
       BCF     RB,3
       CALL    LOOP_S  ;100 uS
       RETURN

CLEAR_DISPLAY
       MOVLW   B'00000000' ;0
       CALL PRINT_CONT
       MOVLW   B'00010000' ;1 CLEAR
       CALL PRINT_CONT
MOVLW   1
       CALL    LOOP_L  ;10mS
       RETURN

DDRAM_ADDRESS
       MOVWF   ADDRESS1
BSF ADDRESS1,7
MOVF ADDRESS1,0
       ANDLW   B'11110000'     ;
       CALL    PRINT_CONT
       SWAPF   ADDRESS1,W ;SWAP HALVES F
       ANDLW   B'11110000'     ;
       CALL    PRINT_CONT
RETURN

PRINT_CHAR
       MOVWF   CHAR1
   ANDLW   B'11110000'     ;
       CALL    PRINT_DATA
       SWAPF   CHAR1,W  ;SWAP HALVES F
       ANDLW   B'11110000'     ;SENT LOW 4 BITS
       CALL    PRINT_DATA
       RETURN

LOOP_S    ;100uS LOOP
       MOVLW D'33'
MOVWF   TEMP4_LCD
LOOP_S1
       DECFSZ  TEMP4_LCD,1 ;
       GOTO    LOOP_S1
RETURN

LOOP_L    ;10 mS LOOP
MOVWF   TEMP1_LCD
LOOP_L1
MOVLW D'10'  ;10 mS
MOVWF   TEMP2_LCD
LOOP_L2
MOVLW D'249'  ;(249*4)+5=1001
MOVWF   TEMP3_LCD
LOOP_L3
       NOP
DECFSZ  TEMP3_LCD,1
       GOTO    LOOP_L3
DECFSZ    TEMP2_LCD,1
       GOTO    LOOP_L2
DECFSZ    TEMP1_LCD,1
       GOTO LOOP_L1
RETURN

DISP_MESSAGE
MOVWF   TABLE_INDEX ;W -> INDEX, THE BEGIN OF MESSAGE
       CALL    MESSAGE1
       ANDLW   0FFH
       SKPNZ          ; IF TABLE RETURN 0 , END OF MESSAGE SECTION
       RETURN
       CALL    PRINT_CHAR ; DOSPLAY
  INCF    TABLE_INDEX,0
GOTO    DISP_MESSAGE
;====================================================
MODE_ADDRESS

       ADDWF   PC,F
       RETLW   0
RETLW   0
       RETLW   D'9'
       RETLW   D'18'
       RETLW   D'27'

MESSAGE1

       ADDWF   PC,F
       RETLW   'T'
       RETLW   'a'
       RETLW   'c'
       RETLW   'h'
       RETLW   'o'
       RETLW   ' '
       RETLW   ' '
       RETLW   ' '
       RETLW   0
RETLW   'S' ;9
       RETLW   'e'
       RETLW   'r'
       RETLW   'v'
RETLW   'o'
       RETLW   ' '
RETLW   'T'
       RETLW   'x'
RETLW   0
RETLW   'S' ;18
       RETLW   'p'
       RETLW   'e'
       RETLW   'e'
RETLW   'd'
       RETLW   ' '
RETLW   'T'
       RETLW   'x'
       RETLW   0
RETLW   'R' ;27
       RETLW   'e'
RETLW   'c'
       RETLW   'e'
       RETLW   'i'
       RETLW   'v'
RETLW   'e'
RETLW   'r'
RETLW   0

NOP  ;36


;=======================================
;---------- PROGRAM BEGIN -----------
;----------------------------------------
;

START
BSF     STATUS,RP0      ;SET 3,5 ENABLE BANK1
       MOVLW  B'00000001'
       MOVWF  TRISB  ;SET RB 1-7 OUTPUT, 0 INPUT
       MOVLW  B'00000111'
       MOVWF  TRISA      ;SET RA0-RA2 INTPUT, RA3,RA4 OUTPUT
BCF     STATUS,RP0      ;ENABLE BANK0
BCF RA,3  ;OUT PWM
BSF RA,4  ;OUT +5V OFF
CLRF  RB
       BCF INTCON,GIE
CLRF FLAG_REG
MOVLW D'150'
MOVWF PWM_C

INIT_LCD
MOVLW 5  ;POWER ON DELAY 50mS
CALL  LOOP_L
SET_4BIT_MOD   ;SET LCD AT 4 BIT MODEL
       MOVLW   B'00110000' ;3
CALL PRINT_CONT
       MOVLW   1
       CALL    LOOP_L  ;10mS
       MOVLW   B'00110000' ;3
       CALL PRINT_CONT
       MOVLW   B'00110000' ;3
CALL PRINT_CONT
       MOVLW   B'00100000' ;2, 4BIT MODE
       CALL PRINT_CONT
       MOVLW   B'00100000' ;2
       CALL PRINT_CONT
       MOVLW   B'10000000' ;8 4BITS, 2 LINES, FONT 0
       CALL PRINT_CONT

INIT_DISPLAY
       MOVLW   B'00000000' ;O
       CALL PRINT_CONT
       MOVLW   B'11000000' ;C SCREEN ON, NO CURSOR, NO BLINKING
       CALL PRINT_CONT
CALL CLEAR_DISPLAY ;CLEAR DISPLAY


MOVLW  ' '
CALL    PRINT_CHAR
MOVLW  'K'
CALL    PRINT_CHAR
MOVLW  'J'  ;DISPLAY FIRST SECTION MESSAGE
CALL    PRINT_CHAR
MOVLW  '-'
CALL    PRINT_CHAR
MOVLW  '6'
CALL    PRINT_CHAR
MOVLW  '6'
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR


MOVLW H'40'
CALL DDRAM_ADDRESS
MOVLW  'D'
CALL    PRINT_CHAR
MOVLW  'S'
CALL    PRINT_CHAR
MOVLW  'T'
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR
MOVLW  'V'
CALL    PRINT_CHAR
MOVLW  '3'
CALL    PRINT_CHAR
MOVLW  '.'
CALL    PRINT_CHAR
MOVLW  '2'
CALL    PRINT_CHAR

MOVLW D'150'
CALL LOOP_L  ;DELAY 3.0 SECOND

CLRF MODE_SEL
INCF MODE_SEL,F
;------------------------------------------
MMODE_00
MOVLW H'40'
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS ;GET MODE NAME BEGINING
CALL  DISP_MESSAGE ;DISPLAY MODE NAME
MOVLW D'50'
CALL  LOOP_L  ;1.0 SECOND CHANGE MODE
BTFSS RA,1
GOTO MMODE_01 ;+ PUSH, NEXT MODE
BTFSS RA,0
GOTO MMODE_02 ;SELECT PUSH,

GOTO MMODE_00
MMODE_01
INCF MODE_SEL,F
MOVLW 5  ;MODE_SEL 1-4 ONLY
SUBWF MODE_SEL,W
SKPZ
GOTO MMODE_00
MOVLW 1
MOVWF MODE_SEL
GOTO MMODE_00
MMODE_02

;-------ON MODE_SEL GOTO----------
MOVLW 1
SUBWF MODE_SEL,W
SKPNZ
GOTO MAIN  ;1 TACHO
MOVLW 2
SUBWF MODE_SEL,W
SKPNZ
GOTO DST_MAIN ;2 DST
MOVLW 3
SUBWF MODE_SEL,W
SKPNZ
GOTO SCT_MAIN ;3 SCT
MOVLW 4
SUBWF MODE_SEL,W
SKPNZ
GOTO RECT_MAIN ;4 RECT
;------------------------------------









;-------------------------------------------
MAIN
BSF RA,4  ;OUT +5V OFF
CALL CLEAR_DISPLAY ;CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS
MOVLW 1
CALL MODE_ADDRESS ;GET MODE NAME BEGINING
CALL  DISP_MESSAGE ;DISPLAY MODE NAME

BSF     STATUS,RP0      ;SET 3,5 ENABLE BANK1
       MOVLW  B'10000101'
       MOVWF   OPTIONF         ;INTERNAT CLOCK,TRM0,1:64
BCF     STATUS,RP0      ;ENABLE BANK0
CLRF    DD1             ;DISPLAY DATA
       CLRF    DD2
       CLRF    DD3
MOVLW  1  ;DEFAULT 2 LEAVES
MOVWF  MODE_SEL
GOTO  T_SEL
MAIN01
       MOVLW   TMR             ;75
MOVWF TMR0
MOVLW TCNT  ;DEPEND ON LEAVES
MOVWF TCNT0
BCF INTCON,TOIF
BSF INTCON,TOIE
BSF INTCON,GIE ;ENABLE INT
;----------------------------------
MAIN1
BTFSC FLAG_REG,TACHO_SEL
GOTO T_SEL
BTFSS RA,2
GOTO START
BTFSC   RB,0            ;IF INPUT=0, SKIP
GOTO MAIN1
MAIN2
BTFSC FLAG_REG,TACHO_SEL
GOTO T_SEL
BTFSS RA,2
GOTO START
BTFSS RB,0  ;IF INPUT=1, SKIP
GOTO  MAIN2
MAIN3   INCF    DD3,F
MOVLW H'0A'
       SUBWF   DD3,W
       SKPZ                    ;DIGITAL 1 =A, MUST AJUST
       GOTO    MAIN1
       CLRF    DD3
       INCF    DD2,F
MOVLW H'0A'
       SUBWF   DD2,W
       SKPZ                    ;DIGITAL 1 =A, MUST AJUST
       GOTO    MAIN1
       CLRF    DD2
       INCF    DD1,F           ;DIGITAL 3 WILL NOT >9, SO NO CHECK
       GOTO    MAIN1

;------------------------------------
;------ TACHO MODE SELECT -----------
T_SEL
BCF FLAG_REG,TACHO_SEL
BCF INTCON,GIE
INCF  MODE_SEL,F
MOVLW 6  ;MODE_SEL 2-5 ONLY
SUBWF MODE_SEL,W
SKPZ
GOTO T_SEL1
MOVLW 2
MOVWF MODE_SEL
T_SEL1
MOVLW H'40'
CALL DDRAM_ADDRESS
MOVLW H'30'  ;CONVERT HEX TO ASCII
ADDWF MODE_SEL,W ;CONVERT HEX TO ASCII
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR
MOVLW  'B'
CALL    PRINT_CHAR
MOVLW  's'
CALL    PRINT_CHAR

;-------ON MODE_SEL GOTO----------
MOVLW 2
SUBWF MODE_SEL,W
SKPNZ
GOTO TMODE_2  ;2 LEAVES
MOVLW 3
SUBWF MODE_SEL,W
SKPNZ
GOTO TMODE_3  ;3
MOVLW 4
SUBWF MODE_SEL,W
SKPNZ
GOTO TMODE_4  ;4
;------------------------------------
TMODE_5    ;5
MOVLW  TCNT_5
MOVWF TCNT
GOTO T_SEL_5
TMODE_4
MOVLW  TCNT_4
MOVWF TCNT
GOTO T_SEL_5
TMODE_3
MOVLW  TCNT_3
MOVWF TCNT
GOTO T_SEL_5
TMODE_2
MOVLW  TCNT_2
MOVWF TCNT
GOTO T_SEL_5
T_SEL_5
MOVLW D'50'  ;0.01 SECOND *50
CALL LOOP_L
BTFSS RA,1
GOTO T_SEL  ;CHANGE MODE
GOTO MAIN01

;------ END OF TACHOMETER --------------








;====================================================
DST_MAIN
BCF RA,4  ;OUT +5V TURN ON
BSF FLAG_REG,F_TDST ;IF SET GOTO DST MODE
CALL CLEAR_DISPLAY ;CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS

;-------SETUP_INTERRUPT-------

BSF     STATUS,RP0      ;SET 3,5 ENABLE BANK1
       MOVLW  B'10000111'
       MOVWF   OPTIONF         ;INTERNAT CLOCK,TRM0,1:256
BCF     STATUS,RP0      ;ENABLE BANK0
MOVLW   TMR1            ;256*78=19968 uS
MOVWF TMR0
BCF INTCON,TOIF
BSF INTCON,TOIE
BSF INTCON,GIE ;ENABLE INT


CLRF  MODE_SEL
;-----------------------------------------------
MODE_0
INCF  MODE_SEL,F
MOVLW 7  ;MODE_SEL 1-5 ONLY
SUBWF MODE_SEL,W
SKPZ
GOTO MODE_01
MOVLW 1
MOVWF MODE_SEL

;-------ON MODE_SEL GOTO----------
MODE_01
MOVLW 1
SUBWF MODE_SEL,W
SKPNZ
GOTO MODE_1  ;MANUAL
MOVLW 2
SUBWF MODE_SEL,W
SKPNZ
GOTO MODE_3  ;FSAT
MOVLW 3
SUBWF MODE_SEL,W
SKPNZ
GOTO MODE_4  ;MIDDLE
MOVLW 4
SUBWF MODE_SEL,W
SKPNZ
GOTO MODE_2  ;SLOW
MOVLW 5
SUBWF MODE_SEL,W
SKPNZ
GOTO MODE_5  ;RANDOM
GOTO MODE_6  ;ESCAPE
;-------------------------------------------------
MODE_1
MOVLW  H'0'
CALL DDRAM_ADDRESS
MOVLW  'M'
CALL    PRINT_CHAR
MOVLW  'a'
CALL    PRINT_CHAR
MOVLW  'n'
CALL    PRINT_CHAR
MOVLW  'u'
CALL    PRINT_CHAR
MOVLW  'a'
CALL    PRINT_CHAR
MOVLW  'l'
CALL    PRINT_CHAR
MOVLW BDELAY
CALL LOOP_L
MODE_10
MOVLW D'150'
MOVWF PWM_C
MODE_11
BTFSS RA,0
GOTO  INC_B
BTFSS RA,2
GOTO DEC_B
BTFSS RA,1
GOTO CENT_B
CLRF PUSH_C
GOTO MODE_11
INC_B MOVLW RLIMIT
SUBWF PWM_C,W
SKPNZ
GOTO MODE_11  ;=RLIMIT, DO NOTHING
INCF PWM_C,F
MOVLW D'5'  ;CONTINUE 5 STEP, ACCELERATION
SUBWF PUSH_C,W
SKPNZ
GOTO INC_B1  ;
MOVLW D'20'  ;0.2 SECOND
CALL LOOP_L  ;CALL 0.1 SECOND LOOP
INCF PUSH_C,F
GOTO MODE_11
INC_B1    ;FAST INC
MOVLW D'6'
CALL LOOP_L  ;0.06 SECOND
GOTO MODE_11
DEC_B
MOVLW LLIMIT
SUBWF PWM_C,W
SKPNZ
GOTO MODE_11  ;=LLIMIT, DO NOTHING
DECF PWM_C,F
MOVLW D'5'  ;CONTINUE 5 STEP, ACCELERATION
SUBWF PUSH_C,W
SKPNZ
GOTO DEC_B1  ;
MOVLW D'20'  ;
CALL LOOP_L  ;CALL 0.1 SECOND LOOP
INCF PUSH_C,F
GOTO MODE_11
DEC_B1    ;FAST DEC
MOVLW D'6'
CALL LOOP_L  ;0.06 SECOND
GOTO MODE_11
CENT_B
MOVLW BDELAY  ;0.01 SECOND * 40
CALL LOOP_L
BTFSS RA,1
GOTO MODE_0  ;CHANGE MODE
GOTO MODE_10
;------------------------------------------------
MODE_2
MOVLW  H'0'
CALL DDRAM_ADDRESS
MOVLW  'S'
CALL    PRINT_CHAR
MOVLW  'l'
CALL    PRINT_CHAR
MOVLW  'o'
CALL    PRINT_CHAR
MOVLW  'w'
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR
MODE_20    ;SLOW 10 SECOND
MOVLW D'150'
MOVWF PWM_C
BSF FLAG_REG,F_UP
MODE_21
BTFSS RA,0
GOTO  INC_B2
BTFSS RA,2
GOTO MODE_21
BTFSS RA,1
GOTO CENT_B2
GOTO MODE_21
INC_B2
MOVLW 2  ; 2 TIMES
MOVWF PUSH_C
MOVLW 5
MOVWF INT_C
INC_B21
MOVF INT_C,W  ;5*100*20mS = 10 SECOND
SKPZ
GOTO INC_B21

MOVLW 5  ;5*100*20mS = 10 SECOND
MOVWF INT_C
BTFSS FLAG_REG,F_UP ;UP / DOWN ?
GOTO INC_B23  ;COUNT_DOWN
INC_B22
MOVLW RLIMIT  ;UP
SUBWF PWM_C,W
SKPNZ
GOTO INC_B24  ;TURN_DOWN
INCF PWM_C,F
BTFSS RA,2  ;STOP ?
GOTO MODE_21
GOTO INC_B21
INC_B24    ;TURN_DOWN
BCF FLAG_REG,F_UP
INC_B23
MOVLW LLIMIT  ;
SUBWF PWM_C,W
SKPNZ
GOTO INC_B25  ;TURN_UP
DECF PWM_C,F
BTFSS RA,2  ;STOP ?
GOTO MODE_21
GOTO INC_B21
INC_B25
BSF FLAG_REG,F_UP
DECF PUSH_C,F
SKPNZ
GOTO  MODE_21
GOTO INC_B22

CENT_B2
MOVLW BDELAY  ;0.01 SECOND * 40
CALL LOOP_L
BTFSS RA,1
GOTO MODE_0  ;CHANGE MODE
GOTO MODE_20

;------------------------
MODE_3
MOVLW  H'0'
CALL DDRAM_ADDRESS
MOVLW  'F'
CALL    PRINT_CHAR
MOVLW  'a'
CALL    PRINT_CHAR
MOVLW  's'
CALL    PRINT_CHAR
MOVLW  't'
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR     ;FAST 0.5 SECOND
MODE_30
MOVLW D'150'
MOVWF PWM_C
MODE_31
BTFSS RA,0
GOTO  INC_B3
BTFSS RA,2
GOTO MODE_31
BTFSS RA,1
GOTO CENT_B3
GOTO MODE_31
INC_B3
MOVLW 5
MOVWF PUSH_C
INC_B31
MOVLW RLIMIT
MOVWF PWM_C
BTFSS RA,2
GOTO MODE_3
MOVLW D'45'  ;0.45SECOD +22 INTERRUPT
CALL LOOP_L  ;CALL 0.1 SECOND LOOP
MOVLW LLIMIT
MOVWF PWM_C
BTFSS RA,2
GOTO MODE_3
MOVLW D'45'
CALL LOOP_L
DECFSZ PUSH_C,F
GOTO INC_B31
GOTO MODE_3

CENT_B3
MOVLW BDELAY  ;0.01 SECOND * 40
CALL LOOP_L
BTFSS RA,1
GOTO MODE_0  ;CHANGE MODE
GOTO MODE_30

;------------------------
MODE_4    ;MID 2 SECOND
MOVLW  H'0'
CALL DDRAM_ADDRESS
MOVLW  'M'
CALL    PRINT_CHAR
MOVLW  'i'
CALL    PRINT_CHAR
MOVLW  'd'
CALL    PRINT_CHAR
MOVLW  'd'
CALL    PRINT_CHAR
MOVLW  'l'
CALL    PRINT_CHAR
MOVLW  'e'
CALL    PRINT_CHAR
MODE_40
MOVLW D'150'
MOVWF PWM_C
BSF FLAG_REG,F_UP
MODE_41
BTFSS RA,0
GOTO  INC_B4
BTFSS RA,2
GOTO MODE_41
BTFSS RA,1
GOTO CENT_B4
GOTO MODE_41
INC_B4
MOVLW 5  ; 5 TIMES
MOVWF PUSH_C
MOVLW 1
MOVWF INT_C
INC_B41
MOVF INT_C,W  ;1*100*20mS = 2 SECOND
SKPZ
GOTO INC_B41

MOVLW 1  ;1*100*20mS = 2 SECOND
MOVWF INT_C
BTFSS FLAG_REG,F_UP ;UP / DOWN ?
GOTO INC_B43  ;COUNT_DOWN
INC_B42
MOVLW RLIMIT  ;UP
SUBWF PWM_C,W
SKPNZ
GOTO INC_B44  ;TURN_DOWN
INCF PWM_C,F
BTFSS RA,2  ;STOP ?
GOTO MODE_41
GOTO INC_B41
INC_B44    ;TURN_DOWN
BCF FLAG_REG,F_UP
INC_B43
MOVLW LLIMIT  ;
SUBWF PWM_C,W
SKPNZ
GOTO INC_B45  ;TURN_UP
DECF PWM_C,F
BTFSS RA,2  ;STOP ?
GOTO MODE_41
GOTO INC_B41
INC_B45
BSF FLAG_REG,F_UP
DECF PUSH_C,F
SKPNZ
GOTO  MODE_41
GOTO INC_B42

CENT_B4
MOVLW BDELAY  ;0.01 SECOND * 40
CALL LOOP_L
BTFSS RA,1
GOTO MODE_0  ;CHANGE MODE
GOTO MODE_40
;---------------------------------------------------------

MODE_5    ;Random
MOVLW  H'0'
CALL DDRAM_ADDRESS
MOVLW  'R'
CALL    PRINT_CHAR
MOVLW  'a'
CALL    PRINT_CHAR
MOVLW  'n'
CALL    PRINT_CHAR
MOVLW  'd'
CALL    PRINT_CHAR
MOVLW  'o'
CALL    PRINT_CHAR
MOVLW  'm'
CALL    PRINT_CHAR
MODE_50
MOVLW D'150'
MOVWF PWM_C
MODE_51
DECFSZ  RAND_LO,F ;RANDOM SEED GENERATOR
GOTO MODE_52
DECF RAND_LO,F  ;MAKE SURE NO ZERO
DECFSZ RAND_HI,F
GOTO MODE_52
DECF RAND_HI,F  ;MAKE SURE NO ZERO
MODE_52 BTFSS RA,0
GOTO  INC_B5
BTFSS RA,2
GOTO MODE_51
BTFSS RA,1
GOTO CENT_B5
GOTO MODE_51
INC_B5
MOVLW H'20'  ;20-30 RANDOM TEST
MOVWF PUSH_C
INC_B51
MOVLW D'10'  ;10 PULSES PER POSITION
MOVWF INT_C
;---------------
RANDOM16
RLF     RAND_HI,W
XORWF   RAND_HI,W
RLF     TEMP1,F
SWAPF   RAND_HI,F
SWAPF   RAND_LO,W
RLF     TEMP1,F
XORWF   RAND_HI,W
SWAPF   RAND_HI,F
ANDLW   0x01
RLF     RAND_LO,F
XORWF   RAND_LO,F
RLF     RAND_HI,F
;---------------------------------
MOVLW RLIMIT
SUBWF RAND_LO,W
SKPNC   ;F<W , C=0
GOTO RANDOM16
MOVLW LLIMIT
SUBWF RAND_LO,W
SKPC   ;F>W , C=1
GOTO RANDOM16
MOVF RAND_LO,W
MOVWF PWM_C
INC_B52
MOVF INT_C,W
SKPZ
GOTO INC_B52
BTFSS RA,2  ;STOP ?
GOTO MODE_5
DECFSZ PUSH_C,F
GOTO INC_B51
GOTO MODE_51
CENT_B5
MOVLW BDELAY  ;0.01 SECOND * 40
CALL LOOP_L
BTFSS RA,1
GOTO MODE_0  ;CHANGE MODE
GOTO MODE_50

;---------------------------------
MODE_6    ;Random
MOVLW  H'0'
CALL DDRAM_ADDRESS
MOVLW  'Q'
CALL    PRINT_CHAR
MOVLW  'u'
CALL    PRINT_CHAR
MOVLW  'i'
CALL    PRINT_CHAR
MOVLW  't'
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR
MOVLW  ' '
CALL    PRINT_CHAR

MODE_61
BTFSS RA,0
GOTO  START
BTFSC RA,1
GOTO MODE_61

MOVLW BDELAY
CALL LOOP_L
BTFSS RA,1
GOTO MODE_0
GOTO MODE_61
;------ END OF DST ---------------


;----------------------------------
;-----  SPEED CONTROLLER TESTER  --
SCT_MAIN
BSF RA,4  ;OUT +5V OFF
BSF FLAG_REG,F_TDST ;IF SET GOTO DST MODE
CALL CLEAR_DISPLAY ;CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS ;GET MODE NAME BEGINING
CALL  DISP_MESSAGE ;DISPLAY MODE NAME
MOVLW BDELAY
CALL LOOP_L
;-----------------------------------------------

BSF     STATUS,RP0      ;SET 3,5 ENABLE BANK1
       MOVLW  B'10000111'
       MOVWF   OPTIONF         ;INTERNAT CLOCK,TRM0,1:256
BCF     STATUS,RP0      ;ENABLE BANK0
MOVLW   TMR1            ;256*78=19968 uS
MOVWF TMR0
BCF INTCON,TOIF
BSF INTCON,TOIE
BSF INTCON,GIE ;ENABLE INT

;-------------------------------------------------
SCT_1
MOVLW D'100'  ;MINIMUM
MOVWF PWM_C
SCT_11
BTFSS RA,0
GOTO  ISCT_B
BTFSS RA,2
GOTO DSCT_B
BTFSS RA,1
GOTO DCENT_B
CLRF PUSH_C
GOTO SCT_11
ISCT_B MOVLW RLIMIT
SUBWF PWM_C,W
SKPNZ
GOTO SCT_11  ;=RLIMIT, DO NOTHING
INCF PWM_C,F
MOVLW D'5'  ;CONTINUE 5 STEP, ACCELERATION
SUBWF PUSH_C,W
SKPNZ
GOTO ISCT_B1  ;
MOVLW D'20'  ;0.2 SECOND
CALL LOOP_L  ;CALL 0.1 SECOND LOOP
INCF PUSH_C,F
GOTO SCT_11
ISCT_B1    ;FAST INC
MOVLW D'6'
CALL LOOP_L  ;0.06 SECOND
GOTO SCT_11
DSCT_B
MOVLW LLIMIT
SUBWF PWM_C,W
SKPNZ
GOTO SCT_11  ;=LLIMIT, DO NOTHING
DECF PWM_C,F
MOVLW D'5'  ;CONTINUE 5 STEP, ACCELERATION
SUBWF PUSH_C,W
SKPNZ
GOTO DSCT_B1  ;
MOVLW D'20'  ;
CALL LOOP_L  ;CALL 0.1 SECOND LOOP
INCF PUSH_C,F
GOTO SCT_11
DSCT_B1    ;FAST DEC
MOVLW D'6'
CALL LOOP_L  ;0.06 SECOND
GOTO SCT_11
DCENT_B
MOVLW BDELAY  ;0.01 SECOND * 40
CALL LOOP_L
BTFSS RA,1
GOTO START  ;CHANGE MODE
GOTO SCT_1  ;GOTO BEGINING, 1000uS

;------ END OF SCT -----------------




;=======================================================
RECT_MAIN
BSF RA,4  ;OUT +5V OFF
BSF FLAG_REG,F_TDST
BSF FLAG_REG,F_REC
CALL CLEAR_DISPLAY ;CLEAR DISPLAY
MOVLW 0
CALL DDRAM_ADDRESS
MOVFW MODE_SEL
CALL MODE_ADDRESS ;GET MODE NAME BEGINING
CALL  DISP_MESSAGE ;DISPLAY MODE NAME

BSF     STATUS,RP0      ;
MOVLW  B'10000000'
       MOVWF   OPTIONF         ;INTERNAT CLOCK,TRM0,1:2
MOVLW  B'00001111' ;SET RA,3 INPUT
       MOVWF  TRISA      ;
BCF     STATUS,RP0      ;
CLRF PWM_C
BSF INTCON,TOIE
BSF INTCON,GIE ;ENABLE INT TO DISPLAY XXX uS
NOP
NOP
;--------------------------------
REC_0
BCF INTCON,TOIF
BCF INTCON,TOIE
BCF INTCON,GIE ;

;-------START MEASURE-------------
REC_2
CLRF PWM_C
REC_3
BTFSS RA,1
GOTO REC_B
BTFSS RA,3
GOTO  REC_3
REC_4
NOP   ;10 uS LOOP
NOP
NOP
NOP
INCF  PWM_C,F
SKPNZ
GOTO  REC_ERROR ;IF PWM_C > 255, ERROR
BTFSC RA,3
GOTO REC_4
DECF PWM_C,F  ;CORRECT 1-20 uS
GOTO  REC_5
REC_ERROR   ;IF > 255 DISPLAY 255
MOVLW H'FF'
MOVWF PWM_C
REC_5
BSF INTCON,TOIE
BSF INTCON,GIE ;ENABLE INT TO DISPLAY XXX uS
GOTO  REC_0
REC_B
MOVLW BDELAY  ;0.01 SECOND * 40
CALL LOOP_L
BTFSS RA,1
GOTO START  ;CHANGR MODE TO SCT MAUN
GOTO RECT_MAIN


;-------------------------------------------------

       END

2006\05\12@131023 by Maarten Hofman

face picon face
>
> this is my first post to the list. I have a question about editing a ASM
> file using Microchip's MPLAB IDE 7.3. I have been working with an ASM file
> using the PIC 16F84A microchip. The code is written to sense RPM's of a


Which gives me another reason to state that noone should use the 16F84A:
they might continue using code like this.


> micro turbine engine, and test servo units. I did not write the original
> file. Currently I can only display from 0 - 99,999 RPM's. I have been told
> that the chip can count the piulses for an infinite number. I want to
> change


Infinite... Seems unlikely, but would be nice.

the program to display more than 100K. The LCD module I'm using is an 8 X 2
{Quote hidden}

What would you like help with? What is the problem you are trying to solve?
But to make sure that more people will answer your question, here are some
hints that will help.

Patrick
>
>        LIST    P=16F84A,R=HEX


Use R=DEC, and add the hex qualifier to all numbers that are currently in
the code to avoid confusion.

;
{Quote hidden}

Add the actual definitions to the CONFIG statement, so people know what you
are configuring, to do this, use the official include file.

;-------DEFINE RAM------------
> TMR0 EQU 1  ;TIMER 0


Don't use EQU for variables that are also defined in the include file. Use
the definitions in the include file instead.

PC      EQU 2           ;PROGRAM COUNTER
{Quote hidden}

Don't use EQU for bits that are defined in the include file, but use the
ones from the include file.

W       EQU 0           ;d VALUE FOR INCF......
{Quote hidden}

Don't define your user variables using EQU. Don't even use CBLOCK. Switch to
relocatable code, and use RES.

INTR0   EQU H'D'        ;AFTER INT, SAVE W VALUE
{Quote hidden}

When using relocatable code, this ORG stuff will look different.

      GOTO    START


Put "pagesel START" in front of this goto, to avoid jumping to the wrong
location on other chips.

;----------------------------------------
> ;
> ORG 4  ;INTERRUPT BEGIN
>
> INTB    MOVWF   INTR0           ; SAVE W
>        MOVF    STATUS,W        ; SAVE STATUS
>        MOVWF   INTR1
>        BCF     STATUS,RP0      ; MAKE SURE SELECT BANK0


Use banksel instead of setting the status bits yourself.

CHECK_TDST
{Quote hidden}

Do not call PRINT_CHAR from the interrupt service routine. PRINT_CHAR has a
100us delay inside it (because your LCD code doesn't check for "write
complete") and adding a 100us delay to your ISR is bad practice.

      MOVFW   DD2
{Quote hidden}

I would recommend macros to specify delays, possibly ones that depend on the
speed of the ceramic resonator. Also, instead of two nops, you could use
goto $+1, and instead of four nops, you could call a return statement
somewhere in your local code.

DECFSZ TEMP1,F
{Quote hidden}

Again, better use banksel to select the correct bank.

This file also seems to be long enough to warrant being split up into
separate units. Once you use the relocatable mode, that should be relatively
simple.

As for increasing the number of digits, your code seem to only go from
100-25500, in steps of 100. I'm not sure, but it seems your value is kept in
PWM_C. To increase the number of digits, you'll have to make PWM_C a 16-bit
value, by adding another byte, and change all code accessing PWM_C to 16-bit
arithmetic. After that, you will need to change BIN2BCD such that it creates
DD1, DD2, DD3, DD4, and DD5 (the latter two are new) and change your print
routine (which is currently in the interrupt service routine, but should
really move out of there) to print DD1, DD2, DD3, DD4, DD5 and two zeroes.
This will give you a range from 100-6553500 in steps of 100. Given the size
of your display, you'll have to remove the "rpm" part, which can be easily
found in the code.

To move the print code out of the ISR is easy: just set a bit in the
interrupt service routine that DD1, DD2, DD3, DD4, DD5 are filled with the
correct numbers, and in your main loop check for that bit, and if set, print
those numbers, then reset the bit.

Good luck, given the state of the code as it is currently, this doesn't look
like an easy task.

Greetings,
Maarten Hofman.

2006\05\12@131047 by Maarten Hofman

face picon face
>
> this is my first post to the list. I have a question about editing a ASM
> file using Microchip's MPLAB IDE 7.3. I have been working with an ASM file
> using the PIC 16F84A microchip. The code is written to sense RPM's of a


Which gives me another reason to state that noone should use the 16F84A:
they might continue using code like this.


> micro turbine engine, and test servo units. I did not write the original
> file. Currently I can only display from 0 - 99,999 RPM's. I have been told
> that the chip can count the piulses for an infinite number. I want to
> change


Infinite... Seems unlikely, but would be nice.

the program to display more than 100K. The LCD module I'm using is an 8 X 2
{Quote hidden}

What would you like help with? What is the problem you are trying to solve?
But to make sure that more people will answer your question, here are some
hints that will help.

Patrick
>
>        LIST    P=16F84A,R=HEX


Use R=DEC, and add the hex qualifier to all numbers that are currently in
the code to avoid confusion.

;
{Quote hidden}

Add the actual definitions to the CONFIG statement, so people know what you
are configuring, to do this, use the official include file.

;-------DEFINE RAM------------
> TMR0 EQU 1  ;TIMER 0


Don't use EQU for variables that are also defined in the include file. Use
the definitions in the include file instead.

PC      EQU 2           ;PROGRAM COUNTER
{Quote hidden}

Don't use EQU for bits that are defined in the include file, but use the
ones from the include file.

W       EQU 0           ;d VALUE FOR INCF......
{Quote hidden}

Don't define your user variables using EQU. Don't even use CBLOCK. Switch to
relocatable code, and use RES.

INTR0   EQU H'D'        ;AFTER INT, SAVE W VALUE
{Quote hidden}

When using relocatable code, this ORG stuff will look different.

      GOTO    START


Put "pagesel START" in front of this goto, to avoid jumping to the wrong
location on other chips.

;----------------------------------------
> ;
> ORG 4  ;INTERRUPT BEGIN
>
> INTB    MOVWF   INTR0           ; SAVE W
>        MOVF    STATUS,W        ; SAVE STATUS
>        MOVWF   INTR1
>        BCF     STATUS,RP0      ; MAKE SURE SELECT BANK0


Use banksel instead of setting the status bits yourself.

CHECK_TDST
{Quote hidden}

Do not call PRINT_CHAR from the interrupt service routine. PRINT_CHAR has a
100us delay inside it (because your LCD code doesn't check for "write
complete") and adding a 100us delay to your ISR is bad practice.

      MOVFW   DD2
{Quote hidden}

I would recommend macros to specify delays, possibly ones that depend on the
speed of the ceramic resonator. Also, instead of two nops, you could use
goto $+1, and instead of four nops, you could call a return statement
somewhere in your local code.

DECFSZ TEMP1,F
{Quote hidden}

Again, better use banksel to select the correct bank.

This file also seems to be long enough to warrant being split up into
separate units. Once you use the relocatable mode, that should be relatively
simple.

As for increasing the number of digits, your code seem to only go from
100-25500, in steps of 100. I'm not sure, but it seems your value is kept in
PWM_C. To increase the number of digits, you'll have to make PWM_C a 16-bit
value, by adding another byte, and change all code accessing PWM_C to 16-bit
arithmetic. After that, you will need to change BIN2BCD such that it creates
DD1, DD2, DD3, DD4, and DD5 (the latter two are new) and change your print
routine (which is currently in the interrupt service routine, but should
really move out of there) to print DD1, DD2, DD3, DD4, DD5 and two zeroes.
This will give you a range from 100-6553500 in steps of 100. Given the size
of your display, you'll have to remove the "rpm" part, which can be easily
found in the code.

To move the print code out of the ISR is easy: just set a bit in the
interrupt service routine that DD1, DD2, DD3, DD4, DD5 are filled with the
correct numbers, and in your main loop check for that bit, and if set, print
those numbers, then reset the bit.

Good luck, given the state of the code as it is currently, this doesn't look
like an easy task.

Greetings,
Maarten Hofman.

2006\05\12@145204 by olin piclist

face picon face
Maarten Hofman wrote:
> I would recommend macros to specify delays, possibly ones that depend
> on the speed of the ceramic resonator.

Which is exactly what my WAITUS and WAITNS macros in STD.INS.ASPIC at
http://www.embedinc.com/pic do.

> Also, instead of two nops, you
> could use goto $+1,

Which is exactly what my WAITCY macro that WAITUS and WAITNS are layered on
does.  It also knows to use BRA $+2 on a PIC 18.


******************************************************************
Embed Inc, Littleton Massachusetts, (978) 742-9014.  #1 PIC
consultant in 2004 program year.  http://www.embedinc.com/products


'[PIC] LCD Interface HD44780'
2006\06\28@044904 by Stewart Abel
picon face
I am trying to interface with a LCD which uses the HD44780 interface.  I am
using a PIC16f73.  I am trying to use the LCD in 4bit mode connected to
PORTC.  I am currently just getting a blank screen.  I have put my code
below.  Can anybody see where I have gone wrong or suggest anything I can
try please?

include "p16f73.inc"

CBLOCK        0x020
       R_DEL1
       R_DEL2
       R_WDATA_TMP1
       R_WDATA_TMP2
       R_SEND_W_TMP
       RAM_PORTC
       R_BIT
endc

org 0
       goto init

org 4

init
       movlw        0xFF
       call        delay

       bsf                STATUS, RP0
       movlw        0x000
       movwf        TRISC
       bcf                OPTION_REG,5
       bcf                STATUS, RP0
       clrf        PORTC
       ;bcf                PORTC, 4
       movlw        0x004
       call        clear_PORTC_bit
       
       
       movlw        0x003
       call        w_to_data
       call        pulse_e
       movlw        0x00A
       call        delay

       movlw        0x003
       call        w_to_data
       call        pulse_e
       movlw        0x004
       call        delay

       movlw        0x003
       call        w_to_data
       call        pulse_e
       movlw        0x004
       call        delay

       movlw        0x002
       call        w_to_data
       call        pulse_e
       movlw        0x004
       call        delay

       movlw        b'00101000';interface length
       call        send_w
       call        delay_1ms
       call        delay_1ms
       
       movlw        b'00000010'
       call        send_w
       call        delay_1ms
       call        delay_1ms
       movlw        b'00010000'
       call        send_w
       call        delay_1ms
       call        delay_1ms

       movlw        b'00000110' ;Cursor Direction
       call        send_w
       call        delay_1ms
       call        delay_1ms
       
       movlw        b'00001111'
       call        send_w
       call        delay_1ms
       call        delay_1ms
       
mainloop
       ;bcf                PORTC, 4
       movlw        0x004
       call        clear_PORTC_bit
       movlw        b'00000010'
       call        send_w
       ;bsf                PORTC, 4
       movlw        0x004
       call        set_PORTC_bit
       call        delay_1ms
       
       movlw 'H'
       call        send_w
       
       goto mainloop
       

pulse_e
       ;bsf                PORTC, 5
       movlw        0x005
       call        set_PORTC_bit
       nop
       nop
       nop
       nop
       ;bcf                PORTC, 5
       movlw        0x005
       call        clear_PORTC_bit
       call        delay_1ms
       call        delay_1ms
       return

; Calls the delay_1ms routine the number of times specified by
; the W register.
delay
       movwf        R_DEL2
delay_loop
       call        delay_1ms
       decfsz        R_DEL2, F
               goto        delay_loop
       return
       
; When called gives a delay of about 1000 cycles, or 1ms at 4Mhz
; before the next instruction is executed.
delay_1ms
       movlw        d'248'
       movwf        R_DEL1
delay_1ms_loop
       nop
       decfsz        R_DEL1, F
               goto        delay_1ms_loop
       return

send_w
       movwf        R_SEND_W_TMP
       swapf        R_SEND_W_TMP, F
       movlw        0x0F
       andwf        R_SEND_W_TMP, W
       call        w_to_data
       call        pulse_e
       
       swapf        R_SEND_W_TMP, F
       movlw        0x0F
       andwf        R_SEND_W_TMP, W
       call        w_to_data
       call        pulse_e
       return

w_to_data
       movwf        R_WDATA_TMP1
       movf        PORTC, W
       movwf        R_WDATA_TMP2
       bcf                R_WDATA_TMP2, 0
       bcf                R_WDATA_TMP2, 1
       bcf                R_WDATA_TMP2, 2
       bcf                R_WDATA_TMP2, 3
       btfsc        R_WDATA_TMP1, 0
               bsf                R_WDATA_TMP2, 0
       btfsc        R_WDATA_TMP1, 1
               bsf                R_WDATA_TMP2, 1
       btfsc        R_WDATA_TMP1, 2
               bsf                R_WDATA_TMP2, 2
       btfsc        R_WDATA_TMP1, 3
               bsf                R_WDATA_TMP2, 3
       movf        R_WDATA_TMP2, W
       movwf        PORTC
       
       return

clear_PORTC_bit
       movwf        R_BIT
       movfw        PORTC
       movwf        RAM_PORTC
       bcf                RAM_PORTC, R_BIT
       movfw        RAM_PORTC
       movwf        PORTC
       
       return

set_PORTC_bit
       movwf        R_BIT
       movfw        PORTC
       movwf        RAM_PORTC
       bsf                RAM_PORTC, R_BIT
       movfw        RAM_PORTC
       movwf        PORTC

       return

end


Stewart Abel

2006\06\28@051923 by Jan-Erik Soderholm

face picon face
Stewart Abel wrote :

> I have put my code below.  Can anybody see where I have
> gone wrong or suggest anything I can try please?

First, there is not a single comment in the code so one
can verify what you *think* you are doing.

Then, please explain what this code does :

> clear_PORTC_bit
>        movwf        R_BIT
>        movfw        PORTC
>        movwf   RAM_PORTC
>        bcf           RAM_PORTC, R_BIT
>        movfw        RAM_PORTC
>        movwf        PORTC
>        
>        return

In particular how the BCF works...

Regards,
Jan-Erik.



2006\06\28@054233 by Stewart Abel

picon face
I appologise for the lack of comments.

I changed from a standard bcf on PORTC as I have read about the
read-modify-write problems.  When I call this sub, I put the number of the
bit I want to clear in the W register.  This then reads PORTC and places it
in RAM_PORTC, clears the bit in the variable and writes the entire byte back
to PORTC

Regards
Stewart
> {Original Message removed}

2006\06\28@061651 by Jan-Erik Soderholm

face picon face
Stewart Abel wrote :

> I changed from a standard bcf on PORTC as I have read
> about the read-modify-write problems.

Probably a little over-worked when working with a simple
LCD interface. No high capacitans loads. If you'd like, you
can put in a few NOP's between the bcf/bsf's.

> clears the bit in the variable...

The "bit" number in the bcf/bsf instruction can NOT be
a run-time variable. It's an constant. The bit number is
assembled into the instruction at assembly time.

I'd say that you can simplify your code quite a lot.

Regards,
Jan-Erik.



2006\06\28@064614 by Stewart Abel

picon face
I will try that.  I thought it seemed like a bit of a long way round!!!

Thanks
Stewart

{Quote hidden}

> -

2006\06\28@070954 by Jinx

face picon face
Hi Stewart, nothing as sad as a blank screen is there ?

I had some difficulty reading your style of code. You would
be better to use the bit definitions as in the .inc file. eg, without
looking it up, I have no idea what OPTION_REG,5 is

Included here is code I use often for 4-bit LCDs. Bear in mind
this is an example for the 18F, so there are no bank changes,
and latd is what would be portd on a 16F

Data is displayed by 'call write_d', a command by 'call write_c'

Interface via macros (makes display code a lot simpler)

clrscrn  macro                ;clear LCD
        movlw   0x01
        call    write_c
        endm

mov      macro   litval,file
        movlw   litval
        movwf   file
        endm

movfw    macro   litval
        movf    litval,w
        endm

lcd_pos  macro   litval       ;set print address
        movlw   litval-1
        call    address
        endm

disp     macro   litval       ;display character
        movlw   litval
        call    write_d
        endm

eg

        lcd_pos ln1+d14
        disp    "s"

==========

#define  rs      porte,0      ;LCD RS
#define  rw      porte,1      ;LCD R/W
#define  en      porte,2      ;LCD Enable

;PortD 0-3 - LCD data

#define  busy    portd,3      ;LCD Busy flag

usec     macro                ;1us delay
        movff   temp,temp
        movff   temp,temp
        movff   temp,temp
        movff   temp,temp
        movff   temp,temp
        endm

;================================================
;        Initialise LCD screen
;================================================

lcd_init bcf    rw
        usec
        bcf    rs
        usec

        call   write30
        call   msdelay      ;delay > 4.1ms
        call   msdelay
        call   msdelay
        call   msdelay
        call   msdelay

        call   write30
        call   msdelay       ;delay > 100us

        call   write30
        call   msdelay       ;delay > 100us

;LCD settings

        movlw  b'00100000' ;
        call   write_c
        movlw  b'00001000'
        call   write_c
        movlw  b'00001100'
        call   write_c
        movlw  b'00000110'
        call   write_c
        return

write30  movfw  portd
        andlw  b'00001111'
        addlw  b'00110000'
        movwf  latd
        usec
        bsf    en
        usec
        bcf    en
        usec
        return

;===============================================
;        LCD commands
;================================================

line1    movlw  0x00          ;line 1, column 0
        call   address
        return

line2    movlw  0x40          ;line 2, column 0
        call   address
        return

address  addlw  0x80          ;set high bit of address command
        call   write_c
        return

write_c  bcf    rs            ;write command
        bra    d_out

write_d  bsf    rs            ;write data

;send 2 x 4-bits

d_out    movwf  temp          ;save data in W, and split
        swapf  temp
        movfw  portd         ;read port
        andlw  b'11110000'   ;clear LSN
        movwf  shadowd
        movfw  temp          ;add MSN to bshad
        andlw  b'00001111'
        addwf  shadowd,w
        movwf  latd          ;write to port
        usec
        bcf    rw
        usec
        bsf    en
        usec
        bcf    en

        movfw  portd         ;read port
        andlw  b'11110000'   ;clear LSN
        movwf  shadowd
        swapf  temp,w        ;add temp LSN to bshad
        andlw  b'00001111'
        addwf  shadowd,w
        movwf  latd          ;write to port
        usec
        bcf    rw
        usec
        bsf    en
        usec
        bcf    en

        usec
        bsf    rw            ;set LCD RW for Read
        usec
        bcf    rs

        mov    b'00001000',trisd ;Busy as i/p
        bsf    en
rdbusy   btfsc  busy          ;loop until Busy Flag clear
        bra    rdbusy
        bcf    en
        usec
        bcf    rw
        mov    b'00000000',trisd

        return


2006\06\28@071621 by Wouter van Ooijen

face picon face
> I changed from a standard bcf on PORTC as I have read about the
> read-modify-write problems.  When I call this sub, I put the
> number of the
> bit I want to clear in the W register.  This then reads PORTC
> and places it
> in RAM_PORTC, clears the bit in the variable and writes the
> entire byte back
> to PORTC

that won't do no good. think again about the 'reads PORTC' part in
relation to the read-modify-write issue.

Wouter van Ooijen

-- -------------------------------------------
Van Ooijen Technische Informatica: http://www.voti.nl
consultancy, development, PICmicro products
docent Hogeschool van Utrecht: http://www.voti.nl/hvu


2006\06\28@073313 by Wouter van Ooijen

face picon face
> Included here is code I use often for 4-bit LCDs. Bear in mind
> this is an example for the 18F, so there are no bank changes,
> and latd is what would be portd on a 16F

except that LATx does not suffer from the read-modify-write problem!

Wouter van Ooijen

-- -------------------------------------------
Van Ooijen Technische Informatica: http://www.voti.nl
consultancy, development, PICmicro products
docent Hogeschool van Utrecht: http://www.voti.nl/hvu


2006\06\28@074144 by Stewart Abel

picon face
Thanks for this Jinx, I will try it out.  Is there anything I need to change
as far as timings are concerned, I am using a 4mhz oscillator.

Cheers
Stewart
> {Original Message removed}

2006\06\28@083741 by David VanHorn

picon face
On 6/28/06, Stewart Abel <stewspam_OUTspam@spam@stewartabel.co.uk> wrote:
>
> Thanks for this Jinx, I will try it out.  Is there anything I need to
> change
> as far as timings are concerned, I am using a 4mhz oscillator.


Have you verified that your delays are correct?  Not following the timing
specs would give you what your're seeing.


--
> Feel the power of the dark side!  Atmel AVR

2006\06\28@084812 by Jan-Erik Soderholm

face picon face
David VanHorn wrote :

> Have you verified that your delays are correct?  Not
> following the timing
> specs would give you what your're seeing.

Maybe.

But the *major* problem is trying to set the bit
number in the BCF/BSF instructions using a
run-time variable.

I'd focus on that first...

Jan-Erik.
>



2006\06\28@091120 by Jinx

face picon face
> Thanks for this Jinx, I will try it out.  Is there anything I need to
> change as far as timings are concerned, I am using a 4mhz oscillator

Not really, as long as you make 1ms = 1ms etc. Initialisation timing
for the LCD is important, and it's often the cause of a blank screen.

And of course make the changes that you need for a 16F

The macro I use for 1 usec (seeing as it's generally a 452 and space
isn't tight so a few of these won't be a problem)

usec     macro                ;1us delay
        movff   temp,temp
        movff   temp,temp
        movff   temp,temp
        movff   temp,temp
        movff   temp,temp
        endm

is based on a 200ns instruction cycle. Yours is 1us per IC, so you
can use a single NOP. It's generally OK with an LCD to have as
little as 1us between BCF/BSF etc on a port driving RS/RW/EN,
but more won't hurt and, although I've never had a problem, would
be safer.

The 44780 is fast-ish, for example

Enable cycle time, 1000ns min
Enable pulse width, 450ns min

A reference http://www.doc.ic.ac.uk/~ih/doc/lcd/

2006\06\28@091232 by Maarten Hofman

face picon face
2006/6/28, Stewart Abel <spamBeGonestew@spam@spamstewartabel.co.uk>:

> I am trying to interface with a LCD which uses the HD44780 interface.  I
> am
> using a PIC16f73.  I am trying to use the LCD in 4bit mode connected to
> PORTC.  I am currently just getting a blank screen.  I have put my code
> below.  Can anybody see where I have gone wrong or suggest anything I can
> try please?


1) Obviously the code needs work. I recommend running it through a simulator
step by step, and see the things that are going wrong (you can use
breakpoints to jump over your delays). Others in the list have already
commented on things. I wouldn't be concerned about read/modify/write at this
time. Try to add comments to the code.
2) Is your contrast circuit working? Can you make the display go from blank
to black by adjusting your contrast? If not, then this is also something
that would need attention.
3) A known good implementation of 4-bit LCD can be found at
http://www.myke.com/lcd.htm . The code uses a two-bit interface, and isn't
that good either, but at least it is an implementation that works, from
which you can create your own. I wouldn't be surprised if there weren't
several implementations on piclist.com either.
4) I used the sequence 3332280801060C to initialise, which has worked with
every LCD I encountered (of course, the "28" might need to change to 20, 38
or 30 depending on the size of the display).
5) Timing wise you seem to be on the careful side (which is no problem, the
LCD is patient). The longest delay you need is 15ms after power up. From
then on most data can be sent at 160us delays (there are some commands that
take 5ms but those are rare). Also note that at 4 MHz there is no delay
needed between the nybbles that form a byte sent to the LCD. Just put nybble
on your port, blink enable, put the next nybble on the port, and blink
enable, then wait 160us. Of course, 160us is the maximum, you can check the
busy flag to see if you can send stuff sooner.

Greetings,
Maarten Hofman.

2006\06\28@092225 by Jinx

face picon face
> Is there anything I need to change

BTW, I just noticed that 'shadowd' is in the code, but 'bshad'
is in the comments. 'bshad' is obviously a left-over from a
version that used PortB. The data splitting is to send two 4-bit
nybbles out of LATD <0:3>, whilst preserving the state of <4:7>.
If you're using the upper half of the port, "invert" that

2006\06\28@093348 by Alan B. Pearce

face picon face
> Thanks for this Jinx, I will try it out.  Is there anything I need to
> change as far as timings are concerned, I am using a 4mhz oscillator

One of the queries this problem often brings up is the question "are you
really using a 44780, or one of the clones"? Many of the clones require
longer delays, especially when initialising the chip, and the general
consensus seemed to be to start with delays that are significantly longer,
and then once you have the display working, shorten them.


2006\06\29@115819 by Stewart Abel

picon face
Ok, I've totally rewritten my code.  I have tried different length delays
but still to no avail.  I have also tried different rated Pots on the
contrast circuit, but still nothing.  Here is my new code, commented better
this time!!!

       include        p16f73.inc
       list p=16f73
       ;include        XLCD.inc

       CBLOCK 0x020
               Delay_i
               DelayCount
               data_to_send
               LCD_temp
       endc

       RS        equ                4                        ;RS bit
       E        equ                5                        ;E bit
       D4        equ                0                        ;Data bits
       D5        equ                1
       D6        equ                2
       D7        equ                3
       LCD_PORT        equ        PORTB        ;Port LCD connected to
       LCD_TRIS        equ        TRISB        ;Tris LCD connected to

org 0
       
       goto init

org 4

init        bsf        STATUS, RP0
               movlw        0x00
               movwf        LCD_TRIS                        ;Set LCD_TRIS to
Outputs
               bcf                STATUS, RP0
               clrf        LCD_PORT        ;clear LCD_PORT        

init_lcd
               movlw        0x014                ;Delay to wait for LCD to initalise
               call        Dlay
               movlw        0x03
               call        send_w                ;Send Reset
               movlw        0x05
               call        Dlay                ;Delay 5ms
               movlw        0x05
               call        send_w                ;cycle Reset
               call        Dlay_500us
               movlw        0x05
               call        send_w                ;cycle reset again
               movlw        0x002
               call        send_w                ;Set to 4 bit mode
               movlw        b'00101000'
               call        send_w_data        ;Set Interface Length
               movlw        b'00010000'
               call        send_w_data        ;Disable shifting of display
               movlw        b'00000001'        ;clear display
               call        send_w_data
               movlw        b'00000110'        ;enable cursor increment
               call        send_w_data
               movlw        b'00001110'        ;turn display & cursor on
               call        send_w_data

mainline
               bsf                LCD_PORT, RS        ;Put LCD into data mode
               nop
               nop
               nop
               nop
               movlw        'H'
               call        send_w_data
               movlw        'E'
               call        send_w_data
               movlw        'L'
               call        send_w_data
               movlw        'L'
               call        send_w_data
               movlw        'O'
               call        send_w_data
               goto $

Dlay        movwf        DelayCount                ;Calls Dlay_1ms number of times
stored in w_reg
Dlay_loop
               call        Dlay_1ms
               decfsz        DelayCount, f
                       goto Dlay_loop
               return

Dlay_1ms
       movlw        0xff                        ;1ms Delay on 4Mhz Oscillator
       movwf        Delay_i
               goto        L1
Dlay_500us
       movlw        d'156'                        ;aprox 500us Delay on 4Mhz
Oscillator
       movwf        Delay_i
L1            nop
       decfsz        Delay_i, f
               goto        L1
       return

send_w_data
               movwf        data_to_send
               swapf        data_to_send, f
               movlw        0x00F
               andwf        data_to_send, w
               call        send_w
               swapf        data_to_send, f
               movlw        0x00F
               andwf        data_to_send, w
               call        send_w
               return

send_w        bsf                LCD_PORT, E
               nop
               nop
               nop
               nop
               nop
               nop
               movwf        LCD_PORT                ;Sends data to LCD_PORT
               nop
               nop
               nop
               nop
               nop
               nop
               bcf                LCD_PORT, E
               nop
               nop
               nop
               nop
               nop
               return
               
end

stew

> {Original Message removed}

2006\06\29@121547 by Jan-Erik Soderholm

face picon face
Stewart Abel wrote :

I'm not 100% sure but doesn't :

>                movlw        0x00F
>                andwf        data_to_send, w
>                movwf        LCD_PORT                ;Sends data to LCD_PORT

clear the RS bit again ?

Jan-Erik.



2006\06\29@130235 by Scott Dattalo

face
flavicon
face
Stewart Abel wrote:
> Ok, I've totally rewritten my code.  I have tried different length delays
> but still to no avail.  I have also tried different rated Pots on the
> contrast circuit, but still nothing.  Here is my new code, commented better
> this time!!!

Stewart,

I don't know if your code is correct or not, but gpsim (the GNUPIC
simulator) contains full working example of a HD44780 driver that you
can use as a reference:

http://svn.sourceforge.net/viewcvs.cgi/gpsim/trunk/extras/lcd/examples/

(BTW, I've been getting server errors while using the SF SVN Web
interface, so you may have to try a few times before the link works).

Scott

2006\06\29@131711 by Stewart Abel

picon face
Of course it will!!!  I hadn't noticed that, thanks

stew
-----Original Message-----
From: RemoveMEpiclist-bouncesEraseMEspamKILLspammit.edu [spamBeGonepiclist-bouncesspam_OUTspamRemoveMEmit.edu] On Behalf Of
Jan-Erik Soderholm
Sent: 29 June 2006 17:16
To: .....piclistspamRemoveMEmit.edu
Subject: RE: [PIC] LCD Interface HD44780

Stewart Abel wrote :

I'm not 100% sure but doesn't :

>                movlw        0x00F
>                andwf        data_to_send, w
>                movwf        LCD_PORT                ;Sends data to LCD_PORT

clear the RS bit again ?

Jan-Erik.



2006\06\29@133300 by John Chung

picon face
Out of curiousity is your LCD 4 bit for data?

John

--- Stewart Abel <stewspam@spam@stewartabel.co.uk> wrote:

{Quote hidden}

> > {Original Message removed}

2006\06\29@134834 by John Chung

picon face
>From my document you have send 3 the first time and
than 5 twice for the reset. From my document of the
LCD it should be 3 occuring thrice. Are you refering
the the LCD document while writing the program?

http://www.sparkfun.com/datasheets/LCD/HD44780.pdf

Use the one above

John

--- Stewart Abel <EraseMEstewRemoveMEspamSTOPspamstewartabel.co.uk> wrote:

{Quote hidden}

> > {Original Message removed}

2006\06\29@144739 by Maarten Hofman

face picon face
2006/6/29, Stewart Abel <RemoveMEstewKILLspamspamTakeThisOuTstewartabel.co.uk>:
>
> Ok, I've totally rewritten my code.  I have tried different length delays
> but still to no avail.  I have also tried different rated Pots on the
> contrast circuit, but still nothing.  Here is my new code, commented
> better


Nothing in that you can't make the display turn black using the contrast
circuit? If you can't do that, there is no need to bother with the code,
because then there is a different hardware issue.

this time!!!
{Quote hidden}

You seem to be sending: 35552281001060E and I'm pretty sure it should be
more like 333228... Note that the first sequence is vital, as you want the
LCD to recognize a reset despite you using only four lines of the interface.

mainline
>                bsf             LCD_PORT, RS    ;Put LCD into data mode


I recommend having the control lines on a different port than your data
lines while you are testing the program. Once you have it working, you can
move them to the same port. Currently you are overriding the control lines
each time you are changing the data lines.


> send_w  bsf             LCD_PORT, E


The sequence seems to be wrong here... You should first put the data on the
port, and then turn enable on, and off. Turning enable on first will send
the current data to the LCD, and I'm not sure what changing the data during
enable on will do.

              nop
{Quote hidden}

Note that you still need a 160us delay between each byte as well: you can
get away with leaving it out between nybbles, but after each byte you need
to wait, or poll the ready status.

Greetings,
Maarten Hofman.

2006\06\29@164525 by Phillip

picon face
Hi Stew

I wanted to let you know (or anyone else that is interested) I have a simple
circuit (two caps a resistor and two diodes) that generates contrast control
voltage about +3 to -1.5 or -2 using the PWM function.
I also use an FET and the PWM control the brightness of my back light
diodes.

My routines to control it are in C but they would be a piece of cake to port
to ASM.



Phillip
Things should be as simple as possible but no simpler



Phillip Coiner
CTO, GPS Source, Inc.


Your source for quality GNSS Networking Solutions and Design Services, Now!

{Original Message removed}

2006\06\29@174658 by Hector Martin [PIClist] n/a

flavicon
face
Plus the second parameter to BCF is a literal bit, not the address of a
variable with a bit number in it. Won't work (you need a lookup table
for that). I'd use a macro.

Wouter van Ooijen wrote:
{Quote hidden}

--
Hector Martin (spamBeGonehectorspam@spam@marcansoft.com)
Public Key: http://www.marcansoft.com/hector.asc

2006\06\30@090418 by Stewart Abel

picon face
Thanks for the help everyone, turns out I had a faulty LCD!!!

stew

{Quote hidden}

> -

2006\06\30@091847 by David VanHorn

picon face
On 6/30/06, Stewart Abel <stewspam_OUTspamstewartabel.co.uk> wrote:
>
> Thanks for the help everyone, turns out I had a faulty LCD!!!


Don't you love it!   Development is such fun.. :)

2006\06\30@093226 by Alan B. Pearce

face picon face
>> Thanks for the help everyone, turns out I had a faulty LCD!!!
>
>Don't you love it!   Development is such fun.. :)

Yeah, if all else fails, replace the faulty part - bit of a bummer if the
part is expensive though ... ;))

2006\06\30@093609 by Stewart Abel

picon face
Isn't it!! :-)

> -----Original Message-----
> From: RemoveMEpiclist-bouncesKILLspamspam@spam@mit.edu [piclist-bouncesspamBeGonespam.....mit.edu] On Behalf
> Of David VanHorn
> Sent: 30 June 2006 14:19
> To: Microcontroller discussion list - Public.
> Subject: Re: [PIC] LCD Interface HD44780
>
> On 6/30/06, Stewart Abel <KILLspamstewspam.....stewartabel.co.uk> wrote:
> >
> > Thanks for the help everyone, turns out I had a faulty LCD!!!
>
>
> Don't you love it!   Development is such fun.. :)
> -

2006\06\30@094743 by Stewart Abel

picon face
I can't complain realy,  I bought the LCDs on ebay from a guy in China for
$15 shipped each!

> -----Original Message-----
> From: spam_OUTpiclist-bouncesspamKILLspammit.edu [RemoveMEpiclist-bouncesRemoveMEspamEraseMEmit.edu] On Behalf
> Of Alan B. Pearce
> Sent: 30 June 2006 14:32
> To: Microcontroller discussion list - Public.
> Subject: Re: [PIC] LCD Interface HD44780
>
> >> Thanks for the help everyone, turns out I had a faulty LCD!!!
> >
> >Don't you love it!   Development is such fun.. :)
>
> Yeah, if all else fails, replace the faulty part - bit of a bummer if the
> part is expensive though ... ;))
>
> -


'[PIC] LCD Interface HD44780'
2006\07\01@025713 by John Chung
picon face
try http://www.bgmicro.com or http://www.bgmicro.com/

john

--- Stewart Abel <KILLspamstewspamspamBeGonestewartabel.co.uk> wrote:

> I can't complain realy,  I bought the LCDs on ebay
> from a guy in China for
> $15 shipped each!
>
> > {Original Message removed}


'[PIC] 128x64 graphics LCD interface'
2007\04\25@103305 by alan smith
picon face
I've looked thru the archives and found some good material....just wanting to bounce things off the list for either correction, clarification or whatever
 
 I have some 128x64 graphics LCD modules that use a Samsung KS0713 controller.  The interface is simple, either serial or parallel so thats all good.
 
 Now, as most graphic controllers seem to do, they divide up the Y space in pages so in this case its 8 pages, of 8 bits. So you select the page, and then the column address for that one pixel to write.  The column address incrments automatically.  If for instance you wanted to draw a line a single pixel wide, you could simply have a loop of 127 sending a 1 to the controller.  
 
 OK, so what about just sending a character....say....A.  I suppose thats what the graphics libraries such as ramtec supplies, in that you say send an A and it sends out the page, and then the column address to 'turn on' the pixels.  So each 'character' is a subroutine thats called?  Or is there a easier method....or has someone else done this before, maybe not for this controller but another one.  I think Scott D was doing something with font experiments but I don't recall what controller or resolution he was using.  I was thinking for a graphic module interface you would end up needing alot of RAM not flash to do this?

Oh, and doing this in assembly.  Right now this isnt a real project but something they are thinking about but I figured I ought to at least get a leg up on how this all works.

     
---------------------------------
Ahhh...imagining that irresistible "new car" smell?
Check outnew cars at Yahoo! Autos.

2007\04\25@111829 by Dario Greggio

face picon face
alan smith wrote:
> OK, so what about just sending a character....say....A.  I suppose [...]

Hi Alan, I did do it like this:
have an array of "chars", organized as (for simplicity) 8x8 pixels,
either in Program memory or I2C/SPI External EEPROM;
Calculate a pointer into it, based on ASCII code (i.e. 65 for "A")
(usually I subtract 32);
position the Graphic cursor of the LCD at the top-left position where
the char is going to be printed;
go reading one after the other the 8 byte making up the Char, and plot
them onto the LCD one below the other.

I had done it in assembler, should go finding that code...

--
Ciao, Dario
--
ADPM Synthesis sas - Torino

2007\04\25@112122 by Harold Hallikainen

face
flavicon
face

>
>   OK, so what about just sending a character....say....A.  I suppose thats
> what the graphics libraries such as ramtec supplies, in that you say
> send an A and it sends out the page, and then the column address to
> 'turn on' the pixels.  So each 'character' is a subroutine thats called?
>  Or is there a easier method....or has someone else done this before,
> maybe not for this controller but another one.  I think Scott D was
> doing something with font experiments but I don't recall what controller
> or resolution he was using.  I was thinking for a graphic module
> interface you would end up needing alot of RAM not flash to do this?


I have a project with a PIC24H driving a CPLD that interfaces to a RAM and
a graphic display. To the PIC, it looks like an external RAM. I can set up
an address corresponding to a position on the screen, then read or write
that address. The CPLD autoincrements to the next pixel position
(including from the end of one line to the start of the next). I have a C
function that draws a character. The start of my font table includes the X
and Y size of the character, then the bit pattern for each character. I
used the Character Set Extractor at
www.piclist.org/techref/datafile/charset/extractor/charset_extractor.htm
. My DisplayCharacter function pulled the pixels from the table and output
them to the LCD, dropping to the next line at the right edge of the
character. I have a couple global variables that define the foreground and
background colors that are used to draw the characters. At the end of
drawing the characters, the CPLD is set to the top left corner of the next
character so I can just feed them one after another to print strings. The
function also allows for different character sets (especially different
sizes), which is why I put the Xsize and Ysize at the start of the table.

Harold


--
FCC Rules Updated Daily at http://www.hallikainen.com - Advertising
opportunities available!

2007\04\25@112935 by PAUL James

picon face

Harold,

I could use something like this for a project coming up soon.
Would it be asking too much to ask if you would allow me to
Copy your CPLD setup and the accompanying code to use in my project?
You can email your responses to me offline at projectsspamspamjpes.com.
I'll use this address so your response will be easy to find.


                                               Thanks and Regards,

                                                        Jim

{Original Message removed}

2007\04\25@113902 by Harold Hallikainen

face
flavicon
face
Unfortunately, I didn't write the CPLD code, so I can't share it... It
belongs to a client. Sorry about that!

Harold

{Quote hidden}

> {Original Message removed}

2007\04\25@114454 by PAUL James

picon face

Harold,

Not a problem.   I was going to have to write it anyway, so I'm still
where I was a few minutes ago.
It's just that this would have alliviated the need to write the CPLD
code, thereby speeding up the
Process somewhat.  But, no problem.   I appreciate your response.  


       
Thanks and Regards,

       
Jim

{Original Message removed}


'[PIC] PIC or other Micro with LCD interface?'
2007\06\07@113535 by Harold Hallikainen
face
flavicon
face
I'm finding more and more applications where I have to drive a color
graphics LCD. We have a system running with a CPLD and SRAM where the CPLD
generates the high speed parallel video for the display, pulling the data
from SRAM, and also allowing the PIC to read and write the SRAM. It SEEMS,
though, that this should be a relatively common application, and that such
an LCD controller should be on the PIC (or on the display module). Is
anyone aware of such a micro (or a family of display modules that have
their own frame buffers)?

By the way, I'm having fun with Unifont (http://czyborra.com/unifont/).
Yesterday I wrote a small perl script that takes the native Unifont format
and converts it into PIC24 .pbyte lines with the first two bytes holding
the Unicode character number. If the character is 16 bits wide, instead of
8, it takes two table entries with the second one having a Unicode number
of 0xffff. On receiving characters to display, I intend to do a binary
search through the table, then put up the appropriate character. Anyway,
Unifont looks interesting...

Harold


--
FCC Rules Updated Daily at http://www.hallikainen.com - Advertising
opportunities available!

2007\06\07@134358 by M. Adam Davis

face picon face
You can find many ARM processors with integrated LCD drivers.  Haven't
seen any 8-bit processors with one, though (well, except for small
segment displays of 160 or fewer segments).

One of the issues seems to be memory - not only does it have to drive
the LCD, but manage a whole chunk of memory as well, which means that
the PIC has to have much more I/O.

A mechanism where the LCD and memory are sharing data lines works well
as a hack, but isn't very flexible, and would limit the number of
displays that can be supported.

So for now most people rely on external controllers, or LCDs with
built in controllers when using a low end processor.

Interesting notes about font stuff, though.  I just went through using
GIMP and some custom utilities to convert a font to a C program, and
then including it in my source.

Antialiasing it was a snap from there.  Now I've got to look at
converting more fonts, and dealing with proportional fonts.

-Adam

On 6/7/07, Harold Hallikainen <KILLspamharoldspamBeGonespamhallikainen.org> wrote:
{Quote hidden}

> -

2007\06\07@202519 by Zik Saleeba

face picon face
Take a look at the Atmel AT91SAM9261:

http://www.atmel.com/dyn/products/product_card.asp?part_id=3638

It's a much bigger beast than a PIC but basically you're going to need
a lot of memory and processor speed to drive a large color graphics
LCD.

Cheers,
Zik

On 6/8/07, Harold Hallikainen <@spam@haroldSTOPspamspam@spam@hallikainen.org> wrote:
{Quote hidden}

> -

2007\06\08@001934 by Rikard Bosnjakovic

picon face
On 6/8/07, Zik Saleeba <zikspamBeGonespamspamBeGonezikzak.net> wrote:

> It's a much bigger beast than a PIC but basically you're going to need
> a lot of memory and processor speed to drive a large color graphics
> LCD.

Why would you need lot of memory for driving a color LCD? Would you
need less if it's monographic?

(I have not been able to play with any sort of LCDs yet)


--
- Rikard - http://bos.hack.org/cv/

2007\06\08@003624 by Zik Saleeba

face picon face
Well just given the description "high speed video" I'm guessing it'll
require quite a few pixels supporting quite a few colors. It's hard to
know without more information from Harold. But if the display was one
of these for instance:

http://www.sparkfun.com/commerce/product_info.php?products_id=8335

You're looking at a frame buffer size of 480*272*3. Double-buffering
for video that comes out to about 768kB. This is definitely out of
range of the 16F84A's internal memory :)

Maybe Harold could tell us a little more about his application so we
can make some more educated guesses?

Cheers,
Zik

On 6/8/07, Rikard Bosnjakovic <spamBeGonerikard.bosnjakovicspamgmail.com> wrote:
{Quote hidden}

> -

2007\06\08@172825 by Herbert Graf

flavicon
face
On Fri, 2007-06-08 at 06:19 +0200, Rikard Bosnjakovic wrote:
> On 6/8/07, Zik Saleeba <RemoveMEzikspamspamzikzak.net> wrote:
>
> > It's a much bigger beast than a PIC but basically you're going to need
> > a lot of memory and processor speed to drive a large color graphics
> > LCD.
>
> Why would you need lot of memory for driving a color LCD?

Storing the framebuffer. Most graphical LCDs do not contain any memory,
you have to send them every pixel, one after the other, all the time,
just like driving a VGA monitor, only you send the digital values (no
need for a DAC).

> Would you
> need less if it's monographic?

Yup, since each pixel would need less information (i.e. 8 bit grey vs.
24 bit colour).

TTYL



2007\06\08@180046 by Harold Hallikainen

face
flavicon
face
THANKS! I'll look at this.

Harold


{Quote hidden}

>> --


'[SX] Interested in LCD interface code?'
2007\07\07@030653 by Gsparisn/a
flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, Gsparis wrote:

Hi Paul,
I know it's been 3 years now but I am indeed interested in your code and schematics to control a 640x400 graphic LCD with an SX.

If you still have the files can you share them ?


Thanks,

Gilles
---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m200758
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

2007\07\11@074333 by RickBn/a

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, RickB wrote:

I too would like to see it. Did it not work out?

Rick
---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m201381
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

2007\07\11@080248 by beann/a

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, bean wrote:

I'd say that a Propeller would be more better choice.
Mainly because of the RAM requirements. The SX would require an external RAM chip.

Bean.

---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m201388
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

2007\07\11@092104 by Gsparisn/a

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, Gsparis wrote:

Well, I would say that this is where the challenge is !

I just started to get acquainted with the SX so for now I'd like to stick with it.

Bean, do you know how far Paul went in this project with the SX ?


Gilles
---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m201404
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

2007\07\11@100233 by beann/a

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, bean wrote:

Gilles,
 No I don't. Hopefully Paul will chime in here and bring us up to date.

 It CAN be done. I worked on a color video module using the SX48. 256x192x16 colors. Had it working too. But never finished it.

Bean.

---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m201413
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

2007\07\11@120034 by Gsparisn/a

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, Gsparis wrote:

Hope he will !
Actually, I would like to know how Paul managed the LCD power supplies (+5v and Vee) as I know negative power supply should only be applied after the Vcc.

By the way Bean, too bad you didn't finished your color project. It seemed quite interesting !
Actually, I bought the XGS ME  a year ago and I learned a bit of ASM and the NTSC and PAL signal generation on it.
I wish the SRAM management be more "classic"...

Gilles
---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m201438
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

2007\07\14@094426 by RickBn/a

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, RickB wrote:

Hey, hey, hey Paul!

Was the project successful? Inquiring minds in limbo land want to know.
If the SX can't do it I'm sure an AVR can. :-)   (that should wake him up) :-)
---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m202008
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

2007\07\20@075110 by RickBn/a

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, RickB wrote:

BOINK!

So.... Was the SX not fast enough? Say it ain't so Paul.

---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=1352#m203160
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2007 (http://www.dotNetBB.com)

More... (looser matching)
- Last day of these posts
- In 2007 , 2008 only
- Today
- New search...