(25-02-2017 20:34)SP7EZG napisał(a):  
Kod:
.......
   if ( ( Sterowanie << idy ) & 0x0001 )
 ......
 
Wygląda na to, że wartość nie jest zapisywana poprawnie.
Wcale się nie dziwię. Masz w wyrażeniu babola. Dlaczego przestawiłeś kierunek przesuwania bitów 
<< w lewo ?? Jakiś konkretny cel miałeś ??
Jeżeli chcesz bity przesuwać w lewo to powinno to wyglądać tak:
Kod:
if( ( Sterowanie << idy ) & 0x8000 )
{....
 
Napisałem coś takiego na podstawie dokumentacji LM7001. Sprawdź sobie, bo mogą być błędy.
Kod:
#define DATA 7 
#define CL 6
#define CE 5 
#define KROK_100K 0b00000000
#define KROK_50K  0b00000100
#define KROK_25K  0b00000010
#define KROK_5K   0b00000110
#define StartFreq       5394        //StartFreq=(145550-10700)/25=5394
void setup()
{
  pinMode(DATA, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(CE, OUTPUT);
  digitalWrite(CL, LOW);
  digitalWrite(CE, LOW);
  digitalWrite(DATA, LOW);
  synteza( StartFreq, KROK_25K );
}
void loop() {
}
void synteza( uint16_t Fpom, uint8_t krok )
{
  Fpom &= 0x3fff;  // Tu zadbamy o to, by bity 15 i 14 były zawsze wyzerowane
  uint32_t sterowanie = ( (uint32_t)1<<23 ) | ( (uint32_t)krok<<20 ) | ( (uint32_t)7<<16 ) | Fpom ;
  
  digitalWrite(CE, HIGH);
  for( uint8_t idx=0; idx<24; idx++ )
  {
    if( ( sterowanie >> idx ) & 0x00000001 )
    {
      digitalWrite(DATA, HIGH);         
    } else
    {
      digitalWrite(DATA, LOW) ;         
    }
    zegarek();
  }
  digitalWrite(CE, LOW);
  digitalWrite(DATA, LOW);
}
void zegarek()
{
  delay(10);
  digitalWrite(CL, HIGH);
  delay(10);
  digitalWrite(CL, LOW);
  delay(10);
}
 
Nie posiadam tego LM-a, więc są to moje przemyślenia. Kompiluje się prawidłowo. Działać chyba też powinno.
Funkcja 
synteza przyjmuje 2 parametry. Obliczony dzielnik dla częstotliwości, oraz krok strojenia.
W środku jest składana kompletna ramka, która jest wysyłana..
Co do enkodera. Tu najlepiej użyć przerwań, tak jak to jest zrobione w oryginale i koniecznie trzeba podłączyć enkoder poprzez prosty filtr RC.
Odpadnie wówczas problem z drganiem styków - jeżeli to enkoder mechaniczny.
Nie zapomnij oglądnąć i poczytać 
ten poradnik dotyczący enkodera
Gorąco polecam również pozostałe poradniki Pana Kardasia,  bo widzę, że jesteś na samym początku drogi nauki programowania....