Announcement

Collapse
No announcement yet.

"Missing internal f(unction?)" on uLCD-144-G2 / general serial timing issues

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • "Missing internal f(unction?)" on uLCD-144-G2 / general serial timing issues

    We've bought quite a few uLCD-144-G2 modules and used them in our products, but the implementation has been pretty severely limited - we've really only ever used them for text display. Somewhat sad from this neglect of a considerably powerful platform, I'm trying to get it to do more than be a glorified color character LCD. So I'm trying now to work with graphics (circles, lines, etc), which required tossing our custom library aside and using 4D's Goldelox_Serial_4DLib.h in Arduino.

    What I've found, though, is that the Goldelox CPU (GPU?) is *very* prone to serial command timing mismatches... e.g. sending a command and expecting a solid response, but there had been a prior glitch in the Goldelox serial buffer that now causes it to completely screw up all future commands, always timing out the Arduino library and showing "Missing internal f" on the LCD, cut off the end. Forum searching led me to find that it was "Missing internal function xx".

    But the results I find are all people using SPE programs, while I'm doing all the programming on Arduino and using the LCD as a display device, not a processor. So we don't even have MicroSD cards installed, as we don't really have any media to display...

    The Arduino library seems incapable of "re-initializing" the LCD, or responding to an out-of-sync event. In a quick test, I tried re-centering it by repeatedly sending 0x00, flushing, waiting about 10ms, and looking for a response in serial buffer... but nothing came back! No ack or nack, just dead air, so the routine I tried just times out after a few seconds and "Missing internal f..." appears on the LCD.

    It seems quite difficult and problematic to program with this thing, as the LCD should be initialized at startup, and its startup seems to always (75% of the time) result in a timing mismatch requiring the device to be power-cycled to try again. I can't seem to find a way to detect that the LCD's not "serial-aligned" properly and fix it...

    The problem also manifests itself when using Workshop, as I haven't yet been able to get it to display anything but a red "status" - though Serial Commander works OK, letting me blit an image to the LCD or run other functions just fine. Sometimes, though, I get something like "sys_GetVersion[0008 ] 0.004 (Error: Command response was NAK 4124 0x101C)" for every command.
    Last edited by FalconFour; 6th July 2015, 04:48 PM.

  • #2
    What baud rate are you communicating between Arduino and the display? Comms errors should be very rare unless there is a significant baud rate missmatch.

    What version of SPE do you have loaded. The the "Missing internal f" (which is indeed shorted due to the width of the display) message is a bug that occurred prior to the 1.3 release. If that has come up the display freezes for 5 seconds to ensure that this 'should not occur' message is read.

    If a comms timing error occurs you can send 0x00 slowly, one at a time until you receive a NAK then you will be back in sync.

    What cable are you using to connect the display to Workshop? (relevant to the Red "Status")

    Mark

    Comment


    • #3
      I'd been using 9600 baud for most of it. I hadn't been able to get a switch to 57600 baud working yet, so I only ever really messed with 9600 since I couldn't even get good comms (from Arduino using library) to the screen for the longest time. I took most of my clues from the BigDemo example program (which requires an SD? But worked anyway, mostly), but had trouble once I started to use it on my own.

      Not sure about the SPE version... I hadn't changed any firmware at all since it was out of the box. Replying now from home (the hardware is back at the shop), I'll get it next time I'm in - I think it's on the idle startup screen, right?

      As for the cable, I've been using this: http://tinyosshop.com/index.php?rout...product_id=186 - which has worked amazingly well (up to 250k baud streaming images to it!) with Serial Commander but hardly once with Workshop. I haven't really done much of anything with Workshop since it's so SD card-centric - seems I can't even map out lines & circles, or test serial library functions with it (or get docs or help with the Arduino library), so I hadn't played with it much. :/

      Presumably, to get it back on track using 0x00, I could just wait for any serial response, right? How long should I have it wait before checking the buffer & deciding to try sending another 0x00?
      Last edited by FalconFour; 6th July 2015, 07:16 PM.

      Comment


      • #4
        Bigdemo will do tests that don't need a uSD if there isn't one present.

        That cable does not supply the reset signal required. Without that Serial commander will work (except for the reset button). Workshop and PmmC loader will not work as they need Reset. You can convert DTR to reset using the circuit here http://forum.4dsystems.com.au/forum/...-usb-to-serial

        The time to wait after sending 0x00 and before the next is really just over one character time, as the display will pretty much immediately respond with a NAK, but you need to take into account potential latency in the receiving system, so a few ms should work in most cases.
        Mark

        Comment

        Working...
        X