Why is it so

Why is it that my matrix clock only scrolls the time/date when on external power adapter, yet shows both scrolling time/date and just time when on usb from pc, could this be because removing the USB of the PC you lose the serial port or is it a mistake in the way the writing of the program has been done.
Program is run on arduino uno, max7219(8), ds3121 rtc.
Program code below.

[/#include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

/* Max7219 settings */
int pinCS = 10; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 5;
int numberOfVerticalDisplays = 1;


Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
RTC_DS1307 rtc;

unsigned char a;
 unsigned char j;
 
/*Port Definitions*/
int Max7219_pinCLK = 13;
int Max7219_pinCS = 10;
int Max7219_pinDIN = 11;
 
unsigned char disp1[38][8]={
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
{0x10,0x18,0x14,0x10,0x10,0x10,0x10,0x10},//1
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},//2
{0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0},//3
{0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8},//4
{0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0},//5
{0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x0},//6
{0x3E,0x22,0x4,0x8,0x8,0x8,0x8,0x8},//7
{0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E},//8
{0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E},//9
{0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A
{0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0},//B
{0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0},//C
{0x7C,0x42,0x42,0x42,0x42,0x42,0x7C,0x0},//D
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C},//E
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40},//F
{0x3C,0x40,0x40,0x40,0x40,0x44,0x44,0x3C},//G
{0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44},//H
{0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C},//I
{0x3C,0x8,0x8,0x8,0x8,0x8,0x48,0x30},//J
{0x0,0x24,0x28,0x30,0x20,0x30,0x28,0x24},//K
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C},//L
{0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81},//M
{0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0},//N
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x20},//P
{0x1C,0x22,0x22,0x22,0x22,0x26,0x22,0x1D},//Q
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
{0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C},//S
{0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8},//T
{0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C},//U
{0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18},//V
{0x0,0x49,0x49,0x49,0x49,0x2A,0x1C,0x0},//W
{0x0,0x41,0x22,0x14,0x8,0x14,0x22,0x41},//X
{0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8},//Y
{0x0,0x7F,0x2,0x4,0x8,0x10,0x20,0x7F},//Z
};

/* Set up Scrolling Time and Date settings */
String tape ="99:99:99  99/99/9999";
int tape_length = 22;
int wait = 50; // In milliseconds

int spacer = 1;
int width = 5 + spacer; // The font width is 5 pixels
int i = 0;

/* Set up display of Time only */
void Write_Max7219_byte(unsigned char DATA) 
{   
            unsigned char a;
	    digitalWrite(Max7219_pinCS,LOW);		
	    for(a=8;a>=1;a--)
          {		  
             digitalWrite(Max7219_pinCLK,LOW);
             digitalWrite(Max7219_pinDIN,DATA&0x80);// Extracting a bit data
             DATA = DATA<<1;
             digitalWrite(Max7219_pinCLK,HIGH);
           }                                 
}
 
 
void Write_Max7219(unsigned char address,unsigned char dat)
{
        digitalWrite(Max7219_pinCS,LOW);
        Write_Max7219_byte(address);           //address,code of LED
        Write_Max7219_byte(dat);               //data,figure on LED 
        digitalWrite(Max7219_pinCS,HIGH);
}
 
void Init_MAX7219(void)
{
 Write_Max7219(0x09, 0x00);       //decoding :BCD
 Write_Max7219(0x0a, 0x03);       //brightness 
 Write_Max7219(0x0b, 0x07);       //scanlimit;8 LEDs
 Write_Max7219(0x0c, 0x01);       //power-down mode:0,normal mode:1
 Write_Max7219(0x0f, 0x00); //test display:1;EOT,display:0
 
}

void setup()
{
  
/*Init Max7219*/  
  pinMode(Max7219_pinCLK,OUTPUT);
  pinMode(Max7219_pinCS,OUTPUT);
  pinMode(Max7219_pinDIN,OUTPUT);
  delay(50);
  Init_MAX7219();
  
/* Check if RTC running and set intensity of display */  
 matrix.setIntensity(0); // Use a value between 0 and 15 for brightness
  #ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();
  
 if (! rtc.isrunning()) {
    matrix.print("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {

  DateTime now = rtc.now();
  
  
  /* Scrolling to show the date and time */
  
  tape[0] = '0' + ((now.hour())/10);  // I assume you want the time first
  tape[1] = '0' + ((now.hour())%10);
  tape[3] = '0' + ((now.minute())/10);
  tape[4] = '0' + ((now.minute())%10);
  tape[6] = '0' + ((now.second())/10);
  tape[7] = '0' + ((now.second())%10);
  
  tape[10] = '0' + ((now.day())/10); 
  tape[11] = '0' + ((now.day())%10);
  tape[13] = '0' + ((now.month())/10);
  tape[14] = '0' + ((now.month())%10);
  tape[16] = '0' + ((now.year())/1000);
  tape[17] = '0' + (((now.year())/100)%10);
  tape[18] = '0' + (((now.year())/10)%10);
  tape[19] = '0' + ((now.year())%10);
  
  for ( int i = 0 ; i < width * tape_length + matrix.width() - 1 - spacer; i++ ) {

    matrix.fillScreen(LOW);

    int letter = i / width;
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2; // center the text vertically
    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < tape_length ) {
        
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
      }
      
      letter--;
      x -= width;
         }
     matrix.write(); // Send bitmap to display
        
    delay(wait);    
}
/* Print time only */
char timeStr[6]; // enough space for "XX:XX\0"
sprintf( timeStr, "%02d:%02d", now.hour(), now.minute() );
matrix.print( timeStr );
matrix.write();

for(j=0;j<38;j++)
  {
   for(a=1;a<9;a++)
    Write_Max7219(a,disp1[j][a-1]);
   delay(700);

}
}code]

No idea. Are you sure you want "tape" to be a "String" ? All your code looks like it would work fine using the much simpler char array... (I'm not even sure you can initialize a String in the way you have written. (Although I don't think it explains the behavior you're talking about...))

could this be because removing the USB of the PC you lose the serial port

Which Arduino are you using?

Mark

In answer to holmes4
Running a Arduino UNO, IDE 1.0.5, 8xmax7219,and DS3121/DS1307.

In answer to Greensprings
USB power from PC to the Matrix cct is 4.79v,
Power adapter to Matrix cct is 4.93v, I do not think power is a problem.

could this be because removing the USB of the PC you lose the serial port

As your using an Uno, then no as it can't tell if the Usb is connected or not.

Mark

Power adapter to Matrix cct is 4.93v, I do not think power is a problem.

How and where is this external voltage being supplied to the Arduino and matrix circuit and is the voltage that you quote with or without the Arduino and any associated circuitry connected and USB disconnected or with no load ?

In answer to UKHeliBob

Both readings were taken from the bread board with all cct's attached, eg Arduino UNO, only 5xMax7219, and DS1307.

JQuinn: In answer to UKHeliBob

Both readings were taken from the bread board with all cct's attached, eg Arduino UNO, only 5xMax7219, and DS1307.

How and where is this external voltage being supplied to the Arduino and matrix circuit

External power is supplied from external Power Adapter into the DC connector of the Arduino. I forgot to mention that when external power is applied program the display scrolls time/date then shows the time for the length of the delay then scrolls display then there is no time displayed but the delay is still there then it repeats time/date no time only length of display. Hope this helps.

Power is measured in Watts and the product of Volts * Current. The Arduino DC connector, feeds a Voltage regulator, which can only supply a certain amount of Current to your circuit. Measuring the supply Voltage tells you the Voltage is within specification but does not tell you how much power or whether your circuit is trying to draw more current than the supply or regulator can provide.

The amount of current drawn will vary quite a lot, depending on the number of LEDs you have lit and the code being executed by the Arduino's processor. When your circuit gets close to exhausting the supply, the circuit behaviour can become un-predictable. When the supply is exhausted, the Arduino will almost certainly reboot, which can make a power issue look like a hard to find programming error.

I don't know whether your issue is programming or power but you might find this article useful. http://playground.arduino.cc/Main/MAX72XXHardware#PowerSupply

In answer to MattS-UK I have read the article and I am running a powered hub for the USB to the Arduino, and a 12v/1a power adapter for the external supply. I am running a 5x7 grid for letters and numbers. As I mentioned before when external power is applied to the program the display scrolls time/date then shows the time for the length of the delay then scrolls the display then there is no time displayed but the delay part of the program is still there then it repeats time/date then no time only the length of display, so you would think that if there was not enough power it would effect the scrolling, not the static time display. How much power can the regulator on board supply.

JQuinn: In answer to MattS-UK ...so you would think that if there was not enough power it would effect the scrolling, not the static time display.

I have been fault finding for a living, far too long to think like that. ;)

A power problem can cause unexpected or unpredictable behaviour, is as far as I am prepared to think. To try to isolate the fault, I would get a multi-meter and measure the current. I have invested in a multimeter which records maximum values and made my own test leads. So I can carry out current measurements quickly and easily, because checking there is enough and not too much current, is really, really important.

Were I in the situation of not being able to measure current, I would revert to trial and error. Start the sketch again, building it up, possibly by copy pasting from the original code, testing at every step with the off board PSU, until the code appears to break.

How much power can the regulator on board supply.

http://lmgtfy.com/?q=uno+max+current

Sorry about that. I just wanted to highlight how much easier it is to find data-sheets these days.

You can find a summary of the Uno's specification at http://arduino.cc/en/Main/arduinoBoardUnohttp://arduino.cc/en/Main/arduinoBoardUno

So, that's 40ma per i/o pin, regardless of the input Voltage or maximum current the PSU can supply. If you do decide to take measurements from the i/o pins, be very careful not to create a short to ground, as it will fry your Uno.

[/quote]