Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Nem akartam feleslegesen osztogatni a sebesség miatt, de mivel sem az sprintf-et sem a printef-et nem tudtam működésre bírni, mindig -1-et adott vissza, lehet ez lesz... vagy ez a 0-át eléíró megoldás...
Köszönöm.
Mérd meg, ez gyorsabb, vagy a 0 elé irás.
Sziasztok! Elképzelhető, hogy egy lcd.clear nem tud végrehajtódni, mert túl gyorsan továbblép a program? Az a történet, hogy egy adott Mega alaplap,3410 lcd-vel. Enkóderrel lapozok egy menüben. Ha be voltam lépve valamelyik opcióba, aztán forgatom az enkódert, lapoz a következtő menüpontra. Eddig rendben is lenne minden, csak előfordul, hogy elfelejti törölni az előző szövegeket. Amíg egy másik libet használtam az enkóderhez, ilyen nem fordult elő. Az viszont nagyon lassú volt (analóg bemenetet használt), ezért váltottam egy másikra ami megszakításokkal dolgozik. Az enkóder függvényében van ez a sor: if (countLast != count) { .....} ide van berakva a problémás lcd.clear. Vannak itt digitalWrite parancsok, meg néhány más is, amit végre kell hajtani ha tekerem az enkódert. Mindent rendesen megcsinál, csak a képernyőtörlést nem. Minden második tekerésnél az lcd is törlődik, vagy ha nagyon lassan tekerem az enkódert, akkor is. Normál sebességnél viszont nem. Azért az enkóder függvényébe raktam, mert így nem kellenek késleltetések, nincs villogás, minden tekeréskor egyszer végrehajtódik, ez tűnt logikusnak. Az lcd.clear-t már beraktam 5x egymás után, akkor sem mindig működik, csak jól belassítja az enkódert. Mi lehet erre a megoldás?
Programozási hiba van, ez biztos. Ha az lcd.clear() valahova be van írva, az mindig végrehajtódik, amikor meghívásra kerül, gondot egyedül az okozhat, ha a bit-banging kommunikációt megszakítja egy megszakítás. Az lcd.clear egyébként lassú függvény, nem raknám megszakításba! Azt sem érzem szükségesnek, hogy a rotary megmozdításakor 1ms-on belül le legyen törőlve a kijelző, bőven elég lenne egy változót 1-be billenteni, a főprogramban pedig ezt figyelni. Ha jó a főprogramod, maximum 20ms-mal később minden függvényed lefut, ami a szemnek fel sem tűnik.
Vátozót berakni, meg sem fordult a fejemben. Pedig ez jó megoldás lehet, ki is próbálom. Jelenleg van 3-5 sor az lcd-n amit törölni kéne, és a tekerés sebességétől függően 1-2 vagy több sor is törlődik, de csak negyon ritkán fordul elő, hogy minden. Köszi az ötletet!
Ui. Változó berakva, így hibátlanul működik. A hozzászólás módosítva: Dec 2, 2018
Az lcd.clear egy parancs az LCD-nek, mindig ugyan annyi idő alatt hajtódik végre, lényegtelen, hány sort kell törölni. A bit banging miatt pedig sokáig tart a parancs.
Végül is jól sejtettem, hogy nincs ideje végrehajtódni. Csak a megoldáshoz kellett egy kis lökés.
Most a loopban van az lcd.clear, utána visszaállítja a változót, ami az enkóder függvényében kap true értéket. A hozzászólás módosítva: Dec 2, 2018
Végrehajtódik az egész parancs, elejétől a végéig, tele van pici delay-ekkel, amiknek a hosszúsága korlátos, és amikor bejön egy megszakítás, akkor egy várakozás hosszabb lesz, mint kellene, 0 helyett 1-et olvas be az LCD, és nem tudja értelmezni a parancsot, emiatt nem hajtódik végre. Kicsit kusza a történet, mert ha ténylegesen megszakításba raktad az lcd.clear parancsot, akkor azt nem fogja semmi más megszakítani, kivéve ha engedélyezve van a megszakításon belül a megszakítás. De le lehet tesztelni. Ha megszakításba van a parancs, és forgatod az enkódert, akkor a millis() megszakítasai csúszni fognak, nem másodpercenként fog növekedni. Mindegy, ez már túl sok infó. Szerintem nem megszakításba került az lcd.clear parancs, és simán az enkóder tekerése is megszakította az lcd.clear parancs lefutását (ami kicsit később folytatódott). Az enkóder prelleg is, nem tudom, ez kezelve van-e.
A hozzászólás módosítva: Dec 2, 2018
Az enkóder prellegése biztosan kezelve van, mert van olyan opciója is, ha bizonyos idő alatt (beállíthatóan) pl. 5 tekerést érzékel, akkor megintcsak beállíthatóan akát 50-et számolhat. Ez prellezés mellett igencsak érdekes működést eredményezne. Egyébként ezt a libet használom: Bővebben: Link
Ha szoftveres a prellmentesítés, akkor ms-ként többször is lefutott az lcd.clear függvény is.Ami nem gond, ha szoftveres, de akkor tartson tényleg rövid ideig.
A hozzászólás módosítva: Dec 2, 2018
Ha már lcd. Van egy olyan problémám is, hogy nem tudom állítani a kontrasztot. Ez lehet az lcd hibája? PCD8544_master libet használok kicsit átírva a felbontás miatt. 3310, 5110 lcd-n állítható volt szoftveresen a kontraszt. Ezen nem. Próbáltam U8Glib-et is, azzal sem működik. Bármilyen értékű kondit rakok a Vout és a GND közé. Most 75 nF környékén van, így nem túl magas a kontraszt.
Üdv!
Hogyan lehet egy byte tipusú változó egyetlen bitjét módosítani? Előre is köszönöm!
and/or, ahogy itt le van írva: Bővebben: Link
Én 8 digitális láb által beolvasott 8 db 1-es vagy 0-ás számot mentenék el vele. Azt hogyan lehet?
A hozzászólás módosítva: Dec 3, 2018
Meddig jutottál? Hol akadtál el?
Mert szerintem ha tudod hogyan kell bitet ki és bekapcsolni, ezen kívül már csak egy if kell hozzá bitenként:
Vagy akár még else ág se kell, ha az elején kinullázod:
Persze ettől elegánsabban is meg lehet csinálni, de most direkt a lehető legegyszerűbb megoldást írom le.
Köszönöm szépen!
Akkor, ha jól látom, a függőleges vonal arra van, hogy csak az egy adott bitet írja át? Vagy miért? Ilyet még sose csináltam...
Szívesen.
A függőleges vonal (pipe, magyar billentyűzeten altgr-w) az OR (vagy) nevű logikai operátor. Linkeltem korábban is, de lehet hogy elkerülte a figyelmedet, szóval ismét: Bővebben: Link A bitműveletek szépen el vannak benne magyarázva, igaz angolul, de a számok angolul is ugyanazok, a vagy/és/nem/stb. műveletek igazságtáblája nyelvfüggetlen. De ha nagyon nem megy, akkor a magyar wiki-n is fent vannak: Bővebben: Link. Maga a művelet ugyanaz, ha ezt megérted akkor már csak a C szintakszist kell hozzá megtanulnod.
Így már értem, csak a byte változóval nem dolgoztam még.
Még egyszer köszönöm!
A C programozási nyelv (magyarul)
Találtam egy elég érdekes ADC leírást/kísérletezést: Bővebben: Link
Sziasztok.
Az mitől lehet hogy az Arduino Ide 1.8.5 10-ből 10X hibátlanul fordít Mega 2560-ra de a 1.8.7, 10-ből 5X tuti hibázik?
Sziasztok! Kis segítség kellene! Nodemcuhoz kellene nekem kapcsolási rajz, 12 V 250w pwm vezérlés ledszalaghoz! Neten kerestem, de nem találtam, csak kissebb teljesítményhez!
A teljesítmény leginkább csak a kapcsolóelemen múlik, viszont ez a téma itt teljesen off.
Ha van olyan ide ami beválik, akkor azt kell használni! Párszor már derült ki hogy bugok vannak benne. Most pontosan nem emlékszem, de rémlik pár oldallal visszább hogy volt már panasz a 7-esre.
Sziasztok. Elkészültem ezzel a projectel, bedobozoltam , viszont a kódot nem tudom hogy kell feltölteni egyszerűen nem jövök rá.
Remélem valaki tud benne segíteni. Minden esetre itt van a komplett .zip-ben kimentett forráskód.
Lengyelben nem vagyok túl jó, szóval nagyrészt csak érzésre mondom amit. Ő linuxot ír, bár szerintem windows alá is megvannak a megfelelő tool-ok, bár azt annyira nem ismerem.
A dolog 2 részből áll: 1. fordítás (Kompilacja): ehhez lehet hogy kell linux, de ezt akár egy virtualbox-ba telepített linuxon is megteheted (itt debian/ubuntu vonalra írja a toolchain telepítését), vagy akár én is szívesen lefordítom a kódot és elküldöm a .hex file-t. 2. telepíteni az arduino lapra (Wypalanie kodu na Arduino): amit meghív a programozáshoz, az a "./scripts/flash_arduino.sh " nem más, mint az avrdude meghívása felparaméterezve:
Ha van a gépedre telepítve arduino IDE, akkor tuti van avrdude a gépeden, azzal fel lehet tenni, csak ezt a paraméterezést kell windows-ra "átfordítani". A hozzászólás módosítva: Dec 12, 2018
Na akkor van még mit tanulnom.
Lengyelül?
Amúgy nem olyan sárkányos. Maga a fordítás rész úgy néz ki, hogy a git clone után 2 perl kódra ad execute jogot, aztán meg hív egy make-et, ami a megfelelő makefile alapján lefordítja és a kódot, ennek az eredménye lesz egy .hex file (bináris kód a uC-nek). Aztán ezt felteszi avrdude-dal. Van arduino a gépeden?
Most telepítek mert újraraktam a gépet de az arduino-t elfelejtettem feltenni. Aztán jöhet a CH340 illesztő.
OK, akkor ha ez megvan akkor tegyél fel egy bármilyen arduino lapra egy blinket, és az ablak alján nézd meg alaposan a log részt. Ott kell lenni egy megfelelő avrdude sornak, ha az megvan akkor sokkal előrébb leszünk.
Én mára eltettem magam, holnap napközben remélem lesz időm a meló mellett benézni ide. |
Bejelentkezés
Hirdetés |