Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Mintaként
egyik forráskód részletem
ez már többet csinál :
Hasonlót kell neked is csinálni ... nekem éppen foxadóba kellett, kevesebb bittel 8 elég volt . delay() hanyagolásával millis() függvénnyel mérve az eltelt időt. A hozzászólás módosítva: Okt 21, 2022
Kész a programom.
Végül az egyeseket, és nullákat difiniáltam, és így a sync+ 100110010...stb-t kell megadni a megfelelő helyen. 7% ot foglal el eddig. Vagyis marad egy csomó lehetőség bővíteni. A Ti verziótokat kipróbálom szintén. Köszönöm mindenkinek a segítségét! void one(void) { digitalWrite(12, HIGH); //1 delayMicroseconds(700); digitalWrite(12, LOW); delayMicroseconds(380); } void null(void) { digitalWrite(12, HIGH); //0 delayMicroseconds(320); digitalWrite(12, LOW); delayMicroseconds(740); } x x x void nappali_1_le(void) { sync(); one(); one(); null(); És a többi..... A hozzászólás módosítva: Okt 22, 2022
Esetleg a teljes kiadandó vezérlő szavadat is egybe foglalhatnád 1 "teljes szóvá".
Akkor azt jobbra vagy balra shifteléssel bitenként vizsgálva 0/1 értéket sokkal kevesebb sorból állna a programod. Lásd morzekódolóm mintája. A sok bitedet 40 vagy mennyi 1 1 parancsszó + szinkron akkor azt 18al beszorozva csak alig 7-800 sor a one / null hívások egymásutánjai és tárhely foglalás. Ha meg a shiftelős módot használod az kb.: max kb utasítás 20 sor és másik 18 db állandóváltozó "tömb" amiben a vezérlőszavak vannak ágyazva. Jó lenne egy 64 bites integer típusú változó de azt sajna nem ismer az ardu. Akkor 1 parancsszó 4 vagy 5 8 (2 3 d 16 bites ) bites "szótöredékből " állna és a "szó kibetűző algoritmus" egymás után a 8/16 bites részeket külön olvasná fel és döntené el a 0/1 állapotot . (arduino integer változók méreteit meg kell lesni ) Hogy tudod összerakni egy "nagy szóvá" a "bitkolbászt" amit dekódoltál? pl.: 111001100111000100110 pl.: ez 21 db bit egymás után. 21/16 (word tipus) ~ 1,3 tehát van 1 egész word és meg egy kicsi maradék . Balról az első 16 bitet levágod : 1110011001110001 marad az utolsó 5 db : 00110 az első 16ot berakod az első tároló parancsszó részletbe (a definiált parancsszó tömbbe) az utolsó öt bitet pedig kiegészíted annyi 1 vagy 0 értékkel ami word tipus méretűvé nem teszi 00110 +11111111111 =0011011111111111 (jobb esetben akár ütköző / szóvégjellé is tehetné mert a mintáidban tuti nincs 11db egyes értékű bited egymás után az általad dekódolt mintákban ) de mivel fix a méret akkor csak a shiftelések számát kell állandóvá tenni a "vezérlőszavakat felolvasó bontó" függvényed számára. A hozzászólás módosítva: Okt 22, 2022
Ez a favágós , egyszerű erőből történő megoldás, ez jó lehet így is.
Idővel elfogynak az erőforrásaid (program tárhely)ezért érdemes átszervezni a programot ezért javasolnám a kissé bonyolultabb bitenkénti shiftelős szókiolvasást. A másik , hogy kényelmesebb 1 változó tartalmát át írni a "kvázi fejlécben"- változók deklarációs területén - mint azt a program törzsében 40 50 soron keresztül nul/one/nul/nul/ stb sorokat copy/paste módszerel bogarászni.Debug/ellenőrzés is egyszerűbb .... 1 helyen kell ellenőrizni és nem 50sorban. A hozzászólás módosítva: Okt 22, 2022
Teljesen igazad lehet, nézegetem a kódodat, ez egy kicsit még magas nekem, de fejtegetem....
Bár két három hete még semmit sem értettem a program írásból. IC-ét már programoztam fel, (PIC, ATMEGA) de ott mindig megvolt a progija (hex). Ez a legelső programom, amit én írtam. Mindig csak csodáltam azokat, akik értenek a programozáshoz.... Idézet: „Jó lenne egy 64 bites integer típusú változó de azt sajna nem ismer az ardu.” Érdekes nálam lefordul simán arduino alatt:
A hozzászólás módosítva: Okt 22, 2022
TNX Skori!
Akkor megoldva a 64 bites integer változó használata.Nem volt szükségem még ekkora bitmélységre és nem voltam biztos abban, hogy az arduino nyelvi környezet felkészült-e erre? A hozzászólás módosítva: Okt 22, 2022
A nyelv az C++, az Arduino csak könyvtárakat ad hozzá. A fordító az AVR GCC, annak kell támogatnia a 64 bites egészeket.
Gondold meg, hogy biztosan szükséged van rá? Ez egy nyolcbites processzor, elég sok órajel, mire elvégzi a műveleteket egy ekkora számmal.
Valóban ez is zavar, ekkora bitmélységű műveletek esetén, hogy lenne optimális a hosszú bitminta kiküldése/tárolása. Akár több 8 bites szórészletre osztva is működhet a küldő ciklus több részből álló bájtokat "olvas fel".
Idézet: „elég sok órajel, mire elvégzi a műveleteket egy ekkora számmal.” Igen ez is igaz és ekkor a bitek közti kiküldési idő is számíthat. Rosszabb esetben már a vevőoldali dekódolást is zavarhatja ha túl sokáig számolja a hosszú bitek shiftelésének eredményét. Lehet ez szőrszálhasogatásnak tűnik , de lehet olyan helyzet amikor már ez gondot jelenthet. A hozzászólás módosítva: Okt 22, 2022
Sziasztok!
Egy kis segítséget kérnék tőletek. Mitől van az ,hogy a hőmérő szenzor ugrál,pár fokot folyamatosan? A kód:
A szenzor kétkábeles valami,nem tudom azonosítani.De egy 10 K ellenállással van a Gnd,és a jel között.
Az ugrálás azért lehet mert csak 1-szer mér az AD bemenet.
Több mérés átlagát kellene értékelni és azzal a relét húzni. 5-10 másodpercenként újra mérni és ezt 5-10-20 db értékéből átlagot számolni. Ha nagyon szofisztikált lenne az átlagoló függvényed akkor legkisebb és legnagyobb értéket el is dobhatná 1 1 átlag számítás eredményei közül. Természtesen ennyivel lassab lesz a kijelzés sebessége.
Valószínűleg zajos az analóg jel. Az analóg bemenetre egy RC szűrő kéne, valamint 1 mérés nem mérés. Valamilyen átlagolás vagy digitális szűrés is javíthatja a mérést. A statisztikai átlagolás általában segít. De megoldás lehet az LSB hiba kiküszöbölésére, ha 1 bittel csökkented a felbontást a mérés után.
Köszönöm a segítséget! Átlagolást még nem csináltam,de megpróbálom.
Gyakran a tápfeszültés ingadozása ill. zajossága is okozhatja a mérés pontatlanságát, ugyanis ahogy a programodból látom, az ADC referencia feszültsége az 5V-os tápon van. Ebben az esetben külső referencia is segíthet.
Sziasztok!
A kérdésem az lenne, hogy ha egy UNO-nak (Kínai) nem adok külön DC7-12V-ot, csak mondjuk 5V-ot akkor ez okozhatja, hogy a jelalak ami a kimeneten megjelenik elég ergya lesz? Ugyan ez agy nano-nál (kettőnél is) viszont tök szép.
Ha a Vin bemenetre kötöd, akkor persze, hogy kevés az 5V.
"Ugyan ez egy nano-nál (kettőnél is) viszont tök szép." Ha a panelre épített LDO olyan, hogy alacsony feszültségnél kinyit és átvezet, akkor jó lehet. Ultra Low Dropout LDO regulators A hozzászólás módosítva: Okt 26, 2022
Pontosan milyen értékeket ír ki és mennyit ugrál?
Szia asch!
A kiírt érték a valós hőmérsékletnek megfelel,csak 1-2 fokot ugrál ,úgy,hogy semmi nem változik körülötte. Benne van a pohár vízben mind a kettő szenzor és ,így is ugrál a mért hőfok,vagy felfele,vagy lefele.
Szia Josi777!
Szóval segíthet egy sima kondi? Ide jó a kerámia kondi vagy csak a fólia jó? Ezt az átlagolást próbáltam megérteni,de nem nagyon találtam hozzá példát
A/D mérési eredmény átlagolás probléma: Bővebben: Link
Simán jó a kerámia kondi is.
Itt egy ajánlott illesztés NTC-hez. Átlagolásnak, ahogyan már egy kolléga említette, a statisztikai átlagolást ajánlom (a kúszó átlag is jó, csak az egy kicsit bonyolultabb). Röviden a működése: Számos analóg mérést sorba rendezel, majd a lista legvégéről 1-2 értéket elhagysz, majd a maradékot átlagolod. A rendezés azért kell, hogy a kiugró értékeket el tudd különíteni. Az egyszerűség kedvéért nem vizsgáljuk, hogy tényleg kiugró érték-e, a két végét levágjuk a sorozatnak. Majd ezt átlagoljuk. Erre egy példaprogramot itt találsz (hibakezeléssel együtt): Remélem, a változónevek eléggé beszédesek. NTC statisztikai átlagolás példaprogram A hozzászólás módosítva: Okt 27, 2022
Az 5V helyett az osztót az Aref lábra is lehetne rakni, 2,56V belső referenciát használni.
Létezik long long típusú változó is, az is 64bit (lehet csak más a neve, de Arduino alatt használtam). Abban már elég sokminden belefér, és szerintem gyorsabb, mint a float.
A hozzászólás módosítva: Okt 28, 2022
Arduino Uno-ban lévő ATMega328-ban 1,1V-os belső referencia van, de a Mega2560 meg tudja az 1,1 és a 2,56V-ot is.
Sziasztok!
Van egy sötétedés szenzorom. (Photoresistor). Természetesen változik az értéke. Ha különböző értékekhez más állapotot akarok adni, akkor ez működhet, vagy ennek semmi értelme?:
A hozzászólás módosítva: Nov 2, 2022
Moderátor által szerkesztve
Jobb lenne egy kis hiszterézist belevinni a dologba.
A hozzászólás módosítva: Nov 2, 2022
Moderátor által szerkesztve
Ebben a formában ez nem működik, ugyanis mindig a második fog teljesülni. Mire gondoltál, amikor az if -nél a 0-át és az 1-et odaírtad? Azzal ugyanis a vizsgálattól függetlenül megadtad a feltétel kimenetét
A szerkesztésed után beírt második megoldásban pedig ajánlatos lenne egy valamekkora hiszterézis, hogy ne billegjen a határértéknél. A hozzászólás módosítva: Okt 31, 2022
|
Bejelentkezés
Hirdetés |