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
Köszi, így jó lett. Annyi módosítást hajtottam végre, hogy a main-ban lévő dolgokat is beleírtam a megszakításba, mert így nem frissítette folyamatosan az értéket, mert általában mindig egy eljárás fut.
Ez már jó, már csak az i2c-t és a port többi bitjének vezérlését kell megoldanom.
Szia!
Meg lehet csinálni osztás nélkül is - sokkal rövidebb futási idővel. Ugyan pic-es és assembly, de az algoritmus az érdekes benne...
Azzal, hogy a main act_display részét betetted az interruptba, adtál a sz*rnak egy pofont... Már neharagudj.
Tökéletesen működik így is. Már az i2c-s részt is megcsináltam, szépen "ketyeg" az óra.
Sziasztok.
Megépítettem a Will-i vezérlő részét, elkezdtem felprogramozni, de egy rögtön nehézségekbe ütköztem. Megpróbáltam felprogramozni, de nem sikerült. A vezérlőbe a tesztprogramot akartam beégetni, de vagy a fuses failed hibaüzenetet kaptam, vagy a programming flash opciónál ugyan csak a failed hibaüzenetet kapom mit csinálok rosszul? Köszi a választ
Nem állítottad be a FUSE biteket vagy nem ültetted be a kristályt. Milyen programozót használsz? Esetleg egy soros portosat amihez kell külön táplálás és nem adtad meg neki?
Nem azt mondtam, hogy úgy nem működik, de
1. Nem szép dolog, hogy minden digit kiírásnál az összes digit adatát frissíted. 2. Ha interruptban változtatod az act_display tömböt, akkor az legyen volatile 3. Túl hosszú feladat a digitekre bontás ahhoz, hogy ez interruptba kerüljön. 4. Ha segítséget kérsz, majd azt úgy felül bírálod, hogy azt sem tudod mit csinál és miért úgy íródott, akkor előbb utóbb megutáltatod magad. Működni elképzelhető hogy működik, de ha ezt még tovább fejlesztenéd, akkor azonnal találkoznál majd a processzor idő problémával...
Tudom, hogy nem a legjobb megoldás, ez csak ideiglenesen lett belerakva, hogy legalább valamit mutasson is, ne csak négy nullát. Majd délután megcsinálom rendesen.
Will-i összes verziója alap gyári béállításokkal használja az ATMega8-at (a beépített RC 8MHz-es oszcillátort, leosztva 1MHz-re). Ezért a fuse biteket nem kell állítani. Valami más lesz a baj.
A stopper megy Timer-al, de hogy tudom kicsit pontositani mert kb. 3 másodperc alatt számol 1 másodpercet, tudom valamit számolni kellene. A másik gondom hogy nekem nem előre hanem vissza felé kellene számolni az viszont nem akar menni.
Hiába állítom minuszra, hogy csökkenjen az idő akkor is előre számol.
Sziasztok!
Valami gáz van a programozómmal. (Topi-féle HEstoron vásárolt) Már több mint egy éve használom, idáig semmi gond nem volt vele. Ma akartam égetni vele, de az AVRStudio nem látja. Újra telepítettem a drivert, WinXP felismeri, Úra telepítettem AVRStudiót, még mindig nem látja. Attól tartok, hogy meghalt. Mi mehetett tönkre benne?
Eszközkezelő -> Soros port.
Nézd meg, mert lehet hogy egy idő közbeni más portra település miatt túl magas portszámot kapott, és az AVR Studio nem tud kezelni 10+ portszámot. Állítsd be eszközkezelőben mondjuk alacsonyabbra. Ne törődj azzal, ha azt mondja a Win, hogy már használatban.
Jólenne a kapcsolás, és a konkrét megálmodott dolog, mert akkor sokkal "készebb" ötleteim lennének.
Írtad, hogy századmásodperc felbontás kéne... akkor a timenek vagy századmásodpercenként kéne megszakítást létrehoznia (ami nem lenne túl jó) vagy elég lenne másodpercenként is, de akkor megállításkor meg kell nézni a timer értékét és ebből számolni a századmásodperceket. A program kialakítás nagyban függ a követelményektől, tehát írd le pontosan, hogy mit szeretnél csinálni, mi indít, mi állít le, kijelzés, stb...
Sajnos nem ez a gond.
De csak nem lehet vele nagy baj, ha a Windows látja! A kondenzátorok vagy a Quad Bus-Driver lehet a ludas? Cseréljem ki őket?
Nekem is valami hasonló programozóm van. Egyszer nekem is csinált ilyet, és akkor valahogy a COM13-at kapta. Teljesen ráillik arra amit mondtál.De ha pl. 3-ra tettem, akkor ment rendesen.És ha így sem akar menni, akkor próbáld ki egy másik gépen, hátha csak a te winfosoddal van baj. De én úgy gondolom, hogy ha a windows felismeri, akkor az avrstudio-nak is látnia kell, még ha nem is tud vele programozni.
Megoldódott a probléma, bár nem világos teljesen miért. A programozó végig a com4-en csücsült.
Az utóbbi időben a PDA-val szórakoztam, úgyhogy gondoltam leszedem az utoljára telepített emulátor programot és hopp már működött is minden mint régen. Arra legalább jó volt az eset, hogy megismerkedtem az LPT portos programozóval, mert mérgemben összeraktam egy ilyet is.
Infra kapukkal szertném indítani, megállítani az adók és a vevő között RF adat átvitel lenne, ja és még kellene mindegyiknek a bennük lévő akkumlátort is tölteni . LCD kijelzőn lenne a kijelzés. Kapcsolás konkréten még nincs de az a vevőn lenne egy 4MHz-es külsö kvarc.
Sziasztok!
Újra AVR Doper! A napokban elkezdtem játszani a firmware verziókkal. Eddig az obdev.at - n található változatot használtam, azonban egy régi verziót. Ez a változat ugyanazt a bugot tartalmazza mint a Topi-féle, azaz a CKDIV8+int_RC_osc_8MHz - nél megbolondul. Nemrég kipróbáltam a "legújabb", 2008 novemberit, ezzel tökéletesen megy! Szóval, aki ilyet használ, azt javaslom hogy vegye elő a fiók mélyéről a nyomtatóportoskábelét, megéri!
Azzal égeti be az fw-t a doperben lévő kontrollerbe.
Mellesleg nem csodálkozom, hogy ha a kód ugye 12MHz-re írt és fordított, akkor 8MHz/DIV8 = 1MHz-en nem fut jól.
Találkozott már vki olyannal ,hogy a winavr-ben a
Nem működött normálisan? ds18b20-al szenvedtem, de nem akartak összejönni az időzítések. Ha ezzel próbáltam, paraméternek 1-et adva is kb 60uS-ot késleltetett. Szerencsére azóta már megoldottam máshogy.
Optimalizáció.
Kifejtenéd bővebben?
Ezerszer szó volt már a fórumban arról, hogy optimalizáció szintjétől függ, hogy hogy működnek a _delay-ek.
Os, O1, O2... Mind-Mind máshogy fordul a delay.h.
Ja értem. Köszi a választ!
A _delay_us témához még hozzátenném hogy float a paramétere, ezért ne adj neki változó paramétert(csak konstanst).
Egyébként hesználhatod a nop() parancsot is egyetlen órajel késleltetéséhez. Beteszed ciklusba, kiszámolod hogy kb. mennyit eszik a ciklus és kész...
Látom nem mondod el mi lesz
Akkor kéne a pontos működés legalább... Tehát valami indít A pontban, majd B pontban leállítja? Visszafelé számolást nem értem miért kell, de lehet. Ha a kijelzés az érkezési pontban lesz, akkor ott kéne mérni az időt. Valahogy így nézne ki az egész: 'A' pontban infra sorompó érzékel 'A' pont jelet küld 'B' pontnak 'B' pont elindítja a számlálást 'B' ponton az infra sorompó megszakítása leállítja a számlálást. -> Kijelzés. A tápellátást külön kéne választani teljesen...
Megprobálom leírni hogyis kellene müködni:
'A' pontban infra sorompó inditja a mérést(RF adó), 'B' pont infra sorompó megállítja a mérést(RF adó), 'C' pont az időmérő (RF vevő). Azért lenne külön a két infra, mert lehet ellentétes irányú az indítás is. A vissza felé számlálás azért kell, mert a maradék idő lesz a pontszám.Minnél több idő marad annál több pontot kapsz. A tápellátást 9v-os Ni-Mh akkuról gondoltam. |
Bejelentkezés
Hirdetés |