Fórum témák
» Több friss téma |
WinAVR / GCC alapszabályok: 1. Ha ISR-ben használsz globális változót, az legyen "volatile" 2. Soha ne érjen véget a main() függvény 3. UART/USART hibák 99,9% a rossz órajel miatt van 4. Kerüld el a -O0 optimalizációs beállítást minden áron 5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás 6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et Bővebben: AVR-libc FAQ
Persze!
Az ADMUX regisztert bitenként éseli a 11110000 bitsorral. Ha az ADMUX tartalma pl 10010111 volt, akkor az eredmény 10010000 lesz.
Az alsó 4 bitet nullára írja (törli), a felső 4 bitet változatlanul hagyja.
Sziasztok!
Van egy nagy problémám. GSM modult illesztenék egy Atmega16-hoz, egyelőre próbapanelen. A képen látható értékeket mérem, és így nem merem összekapcsolni a kontrollert a GSM modullal, mert annak a bemenő feszültsége max 2.8+03V lehet. Jól van ez így? Mi lehet a hiba? Azt a 4.4V-ot sokallom és miatta nem merem. A másik feszültség rendben is lenne. Köszönöm előre is a segítséget!
Elfelejtettem mondani, hogy a modul felől az RX és TX lábak szabadon vannak,. ha ez jelent valamit.
Sziasztok!
A bekeretezett OR és NM feliratok (nanofarad?, mikrohenry?, vagy micsoda egyáltalán?) jelentését szeretném megtudni. Tudna valaki segíteni? Köszönöm előre is!
Igy az semmi - valoszinüleg a szövegben találsz erre utalást.
Nem hinnem, kulonben lenne elotte ertek is, de en csak L201 es L202 stb jeloleseket latok ott.
Az pedig 200 és 2000 mikroHenry? Vagy milliHenry? Ezt honnan lehet megtudni? Katalógusból?
Nem, az L201 az egy jeloles en szerintem, ami az alkatreszt azonositja be a kapcsolasi es a beultetesi rajzon. Az 'L' a tekercsek jelolesere hasznalatos, a 'C' a kondenzatorokera, 'D' dioda stb.
Hogy mekkora az erteke ugy velem nincs feltuntetve, lehet a szovegben targyalja, lehet csak iranymutatokat ad es neked kell kiszamolnod magadnak az igenyeidnek megfeleloen -- nem tudom mi az a PDF ugyhogy fogalmam sincs, csak a kep alapjan amit mellekeltel ezt gondolom.
Csak abból gondoltam, hogy bizonyos SMD ellenállásoknál is hasonló a jelölés. 202 az 2000, 103 meg 10000. Az utolsó szám értéke mutatja meg, hogy hány nullát kell még hozzátenni. Az L,C és D jelentéseit ismerem, és ez egy Quectel M10-es adatlapja lenne.
De lesznek még itt egyéb gondok is.
Jobban megnézve az adatlapot neked van igazad. (Mint mindig. )A beültetéshez szükséges jelölések lesznek. Marad az eredeti probléma: mi a fene lehet az OR és az NM?
Sziasztok
Most ismerkedem az AVRSTUDIO programmal és érdeklődnék hogy már egy meglévő hex állományt hogyan tudok mountolni, és utána a cél AVR-be programozni?
Sziasztok
Lenne egy kérdésem, de egy kicsit bonyolult. Egy akksitöltőt építettem, és szerettem volna kiíratni hozzá 7 szegmensű kijelzőkkel az aktuális volt és amper értéket. Az áramerősséget egy 0,1R 5W-os ellenállással oldottam meg, amelyet egy műveleti erősítővel kötöttem az AVR-re, a feszültséget pedig egy fesz.osztóval. A referencia feszültség 5V. Ennek megfelelően állítottam be mind a kettőt. Viszont a programmal gondban vagyok, mert a kijelző mindhárom értéke 9-et mutat. Float típusú változót nem tudok beleírni, mert nem fér rá az AVR-re (Attiny 24 2k Flash). Tudnátok segíteni a programban? Üdv, yoman
Az az OR az nullaR, vagyis nulla Ohm. Az NM meg a kondenzátor fajtája lehet, bár nem biztos.
Az biztosan nem mert itt müterhelésröl ill antennacsatolásrol van szó.
Az sem biztos (ilyen frekvencián nem szokásos), hogy azok diszkrét alkatrészek, hanem a NYÁK megfelelö kialakitása adja a csatolást ugy induktiv mint kapacitiv szempontból.
Szükségünk lenne kapcsolási rajzra, illetve forráskódra, különben nem tudunk semmi konkrétat mondani, maximum nagy szólamokat, hogy állíts be mindent helyesen és írj jó kódot, amit persze feltételezünk, hogy igyekeztél, csak valami nem sikerült.
Egy kis pontosítást viszont hadd kérjek külön: A 7 szegmenses kijelzőre ki tudod íratni a számokat ? Tehát egy ilyen egyszerű ellépteti a számokat 0-tól 9ig az működik? Amennyiben ez megy, akkor persze marad a kérdés, hogy az ADC helyesen működik e? Ha erre is igen a válasz, akkor valszeg valami típuskonverzió hiba lesz, amit a forráskódodból tudhatunk csak meg. (Ha nagyon hosszú a kódod, akkor illeszd be csatolt fileként, de lehetőleg mindent amiben lehet fontos dolog a számunkra)
Köszi
Ezt el is felejtettem megnézni!
Szia
Igen a 7 szegmensű kijelzővel foglalkoztam már, építettem már motorba üzemóra mérőt, és kifogástalanul működik. Persze attól még lehet, hogy itt nem működik. Beírom a forráskódot, szerintem elfér, és magyarázgatok hozzá.
A portB 4 kimenete egy 74LS47-es 7 szegmens meghajtóra megy rá. A referencia feszültség 5V, és úgy állítottam be, hogy az Aref lábra kötöttem az AVR tápfeszültségét ( tudom hogy máshogy is meg lehet oldani), és ennek megfelelően próbáltam konfigurálni. A feszültségosztón max feszültségnél 4,9V megy az AVR 4-es csatornájába (PA4). Remélem érthetően írtam le Üdv, yoman
Szia!
A kódhoz nem tudok hozzászólni, mert assembly-ben programozok. Ha 5V-ot használsz referenciának, akkor elég, ha kiválasztod referenciának az AVCC-t, és akkor nem szükséges az AREF lábat bekötni. Persze ettől még működnie kell. Továbbá az AREF lábon legyen kondi a test felé. Szia! Akkor nem csak én vagyok ilyen elvetemült, hogy assemblyben nyomom ? Kezdek megnyugodni. Grafikus felületet LCD-re írtál már? (vonal húzás, kör rajzolása?) Üdv Kiborg
Szia !
Én több problémát is felfedezni vélek. Az "erositesvolt" változó 1 bájtos egész, emiatt a (2400/(6800+2400)) értéke 0 lesz. De, ha ez rendben lenne akkor az U1-gyel lenne baj, mivel az U1 változó is ugyanilyen típusú, ez is csak egész értéket vehetne fel. Tegyük fel, hogy a Beolvas10BitADC(4) függvény visszatérési értéke pl. 100 (ezzel a függvénnyel is baj van ezt majd mindjárt), amit öttel szorozva kapsz 500-at, majd elosztod 1024-gyel és az U1 értéke máris 0. Visszatérve a Beolvas10BitADC(4) függvényre, mely egy előjel nélküli 1 bájtos adatot adna vissza, bár a return argumentumában 2 bájt szerepel. Célszerű lenne ha a fv. visszatérési típusa unsigned int lenne, ekkor már 0..1024 közötti értéket kapnál vissza. Gondold végig nem lenne-e célszerű mV-ban számolni Volt helyett ? Üdv Istvanpisti
Jutyub videóim között vannak grafikus kijelzős cuccok, de ezek egyikében sincsenek ilyen rajzolós dolgok. Kissé bajban vagyok a vektorokkal és szögfüggvényekkel.
Szia!
Néztem youtub-os videóidat, nem semmik.(számomra legalábbis) Másik része a dolognak, hogy ott is vannak egyenesek, lekerekítések, azok fixen letárolt helyen vannak, vagy hogyan oldottad meg a rajzolását? Nekem az lenne a célom, hogy ASM-ben írjak egy olyan rutint, aminek megadom a kezdő és cél koordinátát és ő meg megrajzolja a vonalat, körnél meg a középpont és sugár kellene. Szép feladat lesz ahogy egy-két alkalommal hozzáfogtam... Én a matekos résszel vagyok meglőve, hogy egy gyökvonást hogy tudok elvégezni egy ilyen Mega16-al, ha tudnák gyököt vonni, már nem lenne semmi problémám, és szögfüggvény se kellene hozzá. Üdv Kiborg
Szia
Alapvetően a programot float tipusu változókba tömörítettem, hogy törtekben is tudjon számolni, és számítottam rá, hogy ezzel a megoldással már az első osztásnál az eredmény 0. Igazából az a bajom, hogy a float nem fér rá, mert a hex fájl egyből 10K-s lesz. AVRStudioval programozok. De elméletben ezzel a módszerrel is ki kéne írnia hogy 0, nem? Üdv, yoman
Szia !
Szerintem nem kellene kiírnia a nullát, mert nullával nem szorzol, hanem osztasz, ez pedig nem értelmezett művelet a matematikában. Nem tudom az AVR mit csinál nullával való osztásra. Próbáld meg a Beolvas10BitADC(4) függvény visszatérési értékét unsigned int-re módosítani, majd először hagyd a feszültségosztót csak lépésről lépésre haladj. Az U1 is legyen unsigned int és tedd ebbe e változóba a Beolvas10BitADC(4) függvény értékét és ezután nézd meg mit ír ki. Ekkor az ADC 0..1023 közötti értékét kellene ábrázolnia. Multiméteterrel meg tudod mérni a feszültségosztó alsó tagján mekkora a jel és milyen viszonyban van ez az ADC által mért értékkel.Ha ez már jó, akkor kellene azzal foglalkozni, hogyan kezeld a feszültségosztó hatását. Ha nem lesz jó, akkor az ADC-nél kell tovább keresni a hibát. Üdv: Istvanpisti
Most csak gyorsan atfutottam a kodod, de nekem ugy tunik hogy az ADC-t beallito ADInit() fuggvenyt sehol sem hivod meg a foprogramban. Addig az ADC sem fog mukodni...
Sziasztok!
Van egy ilyen szervóm. És ez a program fut egy ATtiny2313-on, ami szoftveres PWM-et állít elő. Ha a szervót ezzel a jellel szeretném működtetni, akkor miután beáll a kívánt pozícióba, "remeg". Eddig egy helyet találtam(az egyik végállás közelében), ahol normálisan megáll. Az ilyen szervók viszont normálisan mennek vele. A szervó elvileg jó, mert ha AVR-rel hardveresen előállított PWM-ről megy(8 bitessel próbáltam), akkor nincs ilyen gond. Vajon mi lehet a hiba oka?
Nekem a következő gondom van, ami nem lett említve:
Rögtön az elején ez áll:
Miközben az ADMUX-ban nincsen ADLAR érték. Erre gondtoltál vajon?
A kérdéses tört műveleteknél, amik nem működnek, ha jól értem a következő a helyzet: Van neked egy feszültségosztód, ami 6.8k és 2.4k ból áll. Ez ad neked egy ~0,26 értékű korrekciós tényezőt. Tehát, ha mondjuk 15V -ot olvasol be, akkor abból ~3,91V lesz. Ezt a feszültséget beolvasod az ADC modullal, 5V-os referencia fesszel ez ~801 érték lesz. Nos ebből kellene fabrikálni a 15V-ot. Hát lássuk:
Nagyon erősen javaslom, hogy ha fura dolgok történnek, akkor futtasd le azokat "demo" körülmények között az AVR szimulátorban. Jelen esetben pl ha lefuttattad volna, akkor kiderül, hogy a erositesvolt értéked kapásból 0 lesz, tehát rögtön hiba van, amit javítani kell. Az én kódomon, ha beteszed szimulátorba, akkor látni lehet, hogy milyen manuálisan beállított ADC eredményre milyen értékek alakulnak ki. Ha ezek jók, akkor lehetsz biztos abban, hogy a függvények helyesek, és élesben már csak azzal kell törődni, hogy az ADC koverzió jó legyen, illetve a kijelzés is. Amúgy a megoldásom kb annyi, hogy "meghekkeljük" kicsit a rendszert. A matematikai könyvtár sok helyet foglal, ha használod, arról nem is beszélve, hogy a float változók aztán végképp... Tehát megkerüljük a dolgot. Egész számokat használunk és kitoljuk cselesen a tört értékeket, miszerint felszorozzuk az egészet 100-zal. Ha pl ezt a műveletet kellene csinálnod, hogy 4/8, akkor az 0 eredményt adna 0,5 helyett. De ha kitoljuk elösszőr 10-zel, tehát 4 -> 40 lesz és azt osztjuk el 8-cal, akkor 5-öt kapunk. Mivel mi tudjuk, hogy az egyes helyiérték helyén a tizedes van, ezért szépen kitesszük ezt a tizedesek kijelzőjére.
Elnézést, már nem sikerült módosítanom a hozzászólásom.
A TCNT0 = 100 sor csak azért van ott, mert oda raktam a breakpointot. Mert amikor üres a while loop, akkor egy kicsit megőrül a szimulátor, hogyha az utolsó while loop előtti művelet utánra szeretnék lépni. |
Bejelentkezés
Hirdetés |