Go Down

Topic: Arduino Uno - 7 Segment Shield problem (Read 1 time) previous topic - next topic

AlinaDitu

Hello everyone!

Before everything, let me state that I am a complete beginner trying to use arduino.

I am using Arduino  Uno with ATMEGA328p.

I have been trying to make a program that would have as an output some kind of a timer displayed on a Serial 7-Segment Display. (https://learn.sparkfun.com/tutorials/using-the-serial-7-segment-display/7-segment-shield)
At first, everything worked nice, I was getting accustomed with the IDE and the microcontroller programming, trying different programs. The first program I used to make the Arduino with atmega and the display communicate was https://github.com/sparkfun/SevSeg/blob/master/Libraries/SevSeg/Example/SevSeg_Counter/SevSeg_Counter.ino
which worked fine. Then I starded modifying the program in order to get accustomed with this type of programming. I guess I did something wrong at the declaration of the pins that were connected to the display, because when I uploaded the modified program onto the board, the display showed 0000.
Since then I have tried everything to make the shield display anything, at least the first tried program, but it won't display anything but 0000.
I even bought another ATMEGA328p and another shield, but whenever i try to upload the program from above, the same thing happens : 0000 is displayed.

Is it possible that I have done something to ruin the board?
Does anybody happen to know what the problem is and how can I fix it?

Thank you very much!

mechanoid

I've got the same problem.  I used an Arduino to send data to the seven segment display board, via the output pin 8 to the Rx input on the shield.  This worked fine.  Then I used an Arduino Pro mini board, but instead of connecting an output pin, I connected the Pro mini Tx output to the shield Rx input (dumb !)

I think what  happened is that when I sent the program to the Pro mini board, it also sent it on to the shield, so rendering its firmware useless. Now it only shows 0000, even when correctly reconnected to the Uno board.

So now I'm trying to download and compile the firmware routines, so that I can re-program the shield.  Trouble is, the only SevSeg library that I've found doesn't have exactly the same methods as are called up in the firmware routine. For instance, it has a method called "Brilliance", whereas the firmware calls a method called "SetBrilliance".

IF I ever sort this out, and IF I ever manage to reload the firmware, I'll certainly let you know.

In the meantime, if anyone can shed any light on exactly how to rebuild the firmware on the shield, I'd be grateful for your help.

Zapro

I am pretty sure, if the display displays 0000, then the firmware on the shield is not deleted or overwritten, because for the display to show 0000, the Atmega needs to run the correct program and scan the displays.

There must be another problem somewhere.

// Per.

mechanoid

Cracked it !!!   
It was indeed corrupted firmware, and I've succeeded in reloading it.  Now its counting again. There's a lot to explain, so let me know if you are still interested, and I'll try and explain tomorrow.

Zapro


Cracked it !!!   
It was indeed corrupted firmware, and I've succeeded in reloading it.  Now its counting again. There's a lot to explain, so let me know if you are still interested, and I'll try and explain tomorrow.


I think it's great if you tell us, what was wrong, and what you did to fix it, because sooner or later, another user will encounter the same problem, and hopefully use the search-function, and then find your answer.

// Per.

mechanoid

7 segment serial display firmware installation

Hardware
To reprogram the display board, you'll need a USB to serial converter.  The one I used was the FTDI basic breakout -5V, obtained from Hobby Electronics. Connect this to your USB port and you will see a new serial port - this is the one you select under Tools-Serial port. I kept to the default 9600 baud.

You will need to solder a six pin header to the end of the display board, soldered from the connector side. I used a 90 degree type. Match DTR to DTR when plugging in FTDI board.  This is ALL the hardware you will need.

Firmware
The firmware I used was located here.
https://github.com/sparkfun/Serial7SegmentDisplay/tree/master/firmware/Serial%207-Segment%20Display/Serial_7_Segment_Display_Firmware
Save the Serial_7_Segment_Display_Firmware.ino and System_Functions.ino to your sketchbook.  The settings.h file goes in the libraries folder. Store it in a temporary folder called SevenSegmentSettings. The go to Sketch - Import Library - Add Library and select that folder, which will automatically be added to your libraries folder.

You will also need the correct SevSeg library, which I found here...
https://github.com/sparkfun/SevSeg/tree/master/Libraries/SevSeg
Do NOT use the version on the Arduino website - its not the right one. This should be added to your libraries folder.

Open Serial_7_Segment_Display_Firmware.ino, then add the file   System_Functions.ino (Sketch - Add File).
Important. In Serial_7_Segment_Display_Firmware.ino, change  #define DISPLAY_TYPE OPENSEGMENT to #define DISPLAY_TYPE S7S

Now if all is well, this should compile without errors.

Before downloading, go to Tools - Board and select Serial 7-segment display as the type. Now download the firmware. If all went OK the display will now show 1234, and you're back in business !

Good Luck.



Go Up