Problems with 18F458


Closed Thread
Results 1 to 19 of 19
  1. #1
    Join Date
    Aug 2005
    Posts
    12

    Unhappy Problems with 18F458

    Hi everyone, I hope I can get some help on this great forum! =)

    I have recently moved from PIC16F18 to PIC18F458, and I have remade one of my old programs for testing with the new processor. The program is supposed to write som text on a standart HD44780 LCD, and it worked fine on the 16F84. When I now connect my LCD to 18F458, the screen shows the last to symbols of the text string in the start of line 1, the screen also flickers in a wierd way, and the cursor is blinking, although I turn it off in the program. Sometimes when I get my fingers close to the processor, or the quartz crystal the screen goes baserk and starts writing some nonsense on both lines (still flickering). I don't know whats worng, since I have everything correctly connected and everything. I don't think, that it could be the program, because I tried with the simpliest thing (two flashing LED's) and it also worked out kindda wierd...Any ideas? Thanks, any help will be appreciated!

    Regards Denis

  2. #2


    Did you find this post helpful? Yes | No

    Default

    What does your code look like? What pins is the LCD connected to? What are you using for an oscillator?

  3. #3
    Join Date
    Aug 2005
    Posts
    12


    Did you find this post helpful? Yes | No

    Default

    I use a 4 Mhz crystal as osc. and I use PORTB as output, this is what my code looks like, I have included the library for LCD in the txt file:

    LIST p=18F458 ;tell assembler what chip we are using
    include "p18f458.inc" ;include the defaults for the chip
    ERRORLEVEL 0, -302 ;suppress bank selection messages

    cblock 0x20 ;start of general purpose registers
    ;LCD
    count ;used in looping routines
    count1 ;used in delay routine
    counta ;used in delay routine
    countb ;used in delay routine
    tmp1 ;temporary storage
    tmp2 templcd ;temp store for 4 bit mode
    templcd2

    endc

    LCD_PORT Equ PORTB
    LCD_TRIS Equ TRISB
    LCD_RS Equ 0x04
    LCD_RW Equ 0x06
    LCD_E Equ 0x07


    ;--------Program-------------------


    SetPorts
    movlw 0x00 ;make all pins outputs
    movwf LCD_TRIS ;wait for LCD to settle
    call Delay100
    call LCD_Init ;setup LCD
    call LCD_CurOff

    ld
    call LCD_Line1
    movlw 'H'
    call LCD_Char
    movlw 'e'
    call LCD_Char
    movlw 'l'
    call LCD_Char
    movlw 'l'
    call LCD_Char
    movlw 'o'
    call LCD_Char
    movlw ' '
    call LCD_Char
    movlw 'W'
    call LCD_Char
    movlw 'o'
    call LCD_Char
    movlw 'r'
    call LCD_Char
    movlw 'l'
    call LCD_Char
    movlw 'd'
    call LCD_Char
    movlw '!'
    call LCD_Char
    movlw '!'
    call LCD_Char
    movlw '!'
    call LCD_Char

    endprg goto endprg


    include <lcd.lib>


    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    end
    Attached Files Attached Files

  4. #4
    Join Date
    Feb 2004
    Location
    Germany
    Posts
    762


    Did you find this post helpful? Yes | No

    Default

    Russian,

    Do you have a pullup resistor on MCLR ?

    And hey, this is a PICBASIC Forum !
    regards

    Ralph

    _______________________________________________
    There are only 10 types of people:
    Those who understand binary, and those who don't ...
    _______________________________________________



  5. #5


    Did you find this post helpful? Yes | No

    Default

    Sorry but assembly is greek to me.

  6. #6
    Join Date
    Sep 2004
    Location
    Tallinn, Estonia
    Posts
    42


    Did you find this post helpful? Yes | No

    Default

    Did you configure your 18f458 correctly? Especially LVP_OFF! This was the mistake, i made.
    Here is my code, check for the LCDPUTCHAR routine.
    Attached Files Attached Files

  7. #7
    Join Date
    Aug 2005
    Posts
    12


    Did you find this post helpful? Yes | No

    Default

    I'm sorry, I know that this is a PIC Basic forum thats why I hadn't posted my code In the first thread. Yes, I have a pullup on MCLR, and LVP is off. Here I have a picture of what my screen shows when my program tries to write "Hello world!!!"
    Attached Images Attached Images  

  8. #8
    Join Date
    Sep 2004
    Location
    Tallinn, Estonia
    Posts
    42


    Did you find this post helpful? Yes | No

    Default

    May-be your clock speed is too high? PLL ON perhaps?
    Try simulating your code in MPLAB. If this works OK, it's something in hardware. If not, you'll find the bug quickly.

  9. #9


    Did you find this post helpful? Yes | No

    Default

    I was just looking at your picture an couldn't help but notice the leads coming for the crystal. Shouldn't there be a empty space in between the pins. It looks like the pins are spaced at 0.100". It might be just the picture but I think the crystal is actually 0.200" pin spacing.

  10. #10
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    My 2 cents... the crystal is really to far of the PIC, and try to remove both capacitor... breadboard capacitance
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  11. #11


    Did you find this post helpful? Yes | No

    Default

    I actually found running 22pF with our PIC's caused us loads of troubles. Things would reset all the time, corrupt displays and sensors. Removed the capacitors and everything works fantastic now. Scope the ocsillator output and noticed the capacitors were actually causing a lot of noise.

  12. #12
    Join Date
    Jul 2003
    Location
    Sweden
    Posts
    237


    Did you find this post helpful? Yes | No

    Post

    100ms delay before you initialize your display could be too short. Many displays needs alot more. Try a couple of seconds and see if that makes it work.

  13. #13
    Join Date
    Aug 2005
    Posts
    12


    Did you find this post helpful? Yes | No

    Unhappy

    No, I tried everything, removed the caps, set the most of the conf. bits to be negative, moved the osc. closer, increased the init delay (though it has worked well with 100 with the same display but a PIC16F84)....nothing helps, it still writes "!" in the start of the first line instead of the "Hello world!"

  14. #14
    Join Date
    Aug 2005
    Posts
    12


    Did you find this post helpful? Yes | No

    Default

    Btw. here is a picture of my cfg.
    Attached Images Attached Images  

  15. #15
    Join Date
    Sep 2004
    Location
    Tallinn, Estonia
    Posts
    42


    Did you find this post helpful? Yes | No

    Default

    Switch OFF LVP and BOR (brown-out-reset). If does not help, send your full code, i'll try to simulate it.
    Btw, do you use 8 or 4-bit interface to LCD?

    PS. Are you sure your code worked and that you ported it correctly? Type of LCD is also interesting.
    PS/1. X-tal must be placed right next to uP, no wires!

  16. #16
    Join Date
    Aug 2005
    Posts
    12


    Did you find this post helpful? Yes | No

    Default

    LVP & BOR off, now it is only the cursor that blinks in the start of the line, no letters, I have my x-tal next to the uP no caps, I use 4 bit connection, with the RW pin grounded (thats why the initialize delay is 100, I did that for decreasing the number of pins used on my old PIC). Well, the display uses a normal 44780 controller it has the normal japaneese signs in the end of the ASCII table replaced with kyrillic letters, since I bought the LCD in Russia, there are really not much more about the display. Btw. I noticed, that when I short the x-tal pins with my finger, the text gets on it's right place, but as soon as I remove my finger it gets back to the blinking at the start of line 1.

    Here is my full code and the LCD library (not mine, I only edited it).
    Attached Files Attached Files

  17. #17
    Join Date
    Sep 2004
    Location
    Tallinn, Estonia
    Posts
    42


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Russian
    Btw. I noticed, that when I short the x-tal pins with my finger, the text gets on it's right place, but as soon as I remove my finger it gets back to the blinking at the start of line 1.
    Haa, this might explain everything! What's your clock freq.? Too high possibly. Anyway, I'll take a look at the code now.

    Did you know that sub delay100 actually delays only 1,4 ms!!! ? Otherwise code works OK (on PIC18F452). You must add delays:
    - before initializing LCD, about 100mS (use MPLAB-s simulator to check time)
    - delay about 2mS after sending cmd or data to LCD (in the lib file)
    See code.
    Attached Files Attached Files
    Last edited by Felch; - 29th August 2005 at 18:07.

  18. #18
    Join Date
    Aug 2005
    Posts
    12


    Did you find this post helpful? Yes | No

    Default

    Sorry, but i have never tried to use MPLAB so I don't know how to use the simulator =( But, that delay, you added in the end of the LCD.lib file, there stands that it is written for an 11,0592MHz clock how should I handle that? Anway, I tried to compile the program and run it, well there stands a 0 in the end of line1 and there stands something wird in the end of line 2...And, btw. how do I make that 100mS delay before init (I am a almost total lost, especially when things don't work)? Just add a loop that takes your routine 100 times?

    Thanks for great responding!!!

  19. #19
    Join Date
    Sep 2004
    Location
    Tallinn, Estonia
    Posts
    42


    Did you find this post helpful? Yes | No

    Default

    Hi!
    MPLAB is a great simulator for checking loop execution times and so on. It has it's bad sides also but i guess not here.
    Anyway, i wanted to point out that if your xtal freq.=4MHz (usual), your 100mS delay loop actually delays much less, abot 1,4 mS!!! This will most probably explain veird LCD behaviour since it's a relatively slow device. Datasheets indicate that user should poll the BUSY flag before sending any kind of data to screen. In practice, it is rearely done, usually one would simply wait long enough to be at the safe side and then send another data/cmd byte.
    So i added a routine that would delay some time at mentioned crystal freq. If your clock is slower then it simply takes some more time and that's all. Everything should work. It it's faster, you must add delay time.
    I can not possibly comment 0-s or other chars at end of lines since i am not familiar with your enviroment. Still i hope you got the general idea (make it slower or poll busy flag).
    Btw, what is your xtal frequency and what about your programming language?
    Does it really have no means for measuring loop times?

    Drop me a mail if anything remains unclear
    /Felch

Similar Threads

  1. Problems programming
    By Lionheart in forum General
    Replies: 4
    Last Post: - 7th December 2008, 16:51
  2. bootloader Freqout problems
    By handgio in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 5th December 2007, 13:38
  3. Problems with PORTD on 18F658
    By blainecf in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 13th June 2006, 17:32
  4. Problems with 16F876 on interrupts an WRITE / READ
    By BigWumpus in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 20th December 2005, 14:38
  5. USART problems
    By egberttheone in forum mel PIC BASIC Pro
    Replies: 47
    Last Post: - 6th March 2005, 21:45

Members who have read this thread : 1

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

Posting Permissions

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