Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   722 / 850
(#) benjami válasza Josi777 hozzászólására (») Jan 11, 2022 /
 
Azért érdemes lenne megnézni a bootloader működését, hogy milyen feltételek kellenek ahhoz, hogy bekapcsoláskor vagy resetkor töröljön valami területet a programmemóriában. Nem kizárt hogy a bekapcsolási tranzienskor össze tud ez jönni.
(#) Massawa válasza djusee hozzászólására (») Jan 11, 2022 /
 
Én is ugyanolyan tápokat használok mint a te ujabb verziod ( jobb oldali kép).
(#) sdrlab válasza benjami hozzászólására (») Jan 11, 2022 /
 
Pusztán a flash írni, zavarok miatt elég valószínűtlen dolog! Sokkal nagyobb eséllyel kóvályoghat el a program oda, ahol már "hivatalból" történik flash írás!
Egy biztos: ha reset, és tápelvétel után nem gyógyul, akkor bizony megsérült a flash tartalma!

Megoldás lehet ilyen helyzetekre, ha a bootloadert kidobjuk. Ekkor nem lesz a kódban olyan hely, ahonnan lehetne eséllyel felülírni a flasht...
(#) Josi777 válasza sdrlab hozzászólására (») Jan 11, 2022 /
 
Ez csak elviekben lehetséges, gyakorlatilag az írás feltétele, hogy meglegyen a törlés. Az írást végző függvény nem hajtódik végre e nélkül. Ez egy ellenőrző biten keresztül történik. Ezzel megint oda lyukadunk ki, hogy túl sok együttállásra van szükség, hogy bekövetkezhessen a program memória felülírása.
(#) Josi777 válasza sdrlab hozzászólására (») Jan 11, 2022 /
 
Kizártnak tartom, hogy a bootloader felül tudná véletlenül írni a program memóriát. Túl sok feltételnek kell egyidejűleg teljesülnie ehhez, aminek a véletlen bekövetkezése szinte lehetetlen.
(#) vargham válasza Josi777 hozzászólására (») Jan 11, 2022 /
 
De itt hibás működésről van szó. Simán lehet, hogy többször beesik és túlfut a tápfeszültség egymás után többször, rövid idő alatt. Na, olyankor megjósolhatatlan, mit fog tenni az MCU. Ezért érdemes használni a beépített BOD-t. Mondjuk én kazán esetén raknék rá egy megfelelően stabil és hibatűrő voltage supervisor IC-t is.
(#) sdrlab válasza vargham hozzászólására (») Jan 11, 2022 /
 
Addig, amíg flasht (hivatalból)írni tudó rutin van a kódba, az esély arra, hogy odatéved a program, nagyságrendekkel nagyobb, mint ha az nem lenne benne, így a veszélye is annyival nagyobb, hogy valamit átír!
A hozzászólás módosítva: Jan 11, 2022
(#) sdrlab válasza Josi777 hozzászólására (») Jan 11, 2022 /
 
Nem állítom 100%, hogy ennél is így van, de más mikrovezérlőknél simán írható, törléstől függetlenül is egy bit 1-ből 0-ba! Ennek semmi köze nincs ahhoz, hogy előtte volt e törölve vagy sem, amíg 1-es a bit, írható, ha már 0-ban van, az csak törléssel tehető 1-be...
(#) Massawa válasza vargham hozzászólására (») Jan 11, 2022 /
 
Emberek honnan ez a hitetlenség a ma modern kapcsitápokkal szemben? Azok nagyságrenddel stabilabbak mint amit régebben használtunk, és kizárt dolog, hogy egy kapcsitáp tullöjjön a beállitott feszültségen. Amiket használok extra védelem van a tulfeszültségre meg az áramra.
Szoval onnan biztos nem jön olyasmi ami zavarna. Az elöfordulhat, hogy olyankor szünik meg az áram, amikor a proci éppen valamit büvészkedik, sajnos ezt viszont elég nehéz kezelni, és a táp megszünése eddig soha nem okozott gondot egyetlen berendezésnél sem amit eddig épitettem ( és az nem kevés).
Szoval egy kicsit érthetetlen a dolog mi is történhetett, mitöl akadt meg a program.
(#) Kovidivi válasza Massawa hozzászólására (») Jan 11, 2022 /
 
A zavar, a zaj a kimeneten nem függvénye annak, hogy átlagfeszültség, amit mérsz a multival, század Voltra pontosan 12.00V, vagy hogy van áramkorlát. A zaj a DC feszültségre rárakódott AC komponens. És igen, az olcsó kínai tápok zajszűrése lehetséges, hogy alig ér valamit.
(#) Massawa válasza Kovidivi hozzászólására (») Jan 11, 2022 /
 
Azt hiszed nincs szkopom?
Hogyan zavarhat egy nagyfrekis majdnem nègyszögjel egy graetzhidon és kondikon?.
Azért a spanyol viaszt már régen feltalátlák. Pontosan kapcsitáp fö elönye a régi tápokkal szemben, hogy duplán választja le a és szüri a szekundert a hálozattol. Azaz a hálozati zavarokbol szinte kizárt, hogy valami átjusson egy ilyen áramkörön.
(#) proba válasza Massawa hozzászólására (») Jan 12, 2022 /
 
Azért ezzel a nagy bizakodással óvatosan, lehet a te problémádnak nem ez az oka, de ha zavarmentes tápot szeretnék, még mindig a transzformátorban bízom inkább. A mai tápok egy részéből szinte mindent kispórolnak, a kondenzátorok élettartama igen záros ( es ki mondta, hogy 1 perc alatt veszítik el a kapacitásukat.) A bemenet meg a kimenet közötti Y kondenzátorral sincs sok jó tapasztalatom. Persze nagy teljesítmény kis súly, nagyon előnyös ki ne szeretné.
(#) pisti válasza Josi777 hozzászólására (») Jan 12, 2022 /
 
Köszönöm! Valóban egy kicsit "Ágyúval verébre" esetnek tűnik. A terv, hogy érzékelők indítják és állítják le a fénysorompót és peronvilágítást is vezérelnének.
Akkor így, ha jól értem a delay() és a while() egyformán leállítja a programot.
(#) Massawa válasza proba hozzászólására (») Jan 13, 2022 /
 
Nem tudom, nekem abszolut nincsenek rossz tapasztalataim kapcsitápokkal. Elöfordult, hogy egyik másik kinyult, a korábban használt német toroidokkal sokkal többet szivtam. 10-böl 2-3 halt meg, valoszinü a beépitett termosztat, de az a két tekercs között volt, igy javithatatlan. Gyakran 3-4szer többe került, mint egy hasonlo teljesitményü kapcsitáp.
Egyszer kaptam egy ládával a neves kék-sárga butoráruház termékeiböl, mert azokat a kisugárzott zavarszint miatt nem lehetett beépiteni ( valami egészségügyi központba szánták) , igy a villanyszerelö haver odaadta az összeset. Egyetlen egy sem ment eddig tönkre ( de én is csak itt ott használom, és csak fémdobozos szerkezetekbe épitek ilyet, mert nagyon zavarnak, de a kimenet teljesen sima és megbizhato. Azota van egy AM rádio is a mühelyben, ha zavar a kapcsitáp, egyböl hallom és akkor megy vissza a fiokba vagy elosztogatom a fiam barátainak.
A hozzászólás módosítva: Jan 13, 2022
(#) Josi777 válasza pisti hozzászólására (») Jan 13, 2022 /
 
Úgy fogalmaznék, hogy megakasztja. Márpedig a loop-nak az az értelme, hogy gyorsan "pörögjön", hogy az eseményekre, pl. egy bemenet állapotváltozása, minél rövidebb idő alatt tudjon reagálni. Ha a kódodban elhelyezel egy loop elejére egy soros monitorra való írást, akkor látni fogod, hogy az megvárja a villogást és annak ütemében kerül kiírásra.
(#) Pethical válasza pisti hozzászólására (») Jan 13, 2022 /
 
Ebben az esetben valóban nem lesz jó, mert kezelni kell az érzékelőket is. Ami neked jó lehet, az az időzítő megszakítása:

  1. /*
  2.  * Arduino 101: timer and interrupts
  3.  * 2: Timer1 overflow interrupt example
  4.  * created by RobotFreak
  5.  */
  6.  
  7. #define ledPin 13
  8.  
  9. void setup()
  10. {
  11.   pinMode(ledPin, OUTPUT);
  12.  
  13.   // initialize timer1
  14.   noInterrupts();           // disable all interrupts
  15.   TCCR1A = 0;
  16.   TCCR1B = 0;
  17.  
  18.   TCNT1 = 34286;            // preload timer 65536-16MHz/256/2Hz
  19.   TCCR1B |= (1 << CS12);    // 256 prescaler
  20.   TIMSK1 |= (1 << TOIE1);   // enable timer overflow interrupt
  21.   interrupts();             // enable all interrupts
  22. }
  23.  
  24. ISR(TIMER1_OVF_vect)        // interrupt service routine that wraps a user defined function supplied by attachInterrupt
  25. {
  26.   TCNT1 = 34286;            // preload timer
  27.   digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
  28. }
  29.  
  30. void loop()
  31. {
  32.   // your program here...
  33. }


A kódot nem én írtam, csak idemásoltam Forrás
(#) Skori hozzászólása Jan 16, 2022 /
 
Enkóder kezeléssel kísérletezek. Van-e arra valamilyen egyszerű algoritmus, amivel a dupla lépéses és a szimpla lépéses enkódert felismerheti ill. megkülönböztetheti a program?

Egyelőre azzal próbálkoztam, hogy dupla lépésesként kezeli a szoftver, de ha olyan állapotban áll hosszabb ideig az enkóder, ahol a dupla lépéses nem állhatna, akkor átvált szimpla lépésesre. Ez működik is, de tudom szándékosan úgy tekerni a dupla lépéses enkódert, hogy a program szimpla lépésesnek vegye.
A hozzászólás módosítva: Jan 16, 2022
(#) Josi777 válasza Skori hozzászólására (») Jan 17, 2022 /
 
Először azt kéne tisztázni, hogy milyen enkóderről beszélünk. Relatív, abszolult, lineáris, rotary, digitális vagy analóg.
Én úgy tudom, hogy az enkóderek nem képesek fizikailag átkofigurálni magukat és megváltoztatni az elmozduláshoz képest az impulzusok számát. Ha tiéd ilyen, azért lenne jó tudni, hogy milyen típusról beszélsz.
Amennyiben feltételezzük, hogy a hobbisták körében általánosan használt 2 fázísú rotary enkóderről van szó, azzal kapcsolatban az szokott előfordulni a gyengébb minőségű példányoknál, hogy el van tolódva a 2 fázis, azaz nem egyenlő időközönként vannak a váltások, így a kezelő szoftver gyors mozgásnál már nem veszi észre a másik jel változását. Illetve már belefutottam a megnövekedett prell problémájába is. Ezt egy nagyon egyszerű programmal vizsgáltam és eléggé lesújtó eredményt kaptam egyes példányoknál.
Próbáld ki ezt a programot és a soros plottert kapcsold be, ne a soros monitort A loop üresen marad. Ezzel meg tudod nézni, hogy milyen minőségű a rotary enkóder.
  1. void setup() {
  2.   Serial.begin(115200);
  3.   pinMode(2, INPUT_PULLUP);
  4.   pinMode(3, INPUT_PULLUP);
  5.   attachInterrupt(digitalPinToInterrupt(2), encoder2, CHANGE);
  6.   attachInterrupt(digitalPinToInterrupt(3), encoder3, CHANGE);
  7. }
  8.  
  9. void encoder2 () {
  10.   Serial.print("A ");
  11.   Serial.print(digitalRead(2));  
  12.   Serial.print("B ");
  13.   Serial.println(digitalRead(3)+1);  
  14. }
  15. void encoder3 () {
  16.   Serial.print("A ");
  17.   Serial.print(digitalRead(2));  
  18.   Serial.print("B ");
  19.   Serial.println(digitalRead(3)+1);  
  20. }
(#) sdrlab válasza Josi777 hozzászólására (») Jan 17, 2022 /
 
Mechanikus enkódernél nem is szabad arra építeni, hogy tiszta jeled lesz! Ez még vadi új korában sem feltétlen jellemző ezeknél, használat közben egészen biztosan bezajosodik!
Én pl egész hosszú, 64-es átlagolást használok a két csatornán, s csak utána döntöm el, volt e változás érdemben...
(#) Josi777 válasza sdrlab hozzászólására (») Jan 17, 2022 /
 
Én kissé indokolatlannak tartom a jelfeldolgozást ezeknél az eszközöknél, mivel nem számít, hogy mennyire pontos. Pl., hogy 1 fordulatra 24, 20 vagy 28 impulzust ad, teljesen mindegy. Tekergeted és látod, hogy mennyit változik az érték. Ahol számít a precizitás, oda meg nem ilyet kell rakni.
(#) mateatek válasza Josi777 hozzászólására (») Jan 17, 2022 /
 
Én is találkozok ilyen enkóderekkel. 2 féle szoftver kell, mert az egyik ilyen, a másik olyan. A HEStore-ban is van mindegyikből. Valahogy így jelölik ott őket:
-15imp/30pos
-24imp/24pos.
Tehát nem arról van szó, hogy selejtbe futottunk bele.
(#) vargham válasza Josi777 hozzászólására (») Jan 17, 2022 1 /
 
Szerintem senkit se biztassunk arra, hogy interrupt handlerben a soros porton adatot küldjön. Ha gyorsan követik egymást a megszakítást okozó események, akkor akár többnek a detektálásáról is lemarad a szoftver. Egy ISR legyen a lehető legrövidebb.
(#) sdrlab válasza Josi777 hozzászólására (») Jan 17, 2022 /
 
A pontossága számszerileg talán tényleg nem minden esetben fontos, de pl az iránya igen!
Mondjuk én azért annak sem örülnék, ha egy lépés helyett kettőt, vagy n-et lépne, amikor én csak 1-et szeretnék...
Mindenképpen kell az átlagolás, vagy szoftveresen, vagy hardveresen(mondjuk kondikkal megfelelően támogatva)
(#) Skori válasza Josi777 hozzászólására (») Jan 17, 2022 /
 
Általánosan használt 2 fázísú rotary enkóderről van szó. Nem az a probléma, hogy ne működne a programom - mert tulajdonképpen jól működik, csak ahogy mateatek írta, a fix poziciók száma és az impulzusok száma lehet egyező vagy fele annyi, az enkóder tipusától függően.
A programban viszont mindíg a mechanikus pozícióknak megfelelően kell lépni. Mondjuk menüben beállíthatóvá lehetne tenni, az enkóder típusát (van ahol így oldják meg), de elegánsabb megoldás lenne ha automatikusan felismerné a szoftver.
(#) Skori válasza sdrlab hozzászólására (») Jan 17, 2022 /
 
Jelen esetben külső felhúzó ellenálllások + RC szűrő lenne a hardveres megoldás (ez talán hosszabb vezetékezést is lehetővé tesz), vagy minden külső hardvert mellőzve, a belső felhúzó-ellenállásokat aktiválva csak az enkódert kellene bekötni, de akkor a szoftver lesz némiképp bonyolultabb (nagyobb lesz és több lesz az erőforrásigénye).
Jelenleg szoftveresen oldottam meg, de elgondolkoztam, hogy néhány passziv alkatrész megspórolása tényleg megéri-e, a szoftveres trükközést...
(#) mateatek válasza Skori hozzászólására (») Jan 17, 2022 /
 
Talán úgy lehetne ezt programban megcsinálni, hogy bekapcsoláskor, benyomott enkóder gomb mellett a program kéri, hogy kattintsál valamelyik irányban pl. 6-ot. Ebből a program bármely típusú szoftverrel, bármely enkóderrel tudni fogja, hogy mi a helyzet és úgy módosít, ha kell.
(#) Josi777 válasza vargham hozzászólására (») Jan 17, 2022 /
 
Nem biztattam senkit semmire. Melyik rész az amiből ezt írod?
(#) Josi777 válasza sdrlab hozzászólására (») Jan 17, 2022 /
 
1-1 kondenzátor sokat segíthet, szerintem érdemesebb azt választani, mint szoftveresen "bajlódni" vele, de természetesen számít, hogy milyen alkalmazásban van használva, hogy mennyi idő marad másra. De ez is lehet ízlés kérdése, mindenki úgy csinálja, ahogyan működik neki
(#) Josi777 válasza Skori hozzászólására (») Jan 17, 2022 /
 
Így már értem, hogy mire gondolsz. Egy ilyen automatikus felismerést megnéznék, mivel nincs semmilyen információ arról, hogy milyen sebességgel forgattad az enkódert. Talán tapasztalati úton lehetne egy intervallumot meghatározni, mivel általában nagyjából egy adott sebességgel forgatjuk az enkódereket, legalábbis legelőször, amíg nem látunk érték változást. Ez mérhető mind a 2 enkóder esetében és ebből már lehetne következtetni, hogy melyik milyen. Ki kéne próbálni. Most úgyis tervben van egy 8 enkóderes projekt midi kezelőhöz, ott lehet kipróbálom, főleg ha nem sikerül 8 egyforma enkódert venni
(#) vargham válasza Josi777 hozzászólására (») Jan 18, 2022 1 /
 
Az encoder2 és az encoder3 nevű függvényed egy-egy megszakításkezelő függvény. A lehető legkevesebb, és leggyorsabban végrehajtható kódot szabad csak beletenni. A Serial.print viszont elég költséges hívás, hosszan blokkolja a processzor normál működését. A megszakításkezelőben csak egy változót kellene írni, és a loop függvényben figyelni, mikor változik az értéke, és onnan végezni a soros portra írást.
Következő: »»   722 / 850
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem