Сигнал имеет очень короткую длительность меньше 100мкс.
Нужно во первых принимать сигнал выводом D2 или D3 , настроить один нужный из этих входов на прерывание по перепаду сигнала .
В обработчике прерывания написать код с минимумом инструкций желательно на ассемблере.
Вот пример работы на ассемблере:
PHP код:
//http://compcar.ru 
#include <avr/pgmspace.h>
#include <Spi.h>
//-----------------------------------------------------------------------------------------------------------------------------------------
 //                        ' '  A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  */
const byte ltrs[189PROGMEM = {255,231,131,195,135,129,129,195,189,131,129,189,191,125,125,195,131,195,131,195,131,189,189,125,125,125,  1,
               
255,219,189,189,187,191,191,189,189,239,247,187,1915761,189,189,189,189,189,239,189,189,125,187,187,251,
               
255,189,189,191,189,191,191,191,189,239,247,183,1918593,189,189,189,189,191,239,189,189,109,215,215,247,
               
255,189,131,191,189,131,131,177,129,239,247,143,191,109,109,189,131,189,131,195,239,189,219,109,239,239,239,
               
255,129,189,191,189,191,191,189,189,239,247,183,191,125,117,189,191,179,183,253,239,189,219,109,215,239,223,
               
255,189,189,189,187,191,191,189,189,239,183,187,129,125,121,189,191,185,187,189,239,189,219,147,187,239,191,
               
255,189,131,195,135,129,191,195,189,131,207,189,129,125,125,195,191,205,189,195,239,195,231,147,125,239,  1    };
//------------------------------------------------------------------------------------------------------------------------------------------
/*                 -   .   /   0   1   2   3   4   5   6   7   8   9   :  */
byte nums[98]=             {255,255,207,131,239,131,131,227,  1,131,  1,131,131,255,
                
255,255,187,125,207,125,125,219,127,127,253,125,125,239,
                
255,255,187,125,239,253,253,187,127,127,251,125,125,255,
                
131,255,207,125,239,243,227,123,131,  3,247,131,129,255,
                
255,255,255,125,239,207,253,  1,253,125,239,125,251,255,
                
255,231,255,125,239,191,125,251,125,125,239,125,247,239,
                
255,231,255,131,199,  1,131,251,131,131,239,131,207,255};

byte i=0
byte reg 8;   
byte result 25;
word *ptr=0
word addr ;

//----------------------------------------------------------------
void setup()  

//ptr = &ltrs[0]; // младший байт адреса
//addr = ltrs[*ptr]; // полный 16 бит адрес
//addr = &ltrs[0]; // полный 16 бит адрес
//word paddr = ltrs[0];

pinMode(8INPUT); // portb0
pinMode(9INPUT); // portb1
Spi.mode((1<<MSTR) | (1<<CPHA));  //mode 0, clock/4, SPI Enable, DORD старший первый, MSTR Master Enable
Serial.begin(115200);  

//----------------------------------------------------------------
void loop()  
{  

//i=i+1;
//Spi.transfer(ltrs[i]);

addr ltrs[*ptr];
//addr = *ltrs;
//result=checkline(addr);

Serial.println( *ptrDEC );
Serial.printlnaddrDEC );
Serial.println( *ltrsDEC );
//Serial.println( result, DEC );
Serial.println(' ');
delay(500);
}
//--------------------------------------------------------------
byte checklineunsigned char in_char )
{
asm volatile
              
"cli       \n" // отключить прерывания
              
"push r26   \n"
              
//  "mov r30, %A[ADDR16]       \n"   // загрузить младший 16 бит адрес
              //  "mov r31, %B[ADDR16]        \n"   //
               
"label_1%=:  \n"
              "sbic %[PIN_B], 1   \n"  
// ловим  кадровый импульс
"rjmp label_1%=  \n" 

"label_1e%=:  \n"
              "sbis %[PIN_B], 1   \n"  
// ждем начала кадра
"rjmp label_1e%=  \n" 

"rcall Wait_Line%=  \n"              
// отступ с верху (переднее гашение)

"label_2%=:  \n"
              "sbic %[PIN_B], 0   \n"  
// ловим строчный импульс
"rjmp label_2%=  \n"

"label_2e%=:  \n"
              "sbis %[PIN_B], 0   \n"  
// ждем начала строки
"rjmp label_2e%=  \n"

"rcall Step_Line%=  \n"            
//отступаем  слева xx пикселей

//--------------------выводим изображение------------------------------------ 
 
"Transmit%=:  \n"               
                "ld  r26, %a[ADDR]+       \n"   
// загрузка данных из памяти программ с постинкрементом 
               // "ldi  r26, 170                \n"
                 
"out %[SPI_DATA], r26  \n"
                 "sbic %[PIN_B], 0             \n"    
// ловим  строчный импульс  
"rjmp Transmit%=  \n"                                 // переходим на вывод следующего байта
              
"sbic %[PIN_B], 1               \n"        // ловим  кадровый импульс
"rjmp label_2e%=  \n"                                 // продолжаем вывод данных если не конец кадра

"rjmp label_1e%=  \n"    // переходим на навый кадр

"mov %[RESULT], r30  \n" // возвращаем адрес в переменную result
"pop r26  \n"
"sei  \n"        
// включить прерывания 
"rjmp data%=  \n" // на выход
//-------------------------------------------------
"Data_seg%=:  \n"
//-----------------------подпрограмма отступа сверху--------------------------
"Wait_Line%=:  \n"
                "ldi r26, 30  \n"    
// чило пропускаемых строк , отступ сверху
                
"label_str%=:  \n"
              "sbic %[PIN_B], 0   \n"  
// ловим строчный импульс
"rjmp label_str%=  \n"

"label_new%=:  \n"
              "sbis %[PIN_B], 0   \n"  
// ждем начала строки
"rjmp label_new%=  \n"

"dec r26 \n"
"brne label_str%=  \n"              
// считаем строки

"ret  \n"
//-----------------------подпрограмма отступа слева--------------------------
"Step_Line%=:  \n"
         "ldi r26, 35  \n"    
// чило пропускаемых пикселей в начале строки , отступ слева
 
"label_step%=:  \n"                 
"dec r26 \n"
"brne label_step%=  \n"              
// считаем пропуски
"ret  \n"
//---------------------------------------------------------------------------
"data%=: \n" 
//".EQU 200 \n"
//".db    12, 34, 45, 23 \n"
// "sbi ADCSR, 6 \n" //включить бит преобразования
// "sbi r38, 6 \n" //включить бит преобразования
//"mov %0, r4  \n"  // прочитать из младшего регистра АЦП ADCL
//"ret  \n"
//---------------------------------------------------------------------------                     
            
: [RESULT]  "=&r" (result)               // Список выходных операндов
            
: [PORT_B]    "I" (_SFR_IO_ADDR(PORTB)), 
              [
SPI_DATA]  "I" (_SFR_IO_ADDR(SPDR)), 
              [
PIN_B]     "I" (_SFR_IO_ADDR(PINB)), 
              [
SPI_STAT]  "I" (_SFR_IO_ADDR(SPSR)), 
          
//    [REG_IN] "r" (in_char),
              
[ADDR"e" (ltrs),              
             
// [ADDR] "m" (ltrs[*ptr]),
              
[ADDR16"e" (addr)
   
            :  
"memory""r30""r31" ); //       //резервируем регистры   
return (result);
 }