(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....