Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Igen.Atmegat égettem vele.
Ez is ATMega, menni fog ez is. Csináld pont úgy, ahogy a múltkor.
![]()
Sziasztok!
Hogyan tudok kitöltési tényezőt állítani az alábbi pwm-ben:
Ilyen beállításban nem tudom. Mit szeretnél elérni? Úgy tudom, ha a 8 bites timernél frekvenciát és kitöltési tényezőt is állítasz, akkor csak 1 kimeneten tudsz PWM-et állítani.
Így a 6-os lábon lesz PWM-ed és a delay(), illetve a millis() függvényed eléggé elállítódott lesz.:
Egy olyan programot szeretnék amiben tudom állítani a frekvenciát 1KHz-től Kb 100KHz-ig és a kitöltési tényező is állítható. Nem gond ha csak egy kimeneten lesz pwm.
Kipróbáltam amit írtál de uno-n nem csinál semmilyen jelet.
Szia, esetleg próbálkozz a TimerOne könyvtárral.
Furcsállom, hogy nem működik, mert nálam igen.
Ha ezt szeretnéd, amit írtál, akkor a 16 bites timer1-et használjad. Sokkal jobb felbontásod lesz és ott mindkét kimenetet tudod használni PWM-módban. A frekvenciát az ICR1-es regiszterbe tudod beírni. A PWM-et az OCR1A és OCR1B regiszterekbe. A PWM maximum értéke mindig az ICR1 lesz. Tehát ahogy növekszik a frekvencia, úgy csökken a PWM felbontása.
Szerk: Igazad van, nem működött nálad, mert rosszul írtam. Nem a 6-os, hanem az 5-ös lábon van a PWM jel, azt kell a kódban engedélyezni. Bocs. A hozzászólás módosítva: Aug 31, 2019
Kapkodás van, mert ezt a kódot is elsiettem, a 9-es és a 10-es lábat kell kimenetként engedélyezni. Helyesen a kód:
A frekvencia állítgatásánál még van lehetőséged a timer órajel osztóját is állítgatni, illetve ha az egyéb számítási műveletek elvégzése sokadrangú, akkor állítgathatod az órajel előosztót is.
Sziasztok!
char[] tömb elemeit szeretném float-ra változtatni. A függvényt kiszervezem meg is hívódik, de a sscanf() nem működik. Másik függvényben a sscani() tökéletesen megy. Az atoi és aotf működik, de annak meg kevesebb a hiba jelzése. Azokat nem szeretném használni. float r; char be[] //Ezt a függvény megkapja, csak a példáért írom sscanf(be,"%f",*r); Seriel.println(r,7) return r; Ehhez hasonló amit írtam, de vagy ovf-hibával száll el, vagy 0.00 a végeredmény. (fejből írtam) Kipróbálnátok a saját Arduinoval ezt? Mintha egyszer kaptam volna helyes eredményt akkor, mikor a char-tömb 5. elemét '\n'-re cseréltem. Utána elírtam valamit, azóta semmi. Annyit tudni kell, hogy a be[] tömb mielőtt feltöltődne a soros monitorról 0-val van feltöltve. Nem karakterrel, hanem számmal. Olvastam olyasmit, hogy az Arduino IDE-ben mintha hibás lenne, de ellent mondtak annak aki ezt írta. Hajlok rá, hogy igaza van, de remélem tévedek! Próbáljátok ki légyszi és a kódot mellékeljétek, ha megy!
Nem írod, hogy milyen mikrokontrollert használsz. Gondolom, ATMega328-at. A hardver limitációi miatt érdermes lenne kerülni a lebegőpontos számok használatát. A CPU nem támogatja, a fordító pedig alapesetben nem is fordítja bele a szoftveres támogatást (printf, scanf), mert túl nagy helyet foglal. Külön be kell kapcsolnod, ha mégis ragaszkodsz hozzá.
Bővebben: AVR Libc vfscanf()
Ez nem jó hír.
Utána nézek, hogy a serial-miket tud. Már ott elvégzem a kapott adatok kinyerését.
Szia!
Küzdök még elég erősen. Nem is annyira egyszerű. Kigondoltam, hogy egy függvény switch cas-el kiválogatja, hogy melyik szám van megadva numerikus karakterként. Visszatér az adott karakternek megfelelő számmal. Ez sem ment könnyen, bármilyen meglepő. A jelenlegi gondom az, hogy ha i egy ciklusváltozó akkor a függvényben a pow()-sem megy.... Atof-el kellene esetleg átalakítanom a ciklusváltozót. Épp azt szeretném elkerülni. int valami(char be[]) { int i; int egesz; for (i=0; i<= be hossza-1; i++) { char temp=be[i]; volatile int er1= CharDigitToNum(temp); //ez megy: egesz+=er1; Ilyenkor szépen összeadja... //Ez már nem megy: egesz+=pow(10,i) } } int CharDigitToNum(char be)//Saját függvény { …. } Megoldottam pointerekkel is sok problémát de végül nem kellett, csak a volatile-t felejtettem le.. Nem biztos, hogy ez a kód jó, csak példaként írtam.
Idézet: Hát pedig az ördög a részletekben szokott lakozni. „Nem biztos, hogy ez a kód jó, csak példaként írtam.”
Beteszem amit összeraktam, de már az is szanaszét van. A lényeg, hogy a pow() nem működik, ha a kitevő a ciklusváltozó és az egesz rész egy másik függvény visszatérési értéke.
Ha gépközelben leszek bemásolom.
sziasztok!
Van arra lehetőség hogy 8db nyomógombot (csengő nyomo gomb) és 16relé modult csatlakoztassak 1db arduinohoz(UNO, MEGA)? A működés úgy nézne ki hogy minden nyomógombhoz 2db relé lenne hozzárendelve. ami úgy működne hogy minden egyes gombnál : az első gombnyomásra meghúz az első relé a másodikra elenged a harmadikra meghúz a második relé a negyedikre meg elenged. állapottól függetlenül 90mp után visszaállna alapállapotba (az első gombnyomást várni) Ha ez megvalósítható akkor melyiket válasszam az UNO-t vagy a MEGA-t és hogyan tudom egymáshoz illeszteni a nyomógombokat illetve a relé modult?
Ha kevés a lábad, akkor megtoldhatod egy-két shiftregiszterrel, vagy i2c extenderrel...
Szia!
Van. A 4x4 keypad is 8 lábat használ. Ha megérted annak a bekötését, akkor a nyomógombokkal is mennie kell. Azok is azok!!!
Shift regisztert neki, kimenet/bemenet annyi lesz, amennyit akarsz, és elhasznál kb. 3-4 lábat, tehát Mega sem kell.
Erre gondoltál?
Az is megoldás lehet, hogy a nyomógombokat ellenállásosztón keresztül valamelyik analóg bemenetre kötöd. Így csak egy kivezetést használsz a gomboknak. Az osztó méretezésétől függően akár 20-30 nyomógomb is kezelhető így. Gugliban sok magyarázatot találhatsz ha rákeresel az "analóg keyboard"-ra.
Az autóiparban is használják ezt a megoldást.
Ha minden igaz igen. Erre gondolok. A kód nem is bonyolult hozzá.
morgo: Király ötlet!
Sziasztok, ujdoncként küzdök az Arduino program nyelvével és egy olyan feladat van, ahol két port konfigurácioját egy harmadiktol kell függöve tenni.
Itt van néhány programmrészlet. A void setupban definiálom többek között ezt: Int Dir=A0; Int wsense=P9; Int esense=P8; Majd ezt PinMode(Dir,Input) Itt már nem tudom definiálni a P8 meg a P9-t mert azok állapota az A0-n levö jeltöl függ. Ha a Dir<500 Akkor a PinMode(wsense,OUTPUT) PinMode(esense,INPUT) És forditva Ha a Dir>500 akkor PinMode(wsense,INPUT) PinMode(esense,OUTPUT) Ez a definicio 6 különbözö egyébb feladat része a loopban, azaz menet közben kell a portokat átdefiniálni) és igy beolvasni illetve kiirni egy-egy állapotot a p8/p9-re. Hogyan kell ezt megoldani? Kösz! A hozzászólás módosítva: Szept 16, 2019
Ha az A0-ás lábad, azaz a "Dir" analóg bemenet (ADC), akkor azt nem kell INPUT-ként definiálnod, mert akkor digitális bemenetként használható. Ne csináljál vele semmit, akkor az ADC bemenet lesz.
Illetve feltétel vizsgálat előtt egy AnalogRead(Dir) paranccsal mérjed meg a bemenetén lévő jelet, mert nem fog tudni mihez hasonlítani.
Kösz a DIR már megy csak itt irtam el
![]() Ilyet még nem találtam a minták között azért rágodok hogyan tovább. A hozzászólás módosítva: Szept 16, 2019
A ki-bemeneteket program közben úgy definiálod, ahogyan akarod. Annyiszor és ahogyan szeretnéd. De olyan apróságokra figyeljél, hogy ha kimenetként van definiálva és ilyenkor kiadsz egy DigitalWrite(HIGH) parancsot, akkor a belső felhúzó ellenállás aktív lesz, amitől a bemenet, ha nagy impedancián is, de magas szintű lesz, ami zavart okozhat adott esetben.
Akármikor változtathatod, hogy egy láb bemenet vagy kimenet legyen, nem okoz gondot. De ezzel a P8 P9-cel még nem találkoztam, nem csak simán 8 és 9?
Kösz
Bocs, a fejem még az ASM-ben jár itt csak a 8as meg a9-s portokrol van szo. Ha loopba beirom hogy: Int valA0=analogRead (DIR); Int valA2=analogRead (Occup); Majd itt dönteni kell, hogy most mekkora a ValA0<500 Akkor printMode(esense,INPUT) PrintMode(wsense,OUTPUT) Majd be kellene olvasnom az esense értéket, és kiküldeni a wsense egyet a valA2 függvényében. Majd forditva, ha a valA0>500 Itt bonyolodtqm a dologba. |
Bejelentkezés
Hirdetés |