Thanks,
I will be back on that project in 48 hours so I will let you know how it goes. Your explanations make excellent sense.
Thanks again
Brian
Thanks,
I will be back on that project in 48 hours so I will let you know how it goes. Your explanations make excellent sense.
Thanks again
Brian
And a simple add at the bottom of the List...
1. You Should also disable the LVP mode, sometime it could do some strange behaviour..Code:@ Device pic16F877A, HS_OSC, BOD_OFF, PWRT_ON, WDT_ON, PROTECT_OFF
2. Could be interesting to enable the BOD... safety sake.
good luck!
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
I have implemented Darrel's suggestions and they improve the situation but do not fix it. The LCD now starts about 50% of the time - up from less than 10% - but still not a solid solution.
I think the problem lies (in part) in the power supply dV/dT at startup. Depending where in the mains cycle the unit is turned on, the power rise time can be from 20 - 90 mSecs. The data sheet implies the rise time should be under 10 mSecs and if that cannot be guaranteed, then a software reset sequence should be followed.
Does anyone know the software sequence for 4 bit mode? The only examples I can find are both ambiguous and written for 8 bit mode which I cannot implement on this existing PCB with all i/o pins used on the PIC16F877A.
Cheers
Brian
What happen if you tie the PORTB.3 to gnd via 10K (or less)?
Did you tried to enable the BOD (brown out voltage) and disable the LVP (Low voltage programming) mode?
If nothing work, maybe, you could add a little capacitor (0.1-1uF) between MCLR and GND... maybe.
Schematic?
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi Mister-e.
The PIC always starts. I know this because I have solenoids and switches and the switches always control the solenoids correctly. I think that rules out BOD or LVP issues. The 2 x 16 LCD always starts with the top row all black boxes and the lower row blank. When it starts properly, the LCD clears in about 500 mS and shortly afterwards the expected characters appear. When it does not start, the top line remains black and nothing appears on the lower line.
I have tried 100 nf, 1uf and 10 uF as the MCLR capacitor with 10k to +5. Again the PIC always starts.
The big 12 V 10 amp power supply is relatively slow to start and turning it on/off at the wall shows the LCD problem much more often than leaving the power supply on all the time and make/break the power line to the processor board. A scope shows the +5V rise time as 20-100 mS for on/off at the wall and under 1 mS for make/break to the 12 volt feed to the processor board. dV/dT is clearly part of the problem.
A web search has turned up www.densitron.com and they have a discussion on timing aspects plus 4 bit and 8 bit modes. They make much of the tight timing restrictions between the Enable, RegisterSelect, data transitions and Read/Write lines and say this is a common problem with faster processors. sadly their app note is shot with typos and they do not define the pin functions (should RS be high or low during write? - they show it as both)
I have the distinct feeling that PBP may be marginal with some brands of LCD at higher crystal speeds.
Cheers
Brian
try...
What happen?Code:Start: Pause 1000 LCDOUT $FE,1,"First" Pause 1000 FLAGS=0 LCDOUT $FE,1,"Second" pause 1000 FLAGS=0 LCDOUT $FE,1,"Third" Loop: Goto Loop
I heard that some LCD may need up to 2 second to start correctly... but i never had one in my hand![]()
Last edited by mister_e; - 18th October 2006 at 01:34.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi mister-e.
Your code, after fixing the start/loop and flag issues, does not work on power up. It does work after a MCLR reset but so do all my attempts.
I am trying now to implement the full reset sequence in code.
Bookmarks