Stránka 2 z 2

Napsal: 23 črc 2025, 20:41
od Celeron
Nejspíš jsi zapomněl, že sprintf () , tak jak jsi to napsal nepočítá s nulami vlevo, takže třeba číslo 42 zobrazí jen dvě číslice na desítkách a jednotkách a zbytek na displeji ve vyšších řádech zůstane nezměněný z předchozího čísla. O pomalosti a zabrání mnohem větší paměti se u tyhle jednoduchosti bavit nemá cenu ale u složitějších projektů se s tím může narazit.

Napsal: 24 črc 2025, 14:56
od samec
pardon

Kód: Vybrat vše

char dekadicky[8];

sprintf(dekadicky,"%08d",value");
for(char i=0; i <=8; i++) sendToMAX7219(i, dekadicky[i] - '0');  // ;-)

Napsal: 24 črc 2025, 15:49
od Valdano
Máte tam chybu tzv. "přetečení bafru" jako vyšitou.

// Tady máte definovaný bafr jen pro 8 bajtů, platné indexy bafru jsou od 0 do 7.
char dekadicky[8];

// Tady do něj zapisujete 9 bajtů, protože sprintf automaticky za 8 znaků čísla
// doplňuje devátý bajt což je zakončení řetězce (bajt s hodnotou 0) a ten bajt s hodnotou 0
// se zapisuje za konec bafru. Záleží na tom co bude ležet v paměti za koncem bafru.
// V závislosti na tom co tam bude se to nemusí projevit a nebo to může hrábnout
// do zásobníku a způsobit paseku v nepředvídatelném chování programu třeba na jiném místě.
sprintf(dekadicky,"%08d",value);

// Cifry posíláte po znacích tj. mělo by to být bez zakončení.
// Takže namísto i<=8 by mělo být i<8, protože 8 znaků
// je v bafru na indexech od 0 do 7.
for (char i=0; i<=8; i++) sendToMAX7219(i, dekadicky - '0');

Takže správně by to mělo být takto

Kód: Vybrat vše

char dekadicky[9];
sprintf(dekadicky,"%08d",value);
for (char i=0; i<8; i++) sendToMAX7219(i, dekadicky[i] - '0');

Napsal: 25 črc 2025, 23:50
od Celeron
No jestli není pro číslice lepší ten způsob, co jsem našel na netu.
Sprintf na texty budiž ale to není tazatelův problém.

Napsal: 26 črc 2025, 19:44
od Roman-W
Celeron píše:Hodně tady mudrujte, tazatel chtěl upravit původní program aby jen dělil osmi.
Samo že se to dá napsat elegantněji, jeden kotouček 8 výřezů, dva fototrandy.
To načítání pulzů mám v počítadle odzkoušený s magnetickým n-codérem 100 pulzů na otáčku. U magneťáku se nemusí vůbec řešit zákmity co mají fototranzistory.
U tohodle je jen 8 zářezů co generují kvadraturní signál (A, B, 90° fázový posun). Rozklad registru counter na řády jsem nikdy nezkoušel ale našel jsem to na netu. Zapojení stejný jako původní. Bez záruky, nemám moc času se v tom rejpat. Asi by bylo lepší přepojit to na využití přerušení a došlechtit tam ochranu proti zákmitům.
Děkuji funguje to :-)

prozatím to mam zapojeno viz obrázek https://ibb.co/Z5kK4BB

Napsal: 26 črc 2025, 21:31
od samec
Roman-W píše:Děkuji funguje to :-)
Isto?
A jak rýchlo to funguje?
Si si istý, že pri vysokých otáčkach to zaráta všetky pulzy? :?: :!:
Celeron píše:

Kód: Vybrat vše

...
  delay(5); // stabilizace
...
:pravnik: :wink:

Napsal: 27 črc 2025, 17:59
od Celeron
Samec, Roman se nezmínil, jestli použil ten svůj prvotní FW, co napodobuje mechanický počítadlo a co jsem mu k tomu připsal předděličku osmi a nebo jestli ten zgruntu nově napsaný FW, co jsem mu poslal, kde je jen jeden počítací registr a je tam použit ten delay 5.
Kolik asi tak zvládne obsluha navíječky s ručním vedením drátu tedy bez šnekovýho vedení a reverzací na konci cívky? Odhaduju že tak maximálně 100-120 RPM. Zanalyzuj si časy trvání loop a zjistíš, že s těma osmi výřezy by počítadlo zvládlo 10 - 12 x tolik.

Napsal: 14 zář 2025, 01:19
od RX-20
kolik otáček za sec to umí?
Na počítání otáček není potřeba mikropočítač, stačí pár TTL obvodů 74HCT nebo CMOS řady 4xxx. Netřeba nic programovat. Nojo, ale bez mikropočítače by to dneska nebylo "cool", že :D