Sparkfun Serial LCD Frozen

I had a lot of fun with the Sparkfun Serial Enabled LCD Kit. I assembled it and got it working just fine.

After a week or so, the screen froze and I can’t get it going again. Immediately preceding that, I’d spent 15 minutes trying to display the result of some text that i assembled by concatenation. It seemed to resulted in a huge amount of data being sent to the display but it was all garbled characters.

Now, when powered up, the backlight comes on, the splash screen does not display, line one is fully illuminated but flickers. Contrast is adjustable using the pot on the ATmega328.

I’ve tried:

  1. Resetting the ATmega328 by grounding the RST pin.
  2. Loading the Hello World sketch which mirrors the serial monitor to the display. It doesn’t work.

Any ideas? Do I need to reboot? Any one ever had to do that?

How did you have it wired up? What’s your code?

There’s a lot of things it could be, but we’ll need more information to work it out.

Oliver
Thanks for replying.

The wiring I’m using is:

Red to Arduino 5v
Black to Arduino GND
Yellow to Arduino Pin 3

The code I’m using is Hello World sketch given in the instructions, the one that mirrors the serial monitor to the display.

That setup and code worked fine when I tested my kit build. Now it doesn’t work. Nothing works, not even the splash (www.sparkfun.com).

I think the preloaded code has been corrupted. Is there a way to do a hard reboot without a bootloader? I don’t have an FTDI Adapter.

Regards
Gordon

Have you tried to reset to factory default settings?

Emergency reset to factory settings
(Jumper RX to GND on bootup)

I did as you suggested, grounded Rx (Yellow) on boot.
Here’s a screenshot my sketch and input at the Serial monitor.
Nothing appeared on the display. I took a photo and will send that separately.

Hi Gordon,

Since it was working fine and is no longer working there’s a fair chance that something was misconnected and/or damaged, but definitely still worth trying to replace the bootloader on the uC.

You can use your functioning Arduino as a programmer for the ATmega328p in the LCD kit. Sparkfun has a really good tutorial here: https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader/all
See also: https://www.arduino.cc/en/tutorial/arduinoISP

Sparkfun’s page for the Serial LCD kit has heaps of great info, including a links to their GitHub repo with the Firmware.

It’s also worth taking a very close look at your circuit board and checking for any broken or shorted solder/traces.

PS. Even if your code works you’ll only get every second character. I’d suggest changing your test code to this:

char x;
void loop() { // run over and over
  if (Serial.available()) {
    x = Serial.read();
    Serial.print(x);
    lcd.print(x);
  }
}
1 Like

Oliver
Thanks, that was helpful.

I found a set of 6 test points on the Serial LCD that I assume to be ISP test points. One is marked, which I assume to be Pin 1 (MISO).

It looks like I’ll need to connect my Arduino to the ISP test points on the Serial LCD using an ISP Pogo Adapter. Correct?

Gordon

1 Like

The Pogo Adapter is $20!
Is there another way to connect to the ISP test points?

You need a stable electrical connection. Pogo adapters are just convenient. You could solder wires or a header there if you like.

May I could solder my jumpers then remove them when reprogramming is completed?

Gordon
M 0418 840 476

Of course.

If your μC is dead you can get another ATmega328p pretty cheap: ATmega328P-PU Atmel AVR Microcontroller Australia

I soldered jumpers to the ISP test points and managed to successfully reburn the bootloader on the Serial LCD. NOt difficulat when you know what you’re doing.

Then I tried running the Hello World sketch. The good news is, the display doesn’t flicker any more. The bad news is the sketch (modified as you suggest) doesn’t work, characters displayed on the Serial Monitor are not mirrored to the LCD Display.

Should I reload the Firmware? If so, can you get me started with some links.

1 Like

You could use the usb to serial chip on your arduino to program the Atmega328p on the LCD pcb. Try removing the atmega328p from your arduino, and connecting Rx, tx etc as appropriate to the atmega328p on the LCD pcb.

A quick bit of googling got me this forum thread: https://forum.arduino.cc/index.php?topic=5214.0

Also worth taking a look at the arduino schematics. Note that in this special case you’ll want to wire Rx to Rx and TX to Tx to match the arduino pcb connections.

Ps. I’m assuming you’re using an uno or nano. You’ll still be able to do this with a different arduino, but it’s more complicated if you’re at different voltage levels and you should probably just get yourself a USB to serial adapter.

Pps. Core have a tutorial on this: https://core-electronics.com.au/tutorials/programming-with-usb-serial-converters.html

Ppps. You can get a usb ttl module on ebay for under $5-10: https://www.ebay.com.au/itm/383565632148
I’m all for supporting these guys though so worth buying one from Core if you can afford a few bucks extra.

Oliver
I failed in uploading the Firmware to the Serial LCD. Here’s what I did:

  1. Removed the Arduino’s ATmega328 chip;
  2. Soldered jumpers to the Serial LCD’s GND, PWR, Rx and Tx test points;
  3. Jumped the Arduino’s Rx and Tx to the Serial LCD’s Rx and Tx respectively;
  4. Jumped Arduino’s PWR and GND to Serial LCD’s PWR and GND;
  5. Copied the Serial LCD Firmware code from GitHub;
  6. Pasted the Firmware code and saved it as a new sketch in the Arduino IDE;
  7. Connected a USB cable between the Arduino and my computer;
  8. Verified the Arduino’s serial connection was recognised using IDE>Tools>Ports;
  9. Selected IDE>Tools>Board> Arduino Uno;
  10. Clicked IDE>Upload.

Initially Arduino’s Rx and Tx LEDs flickered, then only the Rx LED at intervals of 8 seconds. After 80 seconds, I got this error message from the IDE debugger:

"An error occurred while uploading the sketch

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xe8"

I tried the same thing a second time, but holding a jumper between Arduino 5v and the Serial LCD DTR test point. Same result.

Any ideas?
Gordon

Oliver
I just realised something:

I used the Arduino’s D0 (Rx) and D1(Tx) Pins … Maybe these don’t work when the ATmega328 is missing?

Should I be using the ICSP on the Arduino’s ATmega16U2 chip, and the ICSP test points on the Serial LCD.

If so, the connections would be

  • MOSI to MOSI,
  • MISO to MISO,
  • SCK to SCK,
  • +5v to +5v,
  • GND to GND,
  • RST to 5v.
    Right?

Regards, Gordon

1 Like

Hi Gordon,

Yes, those appear to be the correct connections that’d be required. As always, be sure only to apply power after completing and then checking each connection so as not to damage the parts, but yes, the ICSP ports should work.

Bryce
Core Electronics | Support

Hey Gordon,

The 16U2 is connected straight to the RX/TX pins (see the UNO R3 schematic below)


You’ll need to make sure you reproduce all the connections between the 16U2 and the 328P on the serial board. Follow the schematic carefully (don’t forget to connect Vcc and Gnd).

You’ll need to make sure you have connections on the 328P on your serial PCB for at least the following:

image

  • 1 (Reset)
  • 2 (Rx)
  • 3 (Tx)
  • 7 (Vcc)
  • 8 (Gnd)
  • 22 (Gnd - yes, it’s best to make sure both are connected).

Bryce/ Oliver
Looks like I need to make the following changes to the ATmega328:

Hey Gordon,

The image you’ve added didn’t come through. Can you please try again or upload it to a cloud platform so we can take a look at it from there. Thanks.

Bryce
Core Electronics | Support

Bryce
Not sure why my previous message got truncated, there was no image.

But I’ve been reading up and I now understand that the 328_DTR must be pulsed low to load a new sketch.

The Arduino’s 16U2_DTR pulses low when data is waiting on the USB cable. In the Arduino that low pulse connects via circuitry to reset the Arduino’s 328, which triggers the bootloader to anticipate data (a new sketch) on the USART.

The Serial LCD board has a DTR test pin. I just need to figure out what to connect it to on the Arduino board.

Regards
Gordon