Usare da solo un ATMEGA 328 programmato su Arduino uno

Ho fatto le modifiche suggerite ma non mi funzione il tutto.
Il motivo mi è chiaro. Non riesco a capire bene il funzionamento delle istruzioni consigliate.

Mosso da disperazione, ho cercato di inventarmi qualche sistema diverso per ottenere il risultato desiderato.

Ora il tutto funziona .... Ma con una pecca.
Scritto i primi 16 caratteri, al 17° mi va a capo della seconda riga ... Ma mi scrive due volte lo stesso carattere.
Poi tutto funziona bene e al 33° carattere cancella tutto il display e mi va a capo della prima riga ... ecc.

Dove sta l'inghippo?
Scusate il sistema elementare utilizzato nelle mie istruzioni.

Saverio.

[/co//  LISTATO conta caratteri del 14/10/2017

  // include the library code:
  #include <LiquidCrystal.h>

  // initialize the library with the numbers of the interface pins
  LiquidCrystal lcd(12, 13, 8, 9, 10, 11);

  int prova=0;  //  variabile prova
  int puls=0;  //  variabile lettuta dato da inviare al display

   int num=0;   // numero di caratteri scritti
   int rig=0;   //  posizione carattere seconda riga
 
   void setup() {
     
   DDRD=(INPUT);  //  configura la porta D come ingresso
   pinMode(A4,OUTPUT);   //  pin busy - Pin analogico
   pinMode(A5,INPUT);  //  pin strobe - Pin analogico

   lcd.begin(16,2);
    lcd.setCursor(0,0);
   }
   
   void loop() {
 
   digitalWrite (A4,LOW);  //  metti a 1 il busy - rx disponibile
   prova=digitalRead(A5);  //  controlla se strobe=0  - dato uscita tx pronto
     if (prova==LOW) {
     digitalWrite (A4,HIGH);  //  metti a 1 il busy - rx disponibile
  delay(10);
    puls=(digitalRead,PIND);  // digitalRead (PIND,puls);  //  leggi dato da inviare al display
   
      delay(5);
    int i=puls; //initializing variables
    char puls=char(i);
    if (puls<19) goto casa;
//  ----------------------------------------------------------
        num=(num++);
    if (num>16) // se scritto 16 caratteri
    {
     lcd.setCursor(rig,1);  // passa alla seconda riga display
 
    lcd.print(puls);  // stampa carattere dal 17° carattere
   
    rig=(rig+1);  // incrementa numero posizione carattere riga 2
        
     if(num>31)   // se scritto più di 32 caratteri
   {
     num=0;  //azzera contatore numero carattere
     rig=0;  // azzera contatore riga 2
     lcd.clear();  //  cancella le due righe
      lcd.setCursor(0,0);
     } 
      }
    lcd.print (puls);  //  presenta il dato sul display
    delay(2);
     interrupts();
    }
    else
    {
     casa:
     delay(2);
    }
    }
]