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
Órajel forrása, órajel előosztása, fordíto optimizálása megfelelően be van állítva? Ami még esetleg lehet programozáskor nem megfelelő proceszortipus van beállítva.
Az az igazság hogy nem rég kezdtem még csak elkezdeni programozni, és nem igazán tudom mit hogy kell beállítani. a régebbi avr studió-ba könnyebbnek találtam.
Proceszortipustól függöen vélaszthatsz különböző belső órajelek közül. Egyes procikba vagy egy olyan biztosítékbit hogy divide clock by 8. Ezzel nyolcadára esik az órajeled.
Ha a programodba használsz delay-eket és az optimizálások ki vannak kapcsolva akkor a fordító csinálhat nagy ökörségeket. Nemtudom mással megtörtént e de helytelen optimizálás miatt egy megszakításban változtattam egy globális változó értékét a megszakításba meg is változott de a főprogramba nem adódott át.
Akkor nagy valoszinuseggel nem csinaltad vegig ezeket a beallitasokat:
video
Normalis forditonal ez a "valtozo.4" nem mukodik, de deklaralhatsz bitfieldeket - nezz utana a neten mi az...
Amugy meg bitmanipulacios operatorokkal tudsz dolgozni. Pl.: PORTC |= 1<<4; // 4. bit magasba allitasa PORTC &= ~1<<4; // 4. bit alacsonyba allitasa PORTC = (PORTC & ~1<<4) | (PINB & 1<<4); Na kb ez az amit legeloszor kezeltel - bonyas leirni, de a rohej, hogy az avr-gcc ebbol eleg ertelmes kodot general. Pl probalkoztam bitfieldes portokat definialni ami sikerult is, de a fordito borzalmas kodot allitott elo belole...>>>>>>>>
Szia! Köszi utána néztem már és egy részletes leírást vagy példát sem találtam A bitmanipulációval semmi gondom nincs csak épp a hivatkozásokkal, hogy az egyik változónak az x-edik bitje hivatkozzon egy másik változó x-edik bitjére.
Idézet: „PORTC = (PORTC & ~1<<4) | (PINB & 1<<4);” Ezt még nem ismerem de nemsokára kiderül mit takar
Ez a
Idézet: annyit takarm én szerintem, hogy:„PORTC = (PORTC & ~1<<4) | (PINB & 1<<4);” Ha PIN_B4 (PORTB 4. bitje) magas szinten van, VAGY a PORTC 4. bitjébe már magasat írtak (a kimeneti regiszterbe), akkor a PORTC bitje a 0 értéket vesznek fel a 4 bit kivételéve, ami 1 értéket vesz fel ha PIN_B4 1, vagy ha PORTC_4 0!. Szerintem nyugodtan lehet több sorba írni, mert így tényleg nem látható át elsőre, és a hibakeresés is nehézkes.
tenyleg igy nehez atlatni, lehet egyszerubb lenne makrokat radobni (nem tudom leteznek-e ilyenek mar eleve, most nem tudok utana nezni)
Ilyesmire gondoltam:
...esatobbi esatobbi... Meg mielott valaki megkergetne, ezeket NEM teszteltem le, sot meg sem probaltam leforditani, szoval mielott felhasznalnad teszteld le! Na, es ezekutan, ha a makrok mukodnek akkor:
PORTC,3 bitet atmasolja PORTB,1-be... Sok sikert!
Előreis köszi! Holnap meglássuk mi sül ki belőle, de most szundi van mert nem látok ki a fejemből :idiota:
Udv mindenkinek. Nem akartam uj temat nyitni,mert itt mindenki Atmellel foglalkozik, ugyhogy segitseget szeretnek kertni.
Van egy AT89c51-esem (tudom hogy nem mai cucc), es fel szeretnem programozni, csak az a problema, hogy nem tudok hozza egetot kesziteni (minnel egyszerubb annal jobb). Rengeteg kapcsolas kering a neten, nem tudom mit lehetne ebbol hasznalni, ami biztosan mukodik. ezt megepitettem, de nem akar mukodni. (stk 200-al menne? es ha igen, akkor milyen lableosztasba, mert az adatlapjaban nincs benne hogy kompatibilis vele)
Nem fog menni, mert a C51 nem tud még ISP-s programozási módot. Mindenképpen párhuzamos programozó kell hozzá (én egyszer építettem ilyet, 2db 89S51 dolgozott benne, hogy legyen elég portláb a programozandó IC párhuzamos eléréséhez).
Ha esetleg megoldható, talán érdemesebb lenne egy 89S51-est venni, amit már lehet ISP-n keresztül is programozni, és ha jól emlékszem, egyébként minden más tekintetben betehető a 89C51 helyére. Idézet: „Nemtudom mással megtörtént e de helytelen optimizálás miatt egy megszakításban változtattam egy globális változó értékét a megszakításba meg is változott de a főprogramba nem adódott át.”
Sziasztok!
AVR-re szeretnék JTAG-en programot letölteni, de sehogy sem sikerül. Minduntalan a mellékelt képen látható hibaüzenetet dobja, majd lefagy és bezáródik az avrstudio. Ebben valaki légyszi segítsen, mert semmi ötletem sincs. A beállítások jók, a fejlesztőkörnyezetet is újrainstalláltam már. Egy egyszerű led kigyújtó programnál is ez a hiba... Előre is köszi! Üdv, dino
Sziasztok! Én egy grafikus lcd háttérvilágítását szeretném vezérelni a szoba fényerejének megfelelően. Konkrétabban kifejtve minél sötétebb egy szoba annál kisebb intenzitása lenne a kijelző háttérfényének. Jelenleg a birtokomban van egy LSL100 LIGHT SENSOR , egy NORPS12 fotoellenállás, és egy BPW21 fotodióda. Ezekkel próbálkoztam megvalósítani a tervemet de sajnos nem nagy sikerrel A megoldáshoz legközelebb a fotoellenállással jutottam, de számomra zavaró hogy nem lineárisan változtatja az ellenállás értékét. Tehát az én elképzelésem az volna hogy egy "fényérzékelő áramkörből" amely tartalmazza az általam felsorolt fényérzékelők valamelyikét egy feszültségértéket kapnék amit az AVR mikro A/D átalakítójával digitalizálnék. Maga az AVR vezérli az egész grafikus kijelzőt és menüből szabályozni lehet a kontrasztot és háttérfényt, de még az automata háttérfény szabályozást szeretném megvalósítani. Ebben szeretném a segítségeteket kérni . Tehát ha valakinek lenne számomra hasznos tanácsa amin eltudnék indulni, illetve egy működő kapcsolási rajza és azt megosztaná velem, hálásan megköszönném. :worship:
Most ezt nem ertem, azzal van gond, hogy nem tudod felrajzolni a jelleggorbet es egy kepletet felallitani hozza, vagy akar egy korekcios tablazatot felepiteni amivel a nem-linearis gorbebol kapnal egy megkozelitoleg linearis gorbet?
Amugy sok hattervilagitas sem linearis a raadott feszultsegre vonatkoztatva, ill a szem is maskepp reagalhat, maskepp erzekelhet kulonbozo fenyeroket, tehat linearisnak latszo megoldast eleg nehez talalni.
Nem, egyenlőre ilyeneken még nem is gondolkodtam. Már nagyon régen tanultam az elektronika alapjait és bizony sajnos rengeteget felejtettem belőle. A problémám az hogy egy fényérzékelő áramkört szeretnék összerakni és az abból nyert feszültség értéket szeretném feldolgozni egy AVR micro segítségével. Már régóta keresgélek a neten fényérzékelős illetve fényerősség mérésére alkalmas kapcsolásokat de még nem találtam semmi használhatót. lehet hogy csak rosszul keresem. Ezért beszereztem 3 fajta fényérzékelő ezközt ( az előző hozzászólásomban említettem őket) és azokkal kísérleteztem, csak sajnos hiányosak az elektronikai ismereteim és ezért nem értem el használható eredményt. Tehát nekem a fényérzékelő megépítésében kellene segítség, a többit software-sen megoldom. A segítség alatt pedig tanácsokat esetleg kapcsolási rajzokat értek.
Az AVR belső referencia feszűltség forrása 2,56 volt. Tehát az elképzelésem szerint olyan érzékelőt szeretnék építeni aminek a kimenetén pl. 0V-tól 2.5V- ig változna a feszültség érték. A fényintenzitást pedig egy átlag emberi szemhez viszonyítanám, tehát ami egy átlag emberi szem számára már sötét (esetleg vaksötét) akkor lenne az érzékelő kimenetén a legkisebb feszültség érték. De ha ez fordítva történne az sem lenne baj. Ebben kérném a segítségeteket. előre is köszönöm.
van egy ilyen kütyüm:
http://wiki.mai.kando.hu/images/thumb/7/78/Nanobeultetes.JPG/730px-...es.JPG http://wiki.mai.kando.hu/images/thumb/b/be/111.JPG/800px-111.JPG Na most a kérdésem az az, hogy ezek az Atmega 88-asban gyárilag van-e Bootloader vagy azt nekünk "beleégették" Ezt én vmilye terminálon tudom programozni ( Com 9600 baud). És ha van bootloader azt honnan tudom, hogy néz ki. esetleg ki lehet menteni belőle? Elnézést ha rossz a kérdés, de valahol el szeretném kezdeni a megértését.
Gyárilag teljesen steril az ATMEGA88. Azaz nincs rajta semmi. A bootloader-t azt utólag beleégették, így lehet megvásárolni a NanoBoard-dal (későbbiekben NB) együtt.
Ha van bootloader benne, azt olyasformán tudod ellenőrizni, hogy összerakod a NB-ot, összekötöd a géppel soros porton, a Terminált bekonfigurálod megfelelően; mindezt követően, ha a NB-on megfelelő sorrendben megnyomod a Reset, és az amelletti gombokat, akkor a soros porton egy jelzést küld a számítógép felé, amit a Terminál ablakában látni fogsz mindenképpen. Ha egyáltalán semmi nem érkezik a Terminálba, megfelelő soros port-beállítások mellett, akkor nagy valószínűséggel üres az ATMEGA88.
Köszönöm a választ. Van benne Bootloader ezt tudtam csak a működését nem, hogy hogyan. Esetleg ki lehet olvasni vmi érthető formába? Bascom-ot szeretném használni, de egyelőre nem sikerült. Avr Studióval tudom használni, csak nem sok példaprogram van amit értenék.
http://wiki.mai.kando.hu/index.php/Targyak/programozas_II/labor/ora_8 itt van egy példaprogram az előbb belinkelt Nb-re, de nem értem hiába néztem át töbször is. Az utasítások te teljesen tiszták. Nem tudom találok-e olyan oldalt ahol ezeket részletesen taglalnák.
Sziasztok!
Lenne egy megoldandó feladatom, amihez segítséget keresek. A feladat lényege egy Atmega88 programozása. Feladat: Az R0-R15-ig terjedő regiszterekbe betölteni 3-tól a 3-al osztható számokat. G0-ás olvassa be ezeket R0-R15 ig sorrendbe, G1-es gomra fordítva olvassa be R15-R0-ig, G2-es gombra adja össze a szomszédos regiszterek összegét (R0-R1,R2-R3,stb...) G3-ra szorozza össze a szomszédos regisztereket. Forráskód C. Ha valaki tudna, segítsen légyszíves! Köszönöm!
Le kell ülni és megírni.
Nagyon korrekt, ha kapsz egy feladatot, kiadod itt a fórumon másoknak. És van olyan, aki önszántából szívességként megírná (amúgy max 5 perc) csak az a baj, hogy miután ilyen szépen behatároztad: "Forráskód: C" gyanítom hogy nem az elméletére lenne szükséged. Ám ha tévedtem, és nem mással akarod megiratni a feladatodat akkor egy kis segítség: 16 elemű tömb. G0: for(i=0;i<15;i++) { ..beolvasás i. elembe.. } G1: for(i=0;i<15;i++) { ..beolvasás (15-i)-edik elembe.. } Utóbbit lehet helyettesíteni egy korrektebb megoldással: i = 15; do { beolvasás i.-be } while(--i); G2: for(i=0;i<15;i+=2) { eredmény: (i) elem+ (i+1)-edik elem } G3: for(i=0;i<15;i+=2) { eredmény: (i) elem* (i+1)-edik elem } Ennek, ha nem mással akarod megiratni, maximálisan elégnek kell lenni, ugyanis ez a feladat 99%-a.>>>> Idézet: „G1: for(i=0;i<15;i++) { ..beolvasás (15-i)-edik elembe.. } Utóbbit lehet helyettesíteni egy korrektebb megoldással: i = 15; do { beolvasás i.-be } while(--i);” Bar ez izles dolga, de igy is meg lehet csinalni: G1: for(i=15; i; i--) { ..beolvasás (i)-edik elembe.. } Amugy ha R0 - R15-ig kell olvasni, akkor 'i<=15' kellene az osszehasonlitasokhoz (tehat Topi peldaihoz). Ugyanakkor ahol 'i+1' hivatkozas van oda jo a 'i<15' kifejezes, mivel akkor 'i' maximalis erteke 14 lehet es 'i+1' ugye helyesen 15 lesz.
Szia Topi.
Nagyon tetszettek az AVR-el kapcsolatos szerintem hiánypótló anyagaid. /Tekintettel arra, hogy nem nagyon találni hozzá magyarnyelvű tananyagot/. Ezért szeretnén tudni, hogy hogyan tudnám letölteni, és merre található magyarnyelvű leírás hozzá.
Hát nem bizony. És azt sem véletlen, hogy --i és nem i--. Meg hogy nem while-do hanem do-while.
Kis programozási trükk... Optimalizáció. Legalább 2x-es sebesség különbség van a do-while (--i) és egy for ciklus között. Szerk: Közben akí írta, törölte is.
Egy ATTiny45-el jatszadozok, meghozza most az AD konverterével.
A felbontas 10bites, vagy lehet ezt allitani valahogy? Nekem az kellene hogy egy 8bites szamot tudjak kiolvasni az ADC registerebol hogy majd ezt az erteket tudjam alkalmazni mas 8bites regiszterekhez. AZ ADCL és az ADCH-ba regiszerbe tarolodik a mért eredmény ha jol vettem ki. Az ADCL-be lenne az első 8 az ADCH-ba a maradek 2bit? Vagy ezt hogy kell elkepzelni? Bocs ha hülyeséget kérdeztem volna, de épp csak elkezdtem vele foglalkozni.
Tiny45-el még nem foglalkoztam, de a többi típusnál lehet állítani, hogy melyik oldara legyenek rendezve a bitek (ADMUX regiszter ADLAR bit)
Topi vagy bárki,
Lenne pár sor amit nem ertek az RC szervos cikkben. 1. (ADCL | (ADCH<<8)) Itt ez azt jelentene hogy gyakorlatilag 8bittel eltolja balra az erteket, egy 16bites (10bit) szam lesz 8nullaval a vegen, igy összevagyolható a regiszter alsó felével? 2. adc = ReadADC(1)>>1; Ez itt mit csinalna a vegen? |
Bejelentkezés
Hirdetés |