Ich erkenne das das Programm nicht startet daran, das das Display eben dunkel bleibt und nichts weiter passiert ..
Als erste Hilfe wäre es ja noch möglich gleich zum Programmanfang mal ein simples Delay von einer Sekunde einzprogrammieren und erst danach das Display zu initialisieren. Dann sollte man ziemlich sicher sein, dass "alles" bereit ist zu arbeiten *gg*.

Mein Blink-Krückstock ist eher als Allzweckwaffe für unsauber arbeitende Programmierer oder Tester gedacht. Jeder nicht abgefangene Interrupt zeigt sich so, ebenso auch jeder noch so kleinste Spannungseinbruch - weil hier jedes Programm beim Start vorbei muss. Und was kommt nach nem Reset? GEnau - ein Start. Der Code ist ziemlich simpel, mein main fängt so an (ok, ich weiß, dass das NICHT arduino-language ist).

Code:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 int main(void)
 {                              //
  uint8_t       i;              //
// - - - - - - - - - - - - - - -
// Ports:  A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp, siehe oben
// DDRx:   als Ein- (0) oder Ausgänge (1) konfigurieren, Pins/Pull Ups (1) aktiv
// PORTx:  Eingänge: Pullup  =  1;   Ausgaenge:  low  =  0,   high    =  1
  DDRB  = 0b00100111;   // Mot1/2: PB1 = OC1A-MotorPWM; PB2 = OC1B-MotorPWM
  PORTB = 0b11011000;   //      PB5 - onBoard-rtLED
                        //
  DDRC  = 0b01101111;   // PC6+7-Pin  NUR bei babyorangutan (TQFP+MLF)
  PORTC = 0b10100000;   // PC0=LHeart/~beat, PC1=GND, PC2=LEDTst
                        // PC3=GND, PC4-ADC/Srv-Poti ohne Pullup, PC5=VccPoti!!
                        // 
                        // PD5/PD6 = M1B/M1A, PD7 = Taste: PullUP !
  DDRD  = 0b01100010;   // RX/TX-PD0/1, PD2 = INT0-Servopuls,
  PORTD = 0b10010101;   //   Pull Ups aktivieren, mit pololuMot AUCH bei INT0/~1
                        //
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  for(i=0; i<10; i++)   // LEDs blinken bevor Interrupts erlaubt sind   ==> um
  {                     //      ungewollte Resets u.ä. besser erkennen zu können
                        // ###>>> HeartbeatLEDs schalten Aode -<|- Portpin <<<###
    SetBit(PCLED, LHeart);  // gnLED/PC1 EIN, HELL           << ist (m)ein Macro
    SetBit(PORTB,    PB5);  // gnLED/PB EIN, HELL
    wms(3);             //                                   << ein simples wait Millisekunden
    ClrBit(PCLED, LHeart);  // LED aus
    ClrBit(PORTB,    PB5);  //
    wms(97);            //
    SetBit(PCLED, LEDTst);  // rtLED/PC6 EIN, HELL
    SetBit(PDLED,    LDr);  // rtLED auf PD1, babyo-spezifisch = onBoard + TX !!
    wms(3);             //
    ClrBit(PCLED, LEDTst);  // LED aus
    ClrBit(PDLED,    LDr);  // LED aus
    wms(97);            //
  }             // Ende von for(i=0; i<nn; i++)
  ClrBit(PDLED, LDr);   // rtLED auf JEDEN Fall aus
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ##>> JETZT werden die Timer-/Zeit-Größen gesetzt, siehe Header ~tmr~.h