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
1. a kodot mellekelhetted volna mint .c file. (foloslegesen sokat dolgoztal a fotozassal) Es raadasul kimasolni sem lehet igy belole, javitas celjabol.
2. nem tudom mi a celod a koddal, de nem jo helyen van a cli, sei. Az deklaralas, nem pedig hivas. Nem hajtodik vegre. 3. csak nem hagyod a float -ot. Mikrovezerlon nem hasznalunk foloslegesen lebegopontos tipust. 4. olvass el egy alap C konyvet, ha haladni szeretnel.
Sziasztok!
Két kérdésem lenne hozzátok! Az egyik a Ki, mit építettben "bemutatott" két csatornás hőmérőmre vonatkozik. Akinek készítettem, nála nem működik. Azonos hardver és szoftver, ami nálam ment. ATmega16, illetve két darab LM75-ös szenzor. Más program, mint például egy 8 digites számláló megy az avr-en, de ez nem. Valami miatt az I2C nem működik. Ha a programban beállítok egy fix értéket, amit a szenzortól kellene kapnia, azt helyesen kiírja. Jelenleg a program úgy van megírva, hogy csak egy szenzort kezel és ír ki. Nálam ez is megy tökéletesen, viszont akinek csináltam, ott durván -15 fokos eltéréssel, szóval nála szobahőmérsékletre 4-7 fokot mutat! Mindkét szenzorral próbálta, de a hiba azonos. Esetleg valami ötlet? A másik probléma nálam állt fel. Két analóg mennyiséget szeretnék mérni, ADC0 és ADC1 csatornákon. Külön-külön mindkét csatorna megfelelően működik. Viszont, ha programban váltok át a csatornák között, akkor nem megy megfelelően. Úgymond elhúzzák egymást. Például ha mindkettőre trimmeren keresztül 0V-ot adok, majd valamelyiket elkezdem felfele tekerni, akkor mindkét csatorna eredménye mászik felfele, kisebb eltéréssel, de 3V környékén mindkettő megáll, amikor az egyiket felcsavarom 5V-ra, majd ha a másikat is tekerem felfele, ami eddig nullán volt, akkor emelkedik tovább a kijelzett érték, természetesen mindkettőé... Még nem használtam egy programban két csatornát, így nem tudom, hogy lehet-e hardveres gond, vagy a szoftverben szúrtam el valamit. A kódot délután még átnézem, de én fizikai problémára gyanakszom. Idézet: „A másik probléma nálam állt fel. Két analóg mennyiséget szeretnék mérni, ADC0 és ADC1 csatornákon. Külön-külön mindkét csatorna megfelelően működik. Viszont, ha programban váltok át a csatornák között, akkor nem megy megfelelően. Úgymond elhúzzák egymást. Például ha mindkettőre trimmeren keresztül 0V-ot adok, majd valamelyiket elkezdem felfele tekerni, akkor mindkét csatorna eredménye mászik felfele, kisebb eltéréssel, de 3V környékén mindkettő megáll, amikor az egyiket felcsavarom 5V-ra, majd ha a másikat is tekerem felfele, ami eddig nullán volt, akkor emelkedik tovább a kijelzett érték, természetesen mindkettőé... Még nem használtam egy programban két csatornát, így nem tudom, hogy lehet-e hardveres gond, vagy a szoftverben szúrtam el valamit. A kódot délután még átnézem, de én fizikai problémára gyanakszom.” Nekem akkor volt ilyen, amikor megszakításban is mértem az AD-vel és a végtelenciklusban is, a kettő egymás dolgába beleszólt, mindkettőt megszakításba kellett tennem. Na de ez így csak találgatás. Csatold a forráskódot és a kapcsolási rajzot és megnézzük.
Hello! 1) Mivel a float típussal kisebb volt a hex, ezért hagytam benne.
2) Sajnos a cli meg az sei-ről csak annyit tudok, hogy interruptot engedélyezi meg tiltja, ezért nem is tudom, hogy hová kéne írnom. 3) nemtudom, hogy neked mi az a "sok munka", mert ez a fényképezés kb. fél perc alatt megvolt, és azért csináltam, mert így látszanak a beállítások (de most berakom txt-be is) 4) őszintén, szerinted nulla c-vel eljutottam volna idáig?! 5) nem mintha zavarna, de feleslegesen növeljük a fórumot, azzal hogy elmeséled nekem, azt hogy mit csesztem el, pedig szerintem ha már értelmesen fel tudtam tenni a kérdésemet, akkor segíteni kéne, nem pedig ilyen semmit sem érő tanácsot adni:"olvass el egy c könyvet", mert ezt bárki tanácsolhatja és mint már említettem 0 C-vel nem jutottam volna idáig... 6)a válaszodból csak azt tudtam meg, aminek köze is van a témához, hogy a cli meg az sei nincs jó helyen... Szóval kérek valakit, aki segíteni is hajlandó, hogy mondja meg mit kéne még csinálnom a programon, hogy rendesen, valós időben menjen?
Azért ne légy ilyen durva azzal, aki segíteni próbált.
Azért mondta gtk, hogy olvass el egy C könyvet, mert abba le vannak írva például a változók is, illetve én is mondtam, hogy float helyett integer-t kellene használni.
Én nem durva meg bunkó akartam lenni, kár hogy így jött le, de annyit magamtól is sikerült kitalálnom, hogy ha c-ben akarok programozni, akkor előtte elolvasok egy c-könyvet. Amúgy kipróbáltam már egy csomó változótípussal, de ebből a szempontból (nem valós időben késleltet) teljesen mindegy.
Szia!
Megpróbálom csatolni a kódrészletet, még nem csináltam ilyet.
Remélem érthető... Először az 1-est mérem meg, majd mentek, váltok a 0-ásra, megmérem, majd mentek. A kapcsolás csak annyi, hogy egyik bemenetre 25k trimmer van kötve, a másikra 2k trimmer, ezeket találtam. Referencia az AVCC, kondikat tettem a megfelelő helyre.
Hat akkor ujra, a Te szavaiddal elve: Igen, ez ahogy irtad: 0 C! Ha nem tudod a deklaralast megkulonboztetni a hivastol. En csak azt akartam hogy elorebb tudj lepni.
Szia!
Jujj, Assembly, sajnos nem tudok segíteni, csak C-ül tudok. Viszont C-ben nagyon szívesen segítek!
Semmi gond!
Meg sem közelít egy C könyvet, de talán némi segítséget ad, az oldal vége felé csatoltam két kisebb leírást a AVR programozásról: Bővebben: Link
Helló!
Itt is van egy leírás ebből is nagyon sokat lehet tanulni.
Szia!
Köszönöm szépen, viszont én épp a C-hez nem értek! Talán más majd tud mondani valami hasznosat!
Szervusz!
Furcsa ez a ragaszkodásod a floathoz... Az időzítésed "_delayus(unsigned char k)" előjel nélküli nyolc bites paramétert vár paraméterként, Te pedig floatot adsz át neki! Ez pedig sem hosszában sem típusában nem egyezik, ne is csodálkozz hogy nem az csinálja amit szeretnél. Aláhúzással sem kezdünk saját függvényt, de ez inkább stilisztika. Amúgy hidd el végre, hogy a lebegőpontos műveletek sokkal több helyet foglalnak mint az egészek, bár nekem mindegy mit csinálsz! Egy C könyvet pedig tényleg érdemes alaposan átolvasni mielőtt programozni akarnál ezen a nyelven!
Hello! Ha már ennyien mondjátok, megfogadom és ebből a hozzászólásból kiérződik egy kis ellenségeskedés valószínűleg az előbbiek miatt és azt gondolod, hogy "na megint itt van egy szerencsétlen, aki nem ért semmihez de jár a szája"...ez nem teljesen igaz, mert megpróbálok minél többet olvasni és gondolkozni és csak legvégső esetben fordulok ide. Ha nem tudok valamit vagy eget verően nagy hülyeséget kérdezek, akkor mindenki arra gondol, hogy megint itt egy értetlen, pedig ha elmondanák, hogy mi a rossz, akkor sokat tanulnék, és egy hasonló kérdésben segíteni is tudnék. Tudom nagyon idegesítő a gagyi kérdésekre válaszolgatni de azért van a fórum(szerintem).
A kérdésre visszatérve, akkor az e lényeg, hogy a függvénynek egy unsigned char-t adok át neki? Amúgy a bajom az, hogy én eddig csak gépre írtam programokat, ahol a méret és a sebesség nem számított. Köszönöm a választ.
Nem kell semmi ellenséges szándékot belemagyarázni abba amit írtam, csak pár dologra fel szerettem volna hívni a figyelmed, mint ahogy a többiek is!
- A paraméterátadásnál pedig ahogy írod, ha unsigned chart vár akkor azt is kapjon! Üdv. István
A kérdésemre megtaláltam a választ!
A gond az volt, hogy a proci 8MHz-en ketyegett, és előosztó nélkül használtam az ADC-t. Ez zavart be neki. Most 4MHz-en megy 16-os osztóval, és prímán megy!
Üdv!
Eddig ATtiny vezérlőkkel foglalkoztam, de most szeretnék egy ATmega8-ast is beüzemelni. A kérdésem, hogy mit kell másképp csinálni az ATtinykhez képest? Nem akarok külső órajelet használni. Az fuses biteket hogy állítsam, mert nem szeretném kizárni magam.
Semmit sem kell másképp csinálni az ATTiny-hez képest.
Ha nem akarod kizárni magad, akkor a SUT_CKSEL-nél mindenképpen Int.-tel kezdődő legyen beállítva, ez internal=belső oszcillátort jelent. Egy megfelelő beállítás:
Hello mindenkinek! Most már megy szépen minden, ahogyan kell és hogy lássátok milyen kreatív vagyok, a mellékletben csatolom a boci boci tarka című csodás dalt, avr-re kódolva.Amúgy nézegettem, hogy Topi hogyan oldotta meg a hanggenerálást és én máshogy oldottam meg (sokkal egyszerűbb lett, de működik).Úgyhogy köszönöm mindenkinek...
Hali mindenkinek!
Megjelent a Flowcode 4 for AVR nevű program melyben az AVR processzorokat lehet programozni modulrendszerűen. Próbáljátok ki hátha meg fog tetszeni. Itt a link a DEMO változathoz. Üdv. edison14
Úgy látszik, hogy tényleg fejlődőképes vagy!
A dallamot egy tömbben kellene eltárolni és egy ciklussal kiolvasni és lejátszani, így sokkal kisebb kódot kapnál, meg nem kellene annyiszor megismételni ugyanazokat a sorokat...
Majd ha lesz teljes megpróbálom.
Az mit jelent pontosan, hogy modulszerűen?
Van sejtésem, de nem akarok hülyeséget mondani.
Ha az általam linkel oldalon levő TEFLC4-60-6.pdf doksit letöltöd és megnézed akkor megtudod hogy hogyan is néz ki a modulrendszerű programozás.
A modulszeru programozas egy eleg regi modszer. A szover reszeit jol elkulonitheto feladatokra kellbontani, es azokat elkulonitve modulokba szervezni. A modulok egymassal jol specifikalt interface-en keresztul kommunikalnak. Ezaltal lehetoe valik a szoftver modulok elkulonitett fejlesztese es tesztelese. Ha jobban bele gondolunk egy DLL is egy modul, de persze nem feltetlen kell a moduloknak kulon binaris file-ban megjelenniuk.
Van azonban egy gyanum, hogy ebben az esetben nem erre gondolt a echo11?
Hello! Köszönöm szépen! Amúgy eddig is "csak" az volt a bajom, hogy az avr-re egy kicsit több dologra kell odafigyelni, mint a gépre. Amúgy teljesen igazad van nekem nem tudom, hogy miért nem esett le...majd ha valamikor csinálok még ilyet, akkor így fogom megoldani, mert ez így 27%-ot foglalt el.
Köszönöm mindkettőtöknek. Így már nagyjából világos.
Hello mindenkinek! Máris egy másik dolgot akarok megvalósítani, és ezért írtam egy alap óra programot és az lenne a kérdésem, hogy ez így működhet-e? Bocsi ha nagy bakik vannak benne, de csak így gyorsan 10perc alatt alkottam. Amúgy az avrstudio lefordítja rendesen.
Jónak néz ki, csak nem lesz pontos.
|
Bejelentkezés
Hirdetés |