Pár věcí mě zdrželo (no ten rok uběhne rychle
), ale projekt pomalu, ale jistě pokračuje. Zkoušel jsem převinout r-core tranformátor, abych nemusel kupovat xx traf a ušetřil místo, což se ukázalo jako slepá ulička. Dle dostupných informací je bez speciální navíječky prakticky nemožné navinout toto trafo tak, aby na jedné špulce byl zvlášť primár a na druhé zvlášť sekundár. Ručně namotané trafo vrčí a má nesmyslný odběr. Na diy fóru to také někdo zkoušel a měl stejný problém. Hodil jsem 1600 závitů na primár a zkoušel ubírat, ale nepovedlo se mi to vyřešit. Nakonec jsem koupil normální Talema trafa i s deskama, na které se dají napájet.
Ještě jsem předělal softstart pro supershunt, aby se nemusel ovládat externě.
Rozběhání enkodéru KY-040 v arduino jsem bral jako easy věc. No úplně to tak nebylo a stala se z toho pakárna na několik dní.
Nefungoval mi pořádně ani jeden příklad jak od prodejců tak z youtube. Přitom všude používají ten samý enkodér. Tenhle enkodér má výhodu, že má v sobě tlačítko a už má na sobě pullup rezistory (pro enkoder, ne pro tlačítko).
funkční kód pro arduino uno / mega / apod.:
https://csko.cz/neco/zesilovac/arduino/ … riklad.txt
Při rychlém otáčení to občas vynechá, ale pro mě je spíše důležitá přesnost při pomalém otáčení a nestává se, že to při otáčení jedním směrem udělá náhodně krok druhým směrem. Pro mě vyhovující. Zkoušel jsem najít nějaký kvalitnější enkodér, protože tenhle za 40Kč myslím moc nevydrží, ale nic jsem nenašel, tak jsem místo toho koupil více těchto. Hřídelka enkodéru je galvanicky oddělená od zadní části, takže kovový knob je bezpečně spojen s krabicí a tlačítkem můžu klidně spínat standby modul.
Vyřešení "prdy" na některých krocích relátkového attenuatoru - stačí přidat mezikrok, který nejprve přepne relé s velkou hodnotou (zeslabení) a teprve pak přepne zbytek.
▼Spoiler
void volumeCheck()
{
if(lastVolume == volume) return;
//pokud se jedná o změnu z 31 na 32 a naopak, tak je třeba přidat mezikrok, jinak je na signálu 100mV prda třeba 1,5V ! (při vstupu 3V peak)
//zde se totiž přepínají všechna relé a na milisekundu nejsou některé články uzemněné
if((lastVolume == 31 && volume == 32) || (lastVolume == 32 && volume == 31)){
relatka = stavyRele[15]; //sepne/vypne nejdřív relé s druhou nejvyšší hodnotou
Wire.beginTransmission(ATTENUATOR3_ADDR); //starts talking to slave device
Wire.write(0x09); //selects the GPIO pins
Wire.write(relatka);
Wire.endTransmission(); //ends communication with the device
delay(20);
}
//zde je také nutné přidat mezikrok, jinak je tam i 2x větší prda !
//zde také přepínají skoro všechna relé
if((lastVolume == 47 && volume == 48) || (lastVolume == 48 && volume == 47)){
relatka = stavyRele[35];
Wire.beginTransmission(ATTENUATOR3_ADDR); //starts talking to slave device
Wire.write(0x09); //selects the GPIO pins
Wire.write(relatka);
Wire.endTransmission(); //ends communication with the device
delay(20);
}
lastVolume = volume;
relatka = stavyRele[volume];
//odesílá na MCP23008-E/P je použito GP0 až GP5
Wire.beginTransmission(ATTENUATOR3_ADDR); //starts talking to slave device
Wire.write(0x09); //selects the GPIO pins
Wire.write(relatka); // posilat v HEX 0x nebo na zacatku musi byt B jako bity (B00001100)
Wire.endTransmission(); //ends communication with the device
delay(10);
}
Ještě taková zajímavá pakárna. Když arduino napájíte z PC přes USB port, tak z nějakého důvodu není nutné použít pullup rezistory na SCL/SDA sběrnici. Ale v případě vlastního regulátoru se rezistory musí použít, jinak se arduino každou chvíli sekne. Přestože 5V jde do toho samého USB vstupu.