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   496 / 852
(#) Rober_4 válasza berkesandor hozzászólására (») Nov 30, 2018 /
 
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.
(#) berkesandor válasza Rober_4 hozzászólására (») Nov 30, 2018 /
 
Mérd meg, ez gyorsabb, vagy a 0 elé irás.
(#) morgo hozzászólása Dec 2, 2018 /
 
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?
(#) Kovidivi válasza morgo hozzászólására (») Dec 2, 2018 /
 
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.
(#) morgo válasza Kovidivi hozzászólására (») Dec 2, 2018 /
 
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
(#) Kovidivi válasza morgo hozzászólására (») 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.
(#) morgo válasza Kovidivi hozzászólására (») Dec 2, 2018 /
 
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
(#) Kovidivi válasza morgo hozzászólására (») 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
(#) morgo válasza Kovidivi hozzászólására (») 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
(#) Kovidivi válasza morgo hozzászólására (») Dec 2, 2018 /
 
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
(#) morgo válasza Kovidivi hozzászólására (») 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.
(#) krauszkrisztian14 hozzászólása Dec 3, 2018 /
 
Üdv!
Hogyan lehet egy byte tipusú változó egyetlen bitjét módosítani?
Előre is köszönöm!
(#) tbarath válasza krauszkrisztian14 hozzászólására (») Dec 3, 2018 /
 
and/or, ahogy itt le van írva: Bővebben: Link
  1. int a = 117;
  2. // bekapcsolod jobbról a 3. bitet
  3. a = a | 0b00000100;
  4. // kikapcsolod jobbról a 4. bitet
  5. a = a & 0b11110111;
(#) krauszkrisztian14 válasza tbarath hozzászólására (») Dec 3, 2018 /
 
É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
(#) tbarath válasza krauszkrisztian14 hozzászólására (») 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:
  1. if (HIGH == digitalRead(3)){
  2.         a = a | 0b00000100;}
  3. else{
  4.         a = a & 0b11111011;}

Vagy akár még else ág se kell, ha az elején kinullázod:
  1. a = 0;
  2. if (HIGH == digitalRead(1)){    a = a | 0b00000001;}
  3. if (HIGH == digitalRead(2)){    a = a | 0b00000010;}
  4. if (HIGH == digitalRead(3)){    a = a | 0b00000100;}
  5. if (HIGH == digitalRead(4)){    a = a | 0b00001000;}
  6. //stb.

Persze ettől elegánsabban is meg lehet csinálni, de most direkt a lehető legegyszerűbb megoldást írom le.
(#) krauszkrisztian14 válasza tbarath hozzászólására (») Dec 3, 2018 /
 
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...
(#) tbarath válasza krauszkrisztian14 hozzászólására (») Dec 3, 2018 /
 
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.
(#) krauszkrisztian14 válasza tbarath hozzászólására (») Dec 3, 2018 /
 
Így már értem, csak a byte változóval nem dolgoztam még.
Még egyszer köszönöm!
(#) icserny válasza krauszkrisztian14 hozzászólására (») Dec 4, 2018 /
 
(#) tbarath hozzászólása Dec 4, 2018 /
 
Találtam egy elég érdekes ADC leírást/kísérletezést: Bővebben: Link
(#) attika hozzászólása Dec 4, 2018 /
 
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?
(#) Pgeorge80 hozzászólása Dec 4, 2018 /
 
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!
(#) tbarath válasza Pgeorge80 hozzászólására (») Dec 4, 2018 /
 
A teljesítmény leginkább csak a kapcsolóelemen múlik, viszont ez a téma itt teljesen off.
(#) sargarigo válasza attika hozzászólására (») Dec 5, 2018 / 1
 
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.
(#) szikorapéter hozzászólása Dec 12, 2018 /
 
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.
(#) tbarath válasza szikorapéter hozzászólására (») Dec 12, 2018 /
 
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:
  1. $AVRDUDE -C $CONFPATH -patmega2560 -cwiring -P/dev/$PORT -b115200 -D -Uflash:w:$HEXPATH:i

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
(#) szikorapéter válasza tbarath hozzászólására (») Dec 12, 2018 /
 
Na akkor van még mit tanulnom.
(#) tbarath válasza szikorapéter hozzászólására (») Dec 12, 2018 /
 
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?
(#) szikorapéter válasza tbarath hozzászólására (») Dec 12, 2018 /
 
Most telepítek mert újraraktam a gépet de az arduino-t elfelejtettem feltenni. Aztán jöhet a CH340 illesztő.
(#) tbarath válasza szikorapéter hozzászólására (») Dec 12, 2018 /
 
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.
Következő: »»   496 / 852
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