Zaslal: so červenec 19 2025, 20:23 Předmět: Arduino Nano: počítadlo otáček s děličkou
Zdravím sehnal jsem si na webu tento kod že ho upravím a nějak si nevím rady jak zakomponovat dělení vstupního signálu optozávory. na vřetenu mam kroužek s 8 výřezy viz příloha. Zapojení je defakto stejné jako na webu jen mam zapojený A0 (výstup z optozávory) a A2 (reset)
Do budoucna plánuji dvě opto závory vedle sebe aby to poznalo směr otáčení. Abych mohl při přejetí požadovaného počtu zavitů odmotat na zpětný chod ale to bude další komplikace v programování
Uvedený program co jste uvedl je ukázkový pro zápis hodnot do paměti zadaných tlačítky. Na čítání pulsů použijte vstup kde je možné načítat pulsy při přerušení použijte třeba vstup D2 což je přerušení 0, kde použijete vzorec co máte pro ten kotouč s osmi výřezy. Než takto upravovat tento program je lepší si napsat nový a místo uvedeného displeje použít obyčejný LCD displej ať 16-místný nebo 20-místný buď jednořádkový nebo s více řádky. Také jsem si kdysi stavěl navíječku s programem pro PC, schéma elektroniky, program s popisem je na webu tam se zadal počet závitů a po dosažení zadaného počtu se automaticky vypnul motorek.
To rozlišení směru otáček je možné řešit stejně jako se řeší u rotačního enkodéru. Pokud se mi namotal větší počet závitů tak jsem odmotání řešil přehozením směru otáčení a odpočtem závitů. _________________ www.mojeelektronika.mzf.cz
Založen: Apr 02, 2011 Příspěvky: 19645 Bydliště: Nový Bydžov
Zaslal: so červenec 19 2025, 22:54 Předmět:
Moc složitý, na co je u počítadla navíječky potřeba EEPROM? Jako že to navíjení zastavíš a druhej den budeš pokračovat? Navíc to vypadá, že s každou změnou nahoru nebo dolů se zapisuje do EEPROM, která má technicky né moc velký počet zápisů a pak odejde.
No a upravit to na dělení osmi bude potřeba další počítadlo, do kterého se bude posílat těch 8 impulzů za otáčku a když přijde devátý, tak se přičte 1 v D1 a D0 vynuluje. On se totiž nezobrazuje obsah počítacího registru ale každý řád displeje má svý počítadlo 0-9 a když se napočítá na jednotkách víc než 9, tak se přičte 1 na desítkách a tak dále. Prostě to tupě kopíruje klasický mechanický počítadlo.
Tady to máš upravený, zkus to a dej vědět, jestli to chodí co otáčka, to přičtení 1 na řádu jednotek. Možná bude potřeba softwarový debounce (odrušení zákmitů) nebo detekce hrany místo stavu, kdyby to náhodně přičítalo blbě, dej vědět.
// Nastavení MAX7219
shift(0x0f, 0x00); // test mode off
shift(0x0c, 0x01); // normal operation
shift(0x0b, 0x07); // scan limit 0–7
shift(0x0a, 0x0f); // brightness max
shift(0x09, 0xff); // decode B mode for all digits
if (EEPROM.read(0) != 0) {
WriteEeprom();
EEPROM.write(0, 0);
}
ReadEeprom();
}
void loop() {
// Zpracování pulzů z čidla (8 pulzů = 1 otáčka)
if (digitalRead(bt_up) == LOW) {
if (flag1 == 0) {
flag1 = 1;
pulseCounter++;
if (pulseCounter >= 8) {
pulseCounter = 0;
d1++;
if (d1 > 9) { d1 = 0; d2++; }
if (d2 > 9) { d2 = 0; d3++; }
if (d3 > 9) { d3 = 0; d4++; }
if (d4 > 9) { d4 = 0; d5++; }
if (d5 > 9) { d5 = 0; d6++; }
if (d6 > 9) { d6 = 0; d7++; }
if (d7 > 9) { d7 = 0; d8++; }
if (d8 > 9) { d8 = 0; }
Čo za obludnosť? Autor toho kódu by mal radše sadiť zemiaky, lebo programovaniu nerozumie. Niečo tak primitívne sa dá inteligentne napísať na desať riadkov.
Založen: Mar 28, 2012 Příspěvky: 8119 Bydliště: Brno
Zaslal: ne červenec 20 2025, 13:17 Předmět:
Samče, nějak jsem si vzpomněl, že už po několikáté uvádíš, že někdo dělá něco špatně, a že ty to umíš podstatně líp.
Tak byl bys tě dobroty a předvedl nám někdy svoje dovednosti v reálu?
Diky _________________ Civilizace založená na oboustranné lepící pásce nemůže dobře skončit...
I kdyby se z tebe jednou stal král, neodsuzuj lidi, kteří ti nebudou provolávat slávu- raději se zeptej sám sebe, proč tomu tak není...
Ak nevidíš, koľko chýb je v použití toho kódu a v tom kóde samotnom, tak si najprv naštuduj základy programovania a potom sa vyjadruj.
Až bude zadanie dodefinované, že na čom sa má počítadlo zobrazovať, či sa má ukladať do EPROM, prípadne ako sú optočleny rozmiestnené, tak možno program rozvinúť...
kód:
#define vstup1 A0 //vstup z 1. optozavory
static char pocet_pulsu = 0;
int pocet_otacek = 0;
Snímat stav pomalého vstupu přes přerušení je cesta k chytání kdejakého rušení a zákmitů, zvláště po doplnění snímače na kvadraturní kodér. Myslím si, že čistější je vstup(y) samplovat vhodnou frekvencí od časovače.
Jinak samče, když jseš u toho správnýho programování, určitě jsi slyšel o race condition, jseš si jistej, že pocet_pulsu -= 8; je atomická operace?
Snímat stav pomalého vstupu přes přerušení je cesta k chytání kdejakého rušení a zákmitů, zvláště po doplnění snímače na kvadraturní kodér. Myslím si, že čistější je vstup(y) samplovat vhodnou frekvencí od časovače.
Jak pomalý je podĺa teba pomalý vstup? Koľko sekúnd bude trvať jeden ten výsek na kotúčiku pri rýchlosti otáčania napríklad 1200 rpm?
lesana87 napsal(a):
Jinak samče, když jseš u toho správnýho programování, určitě jsi slyšel o race condition, jseš si jistej, že pocet_pulsu -= 8; je atomická operace?
Máš pravdu.
kód:
#define vstup1 A0 //vstup z 1. optozavory
static long pocet_pulsu = 0;
long pocet_otacek = 0;
Jak pomalý je podĺa teba pomalý vstup? Koľko sekúnd bude trvať jeden ten výsek na kotúčiku pri rýchlosti otáčania napríklad 1200 rpm?
To je 160 Hz, to je pomalý vstup.
Přijde mi zbytečné, dělat na navíječce 8 zubů na otáčku, k čemu je dobrá osmina závitu? Já mám na soustruhu 2 zuby na otáčku snímané kvadraturně dvojicí optočlenů a je to dostatečné i pro měření ot/min. Do 3000 ot/min stačí samplovat 1kHz, to jsou také pomalé vstupy. Zároveň tím časovačem multiplexuju LED displej.
1/160 sú vzdialenosti medzi pulzami. Samotné pulzy (medzery v disku) sú 6x kratšie. Takže pulz má dlžku cca 1ms. Pri dvojnásobnej rýchlosti 500µs. Ak to navzorkuješ cez časovač, aj tak potrebuješ prerušenie. Problém s atomárnymi inštrukciami zostáva, rušenie tiež. A čo ak sa kotúčik zastaví presne hranou v optozávore? To ti ani neuronka nepomôže, pokiaľ to nebude odolné už na úrovni senzora.
Mal som radšej ostať pri konštatovaní, že ten pôvodný nalinkovaný softvér je blbosť a viac sa k tomu nevyjadrovať.
Jeden pulz na otočku je málo, lebo to by znamenalo chybu jedného závitu v závislosti od počiatočnej polohy kotúčika voči polohe začiatku vinutia a zrejme približnej polohe začiatku a konca navíjania.
Proto je lepší použít ten kvadraturní enkodér. U něj si naprogramuješ zámek, že se vyhodnotí pouze první hrana a pak se čeká až na změnu na druhém vstupu. Když se ještě dodělá obsluha od všech vstupů a hran, tak stačí na snímání úplně primitivní půlkolečko
Založen: Apr 02, 2011 Příspěvky: 19645 Bydliště: Nový Bydžov
Zaslal: po červenec 21 2025, 16:11 Předmět:
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.
Ak to navzorkuješ cez časovač, aj tak potrebuješ prerušenie. Problém s atomárnymi inštrukciami zostáva, rušenie tiež. A čo ak sa kotúčik zastaví presne hranou v optozávore? To ti ani neuronka nepomôže, pokiaľ to nebude odolné už na úrovni senzora.
S tím si právě ten samplovaný kvadraturní kodér poradí s prstem v nose, klidně se to může třepat na hraně, jak chce a generovat to třeba 100ns pulsy, to přes přerušení od hrany nepochytáš ani náhodou. A dva zuby na otáčku jsou 8 impulsů na otáčku, stejně jako tady.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.