Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Ez nagyon jó, köszönöm szépen, viszont valamiért nem működik. Ezt írja:
Arduino: 1.8.5 (Windows 7), Alaplap:"Arduino Nano, ATmega328P" Ora:7: error: expected initializer before 'TM1637Display' TM1637Display.display(CLKPIN, DIOPIN); ^ C:\Users\User.User-PC\Documents\Arduino\Ora\Ora.ino: In function 'void setup()': Ora:11: error: 'display' was not declared in this scope display.setBrightness(0x0F); ^ C:\Users\User.User-PC\Documents\Arduino\Ora\Ora.ino: In function 'void loop()': Ora:17: error: 'Clock' was not declared in this scope hh = Clock.getHour(h12, PM); ^ Ora:18: error: 'display' was not declared in this scope display.showNumberDecEx(hh,64,false,2,0); ^ exit status 1 expected initializer before 'TM1637Display' Ennek a jelentésnek több információja lehetne a "Bővebb kimenet mutatása fordításkor" opció engedélyezésével a Fájl -> Beállítások-ban.
Közbe megoldódott, gondolom a TM1637 könyvtár volt más...
Sajnos nagyon nem pontos, van ahol már 10fokot is csal. Így más megoldást keresek.
Szerintem ha kalibrálod, akkor jó lesz. Ez a számolási mód, amit alkalmaztál, nekem nem szimpatikus.
Ha lineáris az NTC (10K NTC-hez 10K ellenállás tartozik), akkor nagyjából jó értékeket fogsz kapni. 25°C-nál és 90°C-nál kalibrálnám (attól függ persze, mire kell. Ha szoba hőmérsékletet akarsz mérni, akkor az NTC nem jó választás). +-1°C-ra tippelném ilyenkor a pontosságát, ami pl. hővédelemhez megfelelő.
A kiszámolás módja nem saját ötlet, úgy akadtam rá. 80-130fok között lenne használva 2-3fokos pontosság elegendő. Találtam rá más jellegű szoftveres megoldást, most tesztelem.
Kalibrálnod kell, nem pedig másik számolási módot keresni...
Két ponton eltárolod a mért ADC értéket (mondjuk 25°C és 90°C), majd ebből visszaszámolod az aktuális hőmérsékletet. Ekkor fogsz kapni pontos értéket. Az NTC-nek van szórása, az soros ellenállásnak is, arról nem is beszélve, hogy az Arduino 5V-os tápját használod feszültség referenciának, ami a pontos ellentéte. Az NTC-t az Aref-re kell kötnöd a soros ellenállás pedig a GND-re, a közös pont mehet az ADC bemenetre. Az ADC referenciát át kell állítanod a belső 1.1V-osra. Ez lenne a korrekt út. A hozzászólás módosítva: Márc 25, 2020
Az egyértelmű, hogy az Aref-re került az 5V helyett. Hasonlóba gondolkodom, mint amit írtál, kezd össze állni a mérés így.
4 számjegyű kijelzőm van. Azóta elkezdtem azon dolgozni, hogy a Timer1-et felszabadítom a kijelző frissítés alól és ezt a funkciót átadom a főprogramnak. A főprogramban lévő while és for ciklusok a hang kiadásért felelősek, amik így viszont megakasztanák a kijelző frissítést, amint a program belép ezekbe a ciklusokba, de ha a csipogást a Timer1-nek adom, akkor ez is kiküszöbölődik. Egyenlőre most ott tart a dolog, hogy a főprogramból már működik a kijelző.
Szevasztok!
Két kérdésem lenne, de elég gyenge vagyok a témában, nem elején, hanem a közepén kezdtem, így sok hiányom van. 1. 1-2 éve felhagyott project (Arduino nano, több csatornás hőmérő, SD tárolás ez már összejött, de finomítani kellene rajta) működő paneljáról (mert elveszett az eredeti anyag) ki lehet-e nyerni a futó programját? 2. A soros monitor adathalmazát lehet-e kinyerni, menteni? Választ köszönöm, üdv: StMiklos
1. Csak gépi kódot tudsz visszakapni, tehát a későbbi szerkesztés nagyon nehéz.
2. Ha soros portra csatlakoztatod, jön az adat, akkor le tudod menteni.
Köszönöm!
Az nekem is leesett korábban, hogy csak gépi kódsorozat jöhet vissza, azzal meg elég nehéz bánni, nekem ez felejtős. Soros portról? A módját még nem tudom (van a lapon csatlakozó), lehet megpróbálom. Kösz: StMiklos
A soros porton nem fog a programod visszajönni, ha erre gondolsz. Ott csak az az adat jön, amit a programodba a Serial.print-tel beírtál. Más nem fog jönni. Egyszerűbb újra megírni a programod, mint megpróbálni visszafejteni. Vagy ha csak lemásolni kell az AVR tartalmát, az megoldható (az Arduino alapból nincs lezárva, tehát ki lehet olvasni a tartalmát).
A hozzászólás módosítva: Márc 26, 2020
Szevasz!
Nem, nem a programra, hanem a futása közben a soros porton (Arduino) megjelenő adatokra gondoltam. Kösz, StMiklos
Hali!
"Jobb" terminál programok helyből tudják a soroson jött cuccot menteni, a megjelenítés mellett... pl: https://sites.google.com/site/terminalbpp/
Csak kérdés. Gyakran irok kodokat léptetö motorokra, és sok közülük nagyon komplex - speciális CNC hajtások és gyakran vagyok gondban biztosan megállapitani, hogy a kodban csuszik néhány lépés vagy a mechanizmusokban. Ezért ma elhatároztam, higy fejlesztek egy lépésszámlálot, hogy valoban mennyi lépésparancsot kapnak a tekercsek. ( nem minden berendezésben van speci meghajto modul, azaz én irom a 4 (vagy több) állapotot is a motorhoz, ami 4 porton csatlakozik a procihoz.
Aki már csinált ilyesmit gondolom tudja miröl beszélek. Nos a kérdés az lenne, hogy mi mindent kellene egy ilyen lépésszámlálonak tudnia. Jelenleg számolja a 4 kivezetés állapotát ( ha bemenet bármelyike változik az egy lépés). Ha megáll a motor a számolt értéket eltárolja és mutatja a displayjen. Majd ujra várja hogy változik-e valami a bemeneten és akkor ujra számol nullátol. Az várakozási idöt be lehet állitani 5-20 sek tartományban. Van még valami ötlet mi mindent merülhet még fel?
Szevasz!
És köszönöm! Nem találok lehetőséget, pédát az alábbira: Arduino, SD írás, kódrészlet:
File megnyitás után ez végrehajtódik, működik. Lehetséges ezt, és milyen szintaktikával egy parancssorba tenni, pl:
Fordító lefordítja, de csak a meresszamot hajtja végre, többit figyelmen kívül hagyja.. Most hogy nézem, nem vagyok biztos benne, hogy a nyitó/zárójeleket így írtam a programban is. Nem tudom most megnézni, éppen mérés fut. Választ köszönöm, üdv: StMiklos A hozzászólás módosítva: Márc 27, 2020
Moderátor által szerkesztve
Logikai analyzer kapásból megoldja a problémád.
A hiba lehet mechanikus természetesen, de sokszor fordul elő a hétköznapi glitch vagy ramp hiba. A ramp hiba aránylag gyorsan kijön, a glitch az aljas! Tehát meg kellene nézni, hogy az interpolációs rutinjaidnál előállhat-e olyan helyzet, amikor a vezérlő kimeneteid csak egy nagyon rövid impulzust adnak vagy nagyon rövid ideig vesznek fel más állapotot. Aztán arra vagy van válasz, vagy nincs, esetleg elszámolás (belül azt tudjuk, hogy hol vagyunk, de a kimenetre beszaladt egy 120nsec-es tüske). Persze ehhez ismerni kellene jobban az egész dolgot. Esetleg külön megszakítás lekezelése/egymásrafutása tud még vicces lenni.
sSzia. Már rájöttem miben hibáztam. Köszönöm szépen azért a válaszokat. Valami okos kisokost nem tudnátok nekem ajánlani amiből tanulhatnék a programozásokról?
A hozzászólás módosítva: Márc 27, 2020
Moderátor által szerkesztve
Azt csak gondolod, számolj majd meg egy logikai analizátoron mondjuk 6400/4 állapotot ( az egyik esetben ez a mozgási minimum). És néha téved a gép.
Meg elég sok trükk is kell ilyen gépekhez. Az egyik pl nagyon ritkán mozog ( 5-10 percenként egyszer). Az elsö verzioban nagyon szivtam, nyilván nem akartam a tekercseket állohelyzetben állandoan füteni, hiszen a mozgatott szerkezet nem tudta a motort elmozditani az önzáro mechanizmus miatt. Igy amin a motor célba ért, lekapcsoltam a tekercsekbe menö áramot. Ez nem volt jo, a motor 10-15 lépéssel tovább forgott a tehetetlenśeg miatt. Igy most az utolso lépés kb 3 mp-g rajta marad a tekercseken (ennyi idö alatt megnyukszik a mechanizmus), és csak ezután megy standby modusba.
Vagy egy másik eset ez pl még nem világos a speci motormeghajtokon sem.Mondjuk kiküldök 10 lépést a motorra majd hagyom megállni (standby) ha ujra kell léptetni akkor melyik állapottal kezd a ez elözö 10 lépést követö 11.-el , vagy valamilyen default állapottal? Nem tudom, higy standbyban vagy az EM mit kapcsol le az áramkörben, gondolom a motoráramot csökkenti vagy kapcsolja ki.
A második bekezdésben érintetted azt, ami hasonló probléma, mint amit wbt felvetett. A következetes szekvencia jelenléte. Ha a lépések elvárt rendjéhez képest valami más érkezik, akár rossz sorrendben, akár túl rövid jel formájában, hibás lépéshez vezethet.
Ha ilyen analizátort készítesz, az is egy lehetséges feldolgozás lehet, hogy számolod az egyik irányú megfelelő szekvenciájú lépéseket, külön a másik irányú lépéseket, és ha olyan állapot áll elő, ami egyikbe se illik, akkor azt mint hibás állapotot külön számolja. Így ha a 10. lépés után jön a 11. az egyik irányba számol, ha a 9. akkor a másik irányba számol, ha a 8. lépés, akkor azt mint hibás állapotot számolja. És akkor még a wbt által említett ramp hibával nem foglalkoztál, meg a többivel, mint például az általad is említett megállási bizonytalanságokkal.
Nincs ramp a kodban, a mozgatott szerkezet pehely könnyü és amugy is lassan mozog alig 20 Hz a lépésfreki. Ki kell még találnom valamit mi mindent jelezzen. Gyakorlatilag most csak a lépéseket kell számolni. Elöbb azt fog kelleni tisztáznom, hogy nincs-e belsö tévedés a kodban ami rossz lépésszámot ad ki.
Más. Lehet az Arduinoban olyasmit csinálni, hogy 4 bemenetet mint fél bytet kellene beolvasni? A bytere (8bit) van megoldásom de ilyen röviditett izére nincs. Szoval van 4 digi bemenet és annak az egyidejü beolvasása megoldhato? Ha nem akkor vissza kell mennem ASM-be. Az is elképzelhetö, hogy a hiányzo másik 4 bitet egy fix nibbleven helyettesitem mondjuk 0xF-l? Ilyesmit még nem csináltam és az alapdolgok között nem találtam megoldást csak 8 bites verziora. Kösz. A hozzászólás módosítva: Márc 27, 2020
Nem valószínű, mert 4 bites regiszter maximum 4 bites vezérlőben van. Magadnak kell csinálni ha nem jó a 8 bites port olvasás.
Esetleg ez alapján tudsz, de lehet, hogy jobban jársz ha asm-ben írsz egyet, mert ez nem tudom milyen gyors. A hozzászólás módosítva: Márc 27, 2020
Kösz, ugyanezt találtam én is. Na majd még valahogyan elgondolkodok rajta. Azt sajnos még nem tudom, hogyan lehetne az Arduino C nyelvet összekombinálni az ASM-mel.
Szuper, kösz idáig még eddig nem jutottam el...
Simán be lehet olvasni 4 bitet egyszerre, ha azok egyetlen porton vannak. Nem kell hozzá ASM-et írni, C-ből elérhető a művelet:
Ez működik Arduino IDE-ben is. A PINA helyére tedd azt a portot, amit olvasni akarsz. Csak tudni kell, hogy melyik port melyik lábai hova vannak mappingelve, de ezt az "Arduino UNO pinout" keresőszóval meg lehet találni. Semmi hátránya nincsen annak, ha így közvetlenül használod a lábakat, csak annyi, hogy platformfüggő lesz a kódod, azaz más mikrovezérlőre nem lehet ugyanezt a programot feltenni. Ez a kód pár utasításra fordul, és pár ciklus alatt lefut. A beolvasás konkrétan egy IN utasítás lesz, ami 1 ciklus alatt fut le. A hozzászólás módosítva: Márc 27, 2020
Nemrég az Arduino 60 nap alattot javasolták itt többen is. Én nem ismerem, de jó lehet, és meg lehet még rendelni a könyvet a TávIR-tól.
Ha angolul is értesz, akkor végtelen sok anyagot találhatsz a neten. Ha nem csak konkrétan az Arduino érdekel, hanem mély tudásra is vágysz, akkor egy _nagyon_ jó videó sorozatot tudok ajánlani a beágyazott programozásról, amiből nagyon sokat lehet tanulni, akár profik is profitálhatnak a későbbi részekből: https://www.youtube.com/watch?v=gQOv8o5lS2k Quantum Leaps, LLC: Embedded Systems Programming Lesson 1: Counting
Szia
Pontosan ilyesmit kerestem ( ilyesmivel még nem volt dolgom ). A jelenlegi program a NANOn megy ahol a D2,3,4,5,6,7 négyet kiválasztok pl D2,D3,D4,D5 ami a port D 4 bitje PD2,3,4,5. A többi nem kell. Gyakorlatilag a maradék 4 bitet is felhuzhatom Highre. ( azok nem változnak), igy az összehasonlitáshoz megfelel az egész byte is, hiszen ha változik valami, csak az a 4 bit változhat. Azaz akár ugy is maszkolhatom hogy 0b00111100. Azt hiszem ez tökéletesn elég lesz erre az alkalmazásra. Kösz! |
Bejelentkezés
Hirdetés |