Arduino DDS

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#16 Příspěvek od Celeron »

Já reagoval na ten "signal generatorv3".
V tom dalším, "DDS_function_generator" samozřejmě ROTARY_ A a ROTARY_ B nejsou definovaný. Musíš odkomentovat jeden z těhle dvou:

Kód: Vybrat vše

  attachInterrupt(0, updateEncoder, CHANGE);
  attachInterrupt(1, updateEncoder, CHANGE);
Ta obsluha přerušení je stále stejná, jen se změnily jména.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#17 Příspěvek od jankrizan »

Priznám sa Ti Celeron, že nerozumiem pojmu -odkomentovat-. Ja tu komentujem všeličo, ale môjmu problemu to nejako nepomáha. Popíš mi to tak nejako " ľudsky ". Ja som ešte tá chasa odchovaná na elektronkach, takže mi prepáč, ale niektorým pojmom nerozumiem.
Inak ten tvoj návod tam je original -od výrobcu-, ten som tam ja nedával.

void setup() {
lcd.init();
lcd.backlight();
startupScreen();
pinMode(led,OUTPUT);
pinMode(clk, INPUT_PULLUP);
pinMode(dt, INPUT_PULLUP);
pinMode(button1, INPUT_PULLUP);
pinMode(sw, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
digitalWrite(clk, HIGH);
digitalWrite(dt, HIGH);
digitalWrite(led,LOW);

attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);
gen.Begin();
}
Uživatelský avatar
Ruprecht
Příspěvky: 1494
Registrován: 28 zář 2005, 00:00
Bydliště: ZČ + JM

#18 Příspěvek od Ruprecht »

Komentář = poznámky v programu, které se nepřekládají. Zakomentovat znamená napsat před řádek // (nebude se překládat), odkomentovat znamená smazat //, aby se tento řádek stal součástí překládaného programu.
Když promluví, tak buď kňučí, nebo lže.
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#19 Příspěvek od jankrizan »

Aha, chápem. Ďakujem za vysvetlenie. Zasa som o niečo múdrejší, no čo, človek sa stále učí.
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#20 Příspěvek od Celeron »

Ruprecht píše:Zakomentovat znamená napsat před řádek // (nebude se překládat), odkomentovat znamená smazat //, aby se tento řádek stal součástí překládaného programu.
To jsem mu v tom udělal bordel, napsal jsem za a od přesně opačně. :oops:
Díky Ruprechte za upozornění. Asi se ze mě věkem taky začíná stávat "opačník". :)

to jankrizan: Prostě to zkus přeložit takhle:

Kód: Vybrat vše

// attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);
 
nebo takhle:

Kód: Vybrat vše

attachInterrupt(0, updateEncoder, CHANGE);
//attachInterrupt(1, updateEncoder, CHANGE);
Některý n-codery (hlavně ty od Lásky, odzkoušeno osobně na třech různých konstrukcích) jsou asi uvnitř udělaný trochu jinak a musí se použít jen jedno přerušení.
Poslal bych ti kousek code na volbu kmitočtu po jednom Hz pro Si5351 ale asi by ti to nebylo moc platný, je to jiný než ten tvůj generátor.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#21 Příspěvek od jankrizan »

Skusil som to, ale nerobí to dobrotu. chvíľu nefunguje, potom preskočí o dva takty, zas nejde, je to nepravidelné. Bolo by to neunosné vyhodiť z programu tento rotary a vložiť trebars knižnicu Rotary.h. Ja to absolutne neviem, preto sa pýtam, či je niekto ochotný spraviť tieto zmeny?. Vďaka.
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#22 Příspěvek od jankrizan »

Chcel by som sa opäť vrátiť k môjmu problému s rotačným encoderom, či sa nájde niekto, kto dokáže upraviť problém so štyrmi taktmi na jednu polohu enkodera (pozri detaily v predošlých článkoch). Poprípade zmeniť iný systém encodera v tomto programe. Obnovím problém. Pri posunutí enkodéra o 1 polohu sa posunie frekvencia nie o napr.: 1000 Hz, ako má byť, ale preskočí po 250 Hz a 4x, čiže 250, 500, 750, sa posunú v medzipolohe jednej polohy, (jedného zuba). A niekedy tie hodnoty ešte preskočia nepravidelne a výsledok je napr.: 1000, 1250, 1500, 1750, a zostane zobrazenie displeja na 1750 namiesto 2000. Dúfam, že mi rozumiete čo mám na mysli, že ako sa to správa. Tu je ešte raz správny sketch.
Přílohy
DDS_function_generator.txt
(6.93 KiB) Staženo 64 x
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#23 Příspěvek od jankrizan »

Zdravím. Tak sa mi podarilo konečne eliminovať ten problém s enkodérom. Vlastne, asi nebol problém v enkodéri, ale v príkaze (#define rootOfTen (sqrt(sqrt(10))). Jednoducho som ho vymazal a všetko, čo sa týkalo rootOfTen a je po problémoch, enkoder prepína po kroku tak ako má, a nezmyselné medzipolohy už nie sú. Možno je to pre program nekorektné, ale funguje to ako ja chcem. Ale aj tak by som chcel na displeji zobrazovať frekvenciu v tvare 0 000 000, (čiže oddeľovač tisícov) a nie 0000000, tak ako to zobrazuje teraz a na to som krátky. Poradte mi, ako na to - PROSÍM -. Prikladám moju úpravu programu.
Přílohy
DDS_function_generator_.txt
(6.88 KiB) Staženo 65 x
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#24 Příspěvek od asdf »

Pokus. Snad takhle?
Přílohy
dds_function_generator__610.txt
(7.28 KiB) Staženo 66 x
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#25 Příspěvek od jankrizan »

PERFEKTNÉ. Ďakujem, vedel by si to aplikovať aj do precisionScale, toto sa prejavilo iba v encoderValue. Ale je to super.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#26 Příspěvek od asdf »

Místo:

Kód: Vybrat vše

lcd.print(precisionScale, 0);
napíšeš:

Kód: Vybrat vše

print(precisionScale);
Ale nevím, co tam znamená ten nulový druhý parametr, takže to možná neudělá přesně, co chceš.

EDIT: A v téhle řádce možná tu tečku vyměnit za mezeru, nebo co tam chceš tisknout:

Kód: Vybrat vše

	if ( position % 3 == 0 && position ) print_char('.');
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#27 Příspěvek od jankrizan »

Tá 0 znamená počet desatinnych miest. Zmazanie 0 sa prejaví ako napr. 100,00 Hz.
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#28 Příspěvek od jankrizan »

if ( position % 3 == 0 && position ) print_char('.'); To som pochopil a aj zmenil, ale v precisionScale to nefachá.
Uživatelský avatar
jankrizan
Příspěvky: 167
Registrován: 30 pro 2007, 00:00

#29 Příspěvek od jankrizan »

Prepáč mi, nevšimol som si,že treba vymazať lcd. pred print. Takto to funguje . Veľká VĎAKA.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#30 Příspěvek od asdf »

Aha, ono je to double a ne long.
Tak tam dej:

Kód: Vybrat vše

print((unsigned long) precisionScale);
Snad se to do toho longu vejde. Nevím, jakých hodnot to může nabývat.
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“