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   707 / 839
(#) majkimester válasza djusee hozzászólására (») Okt 21, 2021 / 2
 
Persze, mert én 1 órajel alatt szorzok, te meg csak 2 alatt
(#) Skori válasza majkimester hozzászólására (») Okt 21, 2021 /
 
Köszönöm, hogy kikerested ezeket az adatokat. Ezek szerint az adatlap eleje kicsit marketinges vagy legalábbis félreérthető (vagy ez rajtam kívül mindenkinek egyértelmű?).
Viszont akkor mindjárt fel is merült egy kérdésem ezzel kapcsolatban: mivel hardveres osztásról beszélünk (tehát ennél elvileg egyetlen utasítás, míg ha jól sejtem 8 bites proci esetén elvileg több utasításra fordul le a kód), ennél előfordulhat-e, hogy a művelet közben (mivel több órajel ciklus) bejön egy megszakítás és megváltozik miatta az eredmény (hasonlóképen mint amit korábban felvázoltál)?
(#) Skori válasza sdrlab hozzászólására (») Okt 21, 2021 /
 
Igazad van, megint tanultam valamit.
(#) majkimester válasza Skori hozzászólására (») Okt 21, 2021 / 1
 
Az STM32 32 bites adatbusszal az ISR-ben előállt 32 bites long-ot 1 lépésben olvassa be, aközben nem fog befutni megszakítás, így nem lesz a fent vázolt probléma 32 bites kontrolleren. (De ott is figyelni kell erre, ha esetleg több összefüggő adat keletkezik az ISR-ben.)

Egyébként RISC processzorokon az aritmetikai műveletek mindig csak regisztereken történnek, szóval itt a load utasítás ami érdekes, ami betölti a ISR-ben előállt long-ot egy regiszterbe. Az 1 lépésben történik, és nem lesz közben megszakítás.
(#) djusee válasza majkimester hozzászólására (») Okt 21, 2021 / 1
 
Ráadásul az órajelem is elég lassú, kell még kávé
(#) Josi777 válasza majkimester hozzászólására (») Okt 21, 2021 /
 
Köszönöm az észrevételeket neked is meg Skori-nak is. Feltétlenül ki fogom próbálni őket.
(#) zosza18 válasza Josi777 hozzászólására (») Okt 21, 2021 /
 
Szia!
Köszönöm mindenkinek a választ és a segítséget!
Igazából nekem a fordulatszámmal arányos jelre van szükségem, csak ha már van akkor azt jó lenne megjeleníteni.
A delay-t csak elvből nem szeretem mert az egy fék a program futásának... amúgy a milllis-el próbálkozom, igyekszem megoldani saját kézből, nem várok konkrét progikat.
Egy jó ideje nem foglalkoztam az arduval, PLC-re volt szükség és hát rengeteget felejtettem... Nem szeretném ha egymásnak esnétek, hiszen mindenki csak a saját tapasztalatát osztja meg, nem "farok méregetés" ez!
Igyekszem össze szedni a tudásom és az adott tapasztalatokat, amiből sikerül megvalósítani az alap progit, a többi már menni fog... csak hát minden kezdet nehéz.
A progi amit feltettem az csak egy példa, kiindulásnak szántam.

Mindenesetre Köszönöm Mindenkinek aki segített!

Még mindig kinlódok amúgy az értelmes megoldással...
(#) majkimester válasza Josi777 hozzászólására (») Okt 21, 2021 / 1
 
Csináltam egy kis tesztet (Atmel Studio 7 gcc -O0 optimalizációval Atmega328P-re fordítva, mert itt lehet ciklusidőt mérni.)

tachotime = 123456
TACHOPULSES = 12

Tesztkódsor 1:
  1. unsigned long rpm1 = 60000000L / (tachotime * TACHOPULSES);

314 bytes / 622 cycles / 38.88uS @ 16Mhz

Tesztkódsor 2:
  1. float rpm2 = 60000000.0 / (tachotime * TACHOPULSES);

766 bytes / 547 cycles / 34,19uS @ 16Mhz

A méret a teljes program mérete, a futási idő pedig csak a teszt sor.
A futási idő függ a műveletben lévő számok nagyságától, a jelen példában a float volt valamivel gyorsabb, viszont a program mérete 450 byte-tal nagyobb lett, csak emiatt az egy float számítás miatt.

Itt abbahagytam a kísérletezést, és kerestem inkább egy kicsit kifinomultabb tesztet, ami 1000 random számmal végzi el ugyanazt a műveletet és ennek a min max és totál végrehajtási ideje látszik a táblázatban:
Bővebben: Link (Innen)
Ez Codevision fordítóval készült, de az Arduinónál hasonló eredményekre lehet számítani. Ebben a tesztben nem látszik a program mérete, de látszik, hogy a float számítás szinte minden esetben 3x lassabb mint a unsigned long. Az osztás a kivétel, ahol nagyjából hasonló eredményeket ad. Itt jól látszik a hardware osztó hiánya.
(#) Dragonmax válasza Massawa hozzászólására (») Okt 22, 2021 /
 
Szia! Úgy gondoltam hogy a motor egy constant sebességgel forog a potival beállított ideig. Az idő akkor indul ha kap egy impulzust a dig inputon. Ez bonyolult?
(#) KBal76 válasza Dragonmax hozzászólására (») Okt 22, 2021 /
 
A léptetômotor sebességét meg kell határozni, azt a konstans sebességet hogyan kívánod beállítani? Azzal ugye nem mondunk újat, hogy a DM542 vár majd egy impulzus-sorozatot az Arduinotól ami meghatározza a motor sebességét. Azonkívül a léptetômotoroknak kell egy fel-lefutási rámpa (az Arduinonak motor indulásakor kell egy egyre gyorsuló sebességû impulzust kiadnia, majd megálláskor egy egyre lassulót) mert különben nem fog a motor elindulni, csak rángatózni (vagy legalábbis nem a kívánt eredményt fogja adni).
Tehát alapvetôen nem bonyolult, de néhány dolgot figyelembe kell venni.
Mi van eddig meg, és hol akadtál el a projektben?
(#) Massawa válasza Dragonmax hozzászólására (») Okt 22, 2021 /
 
Az még egyszerübb. Meghatározod a sebességet. Meghatározod ebböl hány lépés mondjuk 1 sec.
Utánna már csak számolni kell az impulzusokat.
Ha mondjuk 20 lépés 1 sec, akkor attol a pillanattol, ha elindul a motor számoltatsz 20iig és leállitod ( vagy az impulzust, vagy a meghajton az EN bemenetet). Vagy mindkét eset kombináciojával. Az indito impulzus bekapcsolja az EN- a számolo meg kikapcsolja, ha kiment az utolso impulzus.
Attol függ, hogy mit hajtasz meg a motorral, ha komoly nehéz berendezést, akkor kell a kolléga által irt felfutási meg lefutási meghajtás, de ha kicsi a terhelés és jo a tápod, akkor nem kell okvetlenül ilyesmi..
(#) sargarigo válasza KBal76 hozzászólására (») Okt 22, 2021 /
 
Picit off, de írnál nekem valamit erről a felfutás/lefutási dologról? Eddig azt hittem csak a komolyabb vezérlők csinálják, arduinóval még nem láttam kombinálva (nem mintha mérvadó lenne bármiben is hogy én mit láttam és mit nem ).
Hogy csinálod meg ezt az említett rámpát?
(#) Massawa válasza sargarigo hozzászólására (») Okt 22, 2021 /
 
Én ilyen megoldást a tekercselögépen használtam, mert különben szaggatta a vékony huzalt.
Van egy fix munkafordulatszám ( frekvencia/ T idö az impulzusok között) amit azonban az induláskor lépésenként ér el a motor, azaz minden impulzus egy kb 10szer lassabb frekiböl egy szublépéssel (T/10) gyorsabban megy ki a vezérlöre, amig el nem éri a névleges frekvenciát. Az én gépemen ezt 10 lépésben teszi meg.
A hozzászólás módosítva: Okt 22, 2021
(#) Kovidivi válasza sargarigo hozzászólására (») Okt 22, 2021 /
 
Az Arduino nem szab határt, ha jó a programozó (ember), bármit megold! Vagy ha nem lehetséges, akkor választ más kontrollert.
(#) KBal76 válasza sargarigo hozzászólására (») Okt 22, 2021 /
 
Én komolyan úgy gondolom hogy ezt neked nem kellene bemutatni.
Arduino nano-ra van CNC-Shield ami ezt komplettan 3 tengelyre megcsinálja.
(#) sargarigo hozzászólása Okt 22, 2021 /
 
Látom sikerült megborzolni a kedélyeket! Tényleg csak kétszer használtam eddig léptetőmotorokat, és ez a dolog nem került elő.
(#) kriszrap hozzászólása Okt 23, 2021 /
 
Sziasztok.
Egy animáció leprogramozásába szeretném a segítségeteket kérni kicsit bonyolultabbnak nézki.
Videó

Hogyan lehetne ezt elkészíteni elméletre lennék kíváncsi a kóddal elküzdöm csak nem tudom mivel lehetne könnyedén le programozni.
Segítségeteket előre köszönöm.
(#) Massawa válasza kriszrap hozzászólására (») Okt 23, 2021 /
 
Ez egy szinusz görbe térbeli leképzése.
(#) Egri Frédi válasza kriszrap hozzászólására (») Okt 23, 2021 /
 
Mivel akarod ezt megjeleníteni ? Hány led -del ?
(#) kriszrap válasza Egri Frédi hozzászólására (») Okt 23, 2021 /
 
Sziasztok
  1. int meret=8;
  2.   double Z;
  3.   double phase;
  4.   while(true)
  5.   {
  6.     phase=phase+0.5;
  7.       for(int x = 0; x < meret; x++){
  8.           for(int y = 0; y < meret; y++){
  9.               Z = sin(phase + sqrt(pow(map_float(x,0,meret-1,-PI,PI),2) + pow(map_float(y,0,meret-1,-PI,PI),2)));
  10.               Z = round(map_float(Z,-1,1,0,meret-1));
  11.               setVoxel(x,y,Z);
  12.           }
  13.       }
  14.       kirajzolas(50);
  15.       clearcube();
  16.   }
  17. }


Idáig sikerült megoldani keresgélés és a matek tudásommal ami kevés

Hasonlít egy szinusz függvényhez de messze nem a legtökéletesebb mint a képen.
Néha bebe villognak a ledek gondolom olyan értéket is kap vissza ami neki nem megfelelő.
De a ledek nem olyan rendezettek mint a videón.

Segítségeteket Megköszönném .
(#) szikorapéter hozzászólása Okt 23, 2021 /
 
Sziasztok. Ma újfent megépítettem egy régi kapcsolásom az AD9851-es DDS modullal, viszont amit észrevettem hogy ebből a modulból szinte alig jön ki jel (100mVpp max), még a régebbiből 2Vpp simán kijött. Mi lehet a gond? Igaz az előzőt majd 4 éve építettem, lehet az arduino-ban az egyik lib. frissült vagy valami? Vagy a modul lehet hibás? A szkópon is olyan zavarosan jön be a képe. Arduino nano + AD9851 DDS + I2C 4*20 LCD.

Válaszokat előre is köszönöm.
(#) H2opok hozzászólása Okt 23, 2021 /
 
Sziasztok.
Tudnátok segiteni? Egy Arduino nano az alany. Linken letölthető programot valaki ki tudná esetleg próbálni, hogy a feltöltés sikeres e?
Köszi
Bővebben: Link
A hozzászólás módosítva: Okt 23, 2021
(#) Egri Frédi válasza kriszrap hozzászólására (») Okt 23, 2021 /
 
Ha ezt egy 8x8x8 -as LED kockában akarod megcsinálni, az 512 db. led. Hogy akarod a led -eket meghajtani, mivel ? Egy fél színusz hullám ebbe nem hiszem, hogy belefér, kicsi lesz a felbontás. Inkább egy körbe forgó félkör íven mozgó
síkkal próbálkozz. Az egyes világító pontok helyzetét is könnyebb lesz kiszámolni.
(#) Egri Frédi válasza kriszrap hozzászólására (») Okt 23, 2021 /
 
De lehet egyszerűbb lesz, ha nem számoltatsz semmit a procival ...
Felosztod a kockát 8 síkra.
A 8 síkokon előre - papíron - kiszámolod mely ledek világítsanak.
Ezt soronként egymás után - ez így ugye 3x8 sor - berakod egy ciklusba. ( Kigyújtod a ledet, vár egy kicsit, leoltod. )

Szerintem - ilyen méretben - gyorsabb és egyszerűbb, mint függvényeket számoltatni ...
(#) majkimester válasza kriszrap hozzászólására (») Okt 23, 2021 / 1
 
A videót nézve ez nekem nem szinusz, hanem trapéznak látszik. Nézzük a jobb oldali legközelebbi oszlopot, minden ütemben 1-et lép fel, legfelül marad 4 ütemet, majd minden lépésben 1-et lép le, majd legalul marad 4 ütemet. A balról mellette lévő követi 1 ütem lemaradással, az melletti kettővel, a következő hárommal. Innen pedig szimmetrikus a minta, ezért elég a 4x4 oszlopra számolni, és kirajzolni 4 helyen egyszerre.
A trapéz mintát legegyszerűbben egy lookup táblával tudod megvalósítani, valahogy így:

  1. #define MERET       8
  2. #define UTEMSZAM    20
  3.  
  4. const byte lookup[UTEMSZAM] PROGMEM = { 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0 };
  5.  
  6. // ...
  7.      
  8.       while(true)
  9.       {
  10.           byte z;
  11.           byte index;
  12.           byte utem = 0;
  13.           for(byte x = 0; x < MERET/2; x++){
  14.               for(byte y = 0; y < MERET/2; y++){
  15.                   index = utem + x + y;
  16.                   if (index >= UTEMSZAM) index -= UTEMSZAM;
  17.                   z = lookup[index];
  18.                   setVoxel(x,         y,         z);  
  19.                   setVoxel(x,         MERET-1-y, z);                
  20.                   setVoxel(MERET-1-x ,y        , z);                
  21.                   setVoxel(MERET-1-x ,MERET-y-1, z);                
  22.               }
  23.           }
  24.           utem++;
  25.           if (utem >= UTEMSZAM) utem = 0;
  26.          
  27.           kirajzolas(50);
  28.           clearcube();
  29.       }


Hasonló táblázatos módszerrel megy a szinusz is a trapéz helyett, de ilyen kis felbontás esetén nem biztos, hogy látványra jobb:
  1. #define UTEMSZAM    22
  2. const byte lookup[UTEMSZAM] PROGMEM = { 0, 0, 1, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 6, 6, 5, 4, 3, 2, 1, 1, 0 };
(#) Massawa válasza majkimester hozzászólására (») Okt 23, 2021 /
 
Szerintem meg pontosan egy lecsengö szinusz, illetve amikor a folyadékban keletkezik egy hullám. ( jol ismert videotrükk az egyik élvezhetetlen mükávé reklámból, Clooneyval a föszerepben). Az van itt lemodellezve.
Nem hiszem, hogy jol fog mutatni egy 8x8x8 LEDs kockában.
(#) Josi777 válasza H2opok hozzászólására (») Okt 23, 2021 /
 
Szia.
Letöltöttem, valamint külön az RTClib.h-t is, mert azt nem tartalmazta az oldal. És simán lefordította az Arduino IDE 1.8.13. és sikeres feltöltöttem egy UNO-ra, mert épp az volt kéznél.
(#) Rober_4 válasza zosza18 hozzászólására (») Okt 24, 2021 /
 
Nekem szükségem volt egy olyan lcd író programra a legutóbb, ami a lehető legkevesebb, illetve mindig azonos időt töltsön az lcd írásával. Ez pontosan 1 karaktert ír csak az lcd-re egyszerre és azt is csak akkor, amikor meghívod az lcd refresh függvényt. Így annak az időzítésével vezérelheted a folyamatot. Én Due-n használtam...Bővebben: Link
A hozzászólás módosítva: Okt 25, 2021
Moderátor által szerkesztve
(#) H2opok válasza Josi777 hozzászólására (») Okt 24, 2021 /
 
Köszi. Akkor valamit én nem csinàlok jól. Pedig az rtclib is telepotve van. 1.8.16
(#) kriszrap válasza majkimester hozzászólására (») Okt 24, 2021 /
 
Basszus tök jól működik köszönöm.
Kicsit elemzem a kódot hogy és miért..
Következő: »»   707 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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