Arduino Nano: počítadlo otáček s děličkou

Diskuze a poradna o programátorech a programování různých obvodů

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 »

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

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
samec
Příspěvky: 6670
Registrován: 19 pro 2017, 00:00

#17 Příspěvek 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');  // ;-)
Uživatelský avatar
Valdano
Příspěvky: 3117
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#18 Příspěvek 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');
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#19 Příspěvek 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.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
Roman-W
Příspěvky: 51
Registrován: 29 kvě 2013, 00:00

#20 Příspěvek 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
Uživatelský avatar
samec
Příspěvky: 6670
Registrován: 19 pro 2017, 00:00

#21 Příspěvek 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:
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#22 Příspěvek 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.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
RX-20
Doporučuje se dohled moderátorů
Příspěvky: 270
Registrován: 30 čer 2024, 00:00
Bydliště: střední Čechy u Koněpruských jeskyní

#23 Příspěvek 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
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“