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
Bocs, hogyha kissé hülyén fogalmaztam, a lényeg:
Azt szeretném elérni, h legyen bármi, amivel a C-kódból .hex fájlt tudnék csinálni (mert azt már bele tudnám írni az IC-be és kész. Köszi! Barbát
Nem egy nagy ördöngösség.
AVR Studio4 -> Project ->New Projekt -nél már egyböl feladja a telepített compilereket. Itt ha kiválasztod az AVR GCC -t akkor máris létrehoztál egy projektet ami C compilert fog használni. Ha kész az új projekt akkor teljesen üres. De simán hozzá adhatod a már meglévő C fájlodat. Ha hozzáadtad a C fájlt (fájlokat) akkor egy RebuildAll parancsal máris lefordult a projekt és ha nincs benne hiba, akkor létrehozza a compiler a hex -fájlt is. Amit egyből égethetsz is be.
Most úgy csináltam ahogy írtad, már csak 1 kérdésem lenne:
Ha mindent jólcsináltam akkor elvileg hova tette a hex fájlt? Barbár
Mikor létrehoztad a projektet akkor megkérdezte az elérési utat. Ha mindent alapon hagytál akkor létrehozott egy könyvtárat a projekt nevével. Ebben a könyvtárban van egy default nevü alkönyvtár és ebben lesz benne a hex fájl
Igen, én is ott kerestem, de a projekt könyvtárában a következők vannak csak:
- default\dep\projekt_5.o d - default\Makefile - default\projekt_5.o - projekt_5.aps - projekt_5.c Hol ronthattam el?
Nem fordult le valamiért a projekt. Nézd meg mit ír ki az AVR studio 4 az alsó információs ablakban, mikor Rebuild All-t nyomsz neki.
Újrapróbáltam egy új projektet csinálni, és siker
Köszi a segítséget... Mostmár csak vmi órajel problémája van a hexfájl IC-be programozásánál, de ezt már 1x sikerült megoldanom a leírtak alapján. (remélem még1x sikerül ) Köszi még1x! Üdv! Barbár
Hali!
Még1x köszönöm a helpet, mostmár megyeget minden, csak még 1 kérés: Attiny45 -öt próbálok porgramozni és a kimenetek kezelésével egész szépen haladgatok, viszont az eddig látot példaprogramok alapján még nem jöttem rá, h hogyan tudnám az AVR valamelyik lábát (vagy ha lehet valamelyik 2 lábát) "digit" bemenetként kezelni? Szóval pl egy vagy ha lehet két kapcsolót szeretnék rátenni, és utána a programból figyelni, h be van (vannak)-e kapcsolva a kapcsolók és ennek függvényében csinálni vmit a programban. Előre is köszi a segítséget! Üdv! Barbár
Hali
Mondjuk a "d" porttal: DDRD=255; // ekkor a d port minden pinje bemenet vagy így is lehet: DDRD=0xff; értelemszerűen lehet kevesebb pint is megadni... uint8_t a; // int tipusú 1 byte nagyságú változó a = PIND; //beteszti a D portról kiolvasott értéket a változóba. vagy csak egy pin (nullás számú) kiolvasása: a = (PIND >> 0) & 1); 73
Hali
Bocs elírtam DDRD=0; // ekkor a d port minden pinje bemenet vagy így is lehet: DDRD=0x00; értelemszerűen lehet kevesebb pint is megadni... Bocs... 73
Köszi a segítséget!
Nagyjából kezdem érteni, de azért ha nem baj a kokrét problémát leírnám, hátha vmit mégis rosszul értettem... És ha pl egy 8 lábú AVR-t használok (aTtiny45) Aminek a következő lábai használhatóak (ha jóltudom): PB0 PB1 PB2 PB3 PB4 PB5 Ekkor hogyan tudnám megcsinálni h 2 bemenete legyen (amiből pl az emltett módon ki lehet majd olvasni, h éppen van-e rajta 5V vagy nincs) + 2 kimenet amiket szintén igen-nem kimentnek használnék. Köszi a segítséget! Barbár
PB5 a reset láb is egyben, az pedig kell a programozáshoz, így nem tudod használni.
(Persze bizonyos programozókkal lehet használni.) mintaprogram:
Köszi szépen!
Így már sztem mennifog (remélem) Külön respect , h komplett forráskódot tettél be és nem csak "...ezt állítsd át, meg azt nézd meg az adatlapban..." Tudomén, h abból lehet a legtöbbet tanulni, de most nemsok időm van erre sajnos, viszont szeretnék vmi látványosat csinálni. Köszi mégegyszer! Üdv! Barbár
Sziasztok!
Adott két bemenet, mindekettő kap egy jelet, de egymás után. Hogyan oldanátok meg legjobban két jel érzékelése között eltelt idő mérését? Gondoltam elindítok valami számlálót az első jelre, a második jelnél pedig megállítom. De még nem nagyon ismerem az AVR hardvereit. Bármilyen ötletet szívesen fogadok. ui.: konkrétan ATmega8 Zoli
Ilyen célra valók az AVR megszakítás bemenet lábai. Én biztos így csinálnám meg. Az egyik megszakítás bemenetre megy az első jel, a másik megszakítás bemenetre a második jel. Az első megszakítás rutint úgy kell megírni, hogy elindítja valamelyik szabad Timer-t. A második megszakítás kezelőt pedig úgy készítsd el, hogy HA fut a Timer akkro állítsa le és vizsgálja meg hogy nem csordult-e túl. Amenyiben nem, akkor a timer értékéből kiszámítható a 2 jeled között eltet idő. Ha túl csordult a timer, akkor baj van, mert nem tudod pontosan hányszor fordult át a számláló, így ha olyan jeleket akarsz mérni ahol a 2 jel között mondjuk több perc(vagy akár óra) is eltelik oda más megoldás kell.
(Az airsoft sebességmérőhöz)
Kvarc 10Mhz, a könnyebb számolgatás végett. Timer1 -et capture módba állítod, prescale 1, fel vagy lefutó, ezt az áramköröd határozza meg. Mega8 PORTB.0(ICP1) lábon figyeled a két érzékelődet. 1. megszakítás (1. kapu) - Timer1 törlése - beállítasz egy flag-et, hogy megtörtént az első megszakítás 2. megszakítás (2. kapu) - Timer1 értékét x változóba másolod (ha akarod) - flag töröl - Timer1 disable - stb Matek: Ertek = 1000000 '10cm -re vannak a kapuk, 1m/10 Mps = Ertek / Timer1 'méter/sec számítása Röviden ennyi lenne.
Köszönöm a válaszokat
A két megszakítás között kb 1ms van. Megszakításnak PCINT vagy INT0, INT1-et használjam? PCINT-nél előny hogy, bármelyik lábra köthetem. Hátrány, hogy szoftveresen le kell kezelnem a lefutó és felfutó éleket. INT0, INT1-nél előny, hogy hardveresen tudom szűrni a lefutó, felfutó impulzust. Hátrány, hogy a D porton van, és ez az egyetlen 8 bites port amivel kényelmesen használható a 7 szegmenses kijelző meghajtás. (Remélem jól tudom ezeket)
Na most ezek után nem is értem miért próbálok segíteni...
Ha nem akarod használni a D portot ahol a megszkítás bemenetek vannak, akkor időmérésre felhasználható a Timer1 Input Capture funkciója. Az ezt a funkciót használó láb ICP1 névre halgat és a PORT B 0-ás PIN-jén van. Mivel ez csak 1 db bemenet, így 2db jel közötti idő eltérést csak trükkösen lehet mérni, de megoldható. Gyakorlatilag azt kell megvalósítani, hogy mind a 2 jel erre a lábra kerüljön és kell írni egy megszakítás kezelőt az Input Capture megszakításhoz. Ebben a megszakítás kezelőben el kell menteni az ICR1 regiszter értéket. Majd a következő megszakításnál (mikor a másik jel miatt hívódik meg) össze kell hasonlítani az elmentett ICR1 értékét a pillanatnyi ICR1 értékével. A kettő különbsége az eltelt időt adja.
Köszönöm
Már átnéztem ezt a részt, de lehet maradok a két lábas megoldásnál. Eygenlőre fordítok egy kis adatlapot, aztán jelentkezem.
Hali !
Programoztam már AVR-t jó sokszor jtagicemkII-vel, szóval nagyjából értem mi a dörgés. DE! Otthonra össze aggattam egy soros portra valo programozót: Bővebben: Link Ponyprog2000 -rel próbáltam programozni 1 ATmega8-at, de nem igazán veszi észre a procit, -24es hibát dob. Annyi a lényeg, hogy a procira csak az ISP lábak vannak bekötve, meg egy ellenállással egy LED. Gyakorlatilag csak egy villogós tesztprogit akarok égeni h lássam megy-e a cucc. De nem. Úgy tudom, és ebben lehet tévedek hogy a procik alapesetben a belső rc oszcira vannak állitva, 1MHz-re. Miután szenvedtem 1 darabig, bemérgeltem magam és összedobtam az LPT-s 4 ellenállásos "programozót" is. Azzal is ugyanez a helyzet.. nincs ötletem.. valaki ? (Asszem ma első körben ráaggatok quartzot két db 22pF-el, és kipróbálom hátha..) Edga'r
Ez a programozó ugyanaz, mint a ponyprog oldalán található SI-PROG programozó (ami nálam kiválóan működik m8-al) azzal az eltéréssel, hogy a tápfeszültséget nem a soros portról veszi, hanem külsőleg kell ráakasztani.
Ez megtörtént?
Sziasztok !
Probaltam levedeni olvasas ellen a lock bitekkel az AVRt, de nem tudom beirni:
Error:
Mi lehet?
Idézet: „Mega8 PORTB.0(ICP1) lábon figyeled a két érzékelődet.” Valamit nem ertek. Kettő bemenő jel van, hogyan kösse egy port lábra?
Például egy VAGY kapuval, esetleg RS tárolóval, stb.
Peldaul... Például ebben a számítógépben van pár vagy kapu, Nem is ezért kérdeztem, mert nem tudok két jelet eggyé varázsolni..
Az eredeti kérdés (amit te tettél fel) úgy szolt, hogy van két jel... Azért szóltam bele, mert ennyi adat birtokában Hooligan01 megoldása nem megalapozott, viszont ATtyni-é az volt. Ezek után Hooligan01 szóvá teszt (esetleg megsértődik), hogy ő minek is segít. Erre próbáltam reagálni, csak felesleges volt, meg OFF és tulajdonképpen moderátor sem vagyok. De pusztán szakmailag nézve, ami a megoldásával a bajom: ha például mindkét jelen a felfuto él hordozza az információt, vagy egyszerüen az első jelen hosszabb az impulzus, mint a két felfutó él közötti idő, vagy mondjuk prellezik valamelyik jel, akkor a VAGY kapuval nem sokra mész. De még ha rövidebbek is az impulzusok, és nem prellezik a jel, ha csak egyszer is valamelyik vezeteken van egy impulzus úgy, hogy nincs párja a másik vezetéken, akkor meg is állt az egész.
Szia
Ne haragudj, azt feltételeztem ismered a projektet, ezáltal gyakorlatinak tűnt a kérdésed. Az eredeti kérdés ez lenne: Bővebben: Link Itt már megfogalmaztam az elvi működést (mind hardver, mind szoftver) amit meg fogok csinálni. Igazából csak kíváncsi voltam más megoldásokra is, vagy hogy egyáltalán működik-e az én elképzelésem. Hooligan megoldása tetszett, de nem kívántam lereagálni azt a hozzászólását, hogy nem az ő megoldását választottam. Most fordítom az adatlap timer1 részét, de lassan haladok Esetleg valaki leellenőrizné, vagy segítene 1-2 mondatba(oldalanként)? Idézet: „Ne haragudj, azt feltételeztem ismered a projektet, ezáltal gyakorlatinak tűnt a kérdésed.” Nem ismertem, hiszen a #377136 HSZ-ed nem hivatkozott semmire, így ez a szál (számomra) onnan indult. Regebbi HSZ-eket nem olvastam el, ez igaz. Mit kellene leforditani?
Egyenlőre leálltam a fordítással (sokra nem is jutottam).
Inkább átálltam kisérletezésre, megnéztem pár példát, adatlapon megnéztem mi micsoda... Aztán kb kész is vagyok, a mérés lezajlik, kijelzés megy. Már csak képletet kell beraknom, hogy számomra információt jelezzen, ne csak adatot (azaz m/s jelenjen meg, ne pedig a timer értéke). |
Bejelentkezés
Hirdetés |