Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   256 / 840
(#) vzoole válasza zsozsoX hozzászólására (») Aug 4, 2010 /
 
TIMER!
(#) Ricsi89 válasza Topi hozzászólására (») Aug 4, 2010 /
 
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.
(#) Hp41C válasza Topi hozzászólására (») Aug 4, 2010 /
 
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...
(#) Topi válasza Ricsi89 hozzászólására (») Aug 4, 2010 /
 
Azzal, hogy a main act_display részét betetted az interruptba, adtál a sz*rnak egy pofont... Már neharagudj.
(#) Ricsi89 válasza Topi hozzászólására (») Aug 4, 2010 /
 
Tökéletesen működik így is. Már az i2c-s részt is megcsináltam, szépen "ketyeg" az óra.
(#) gtk válasza Ricsi89 hozzászólására (») Aug 4, 2010 /
 
INTerruptbol csak vezerlunk altalaban.
(#) Fish hozzászólása Aug 4, 2010 /
 
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
(#) edison14 válasza Fish hozzászólására (») Aug 5, 2010 /
 
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?
(#) Topi válasza Ricsi89 hozzászólására (») Aug 5, 2010 /
 
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...
(#) Ricsi89 válasza Topi hozzászólására (») Aug 5, 2010 /
 
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.
(#) Fizikus válasza edison14 hozzászólására (») Aug 5, 2010 /
 
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.
(#) zsozsoX válasza vzoole hozzászólására (») Aug 5, 2010 /
 
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.
  1. ISR(TIMER1_COMPA_vect)
  2. {
  3.       clock_millisecond--;
  4.       if(clock_millisecond==0)
  5.       {
  6.       clock_second--;
  7.          clock_millisecond=0;
  8.       }
  9. }


Hiába állítom minuszra, hogy csökkenjen az idő akkor is előre számol.
(#) gallz hozzászólása Aug 5, 2010 /
 
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?
(#) Topi válasza gallz hozzászólására (») Aug 5, 2010 /
 
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.
(#) vzoole válasza zsozsoX hozzászólására (») Aug 6, 2010 /
 
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...
(#) gallz válasza Topi hozzászólására (») Aug 6, 2010 /
 
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?
(#) echo11 válasza gallz hozzászólására (») Aug 6, 2010 /
 
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.
(#) gallz válasza echo11 hozzászólására (») Aug 6, 2010 /
 
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.
(#) zsozsoX válasza vzoole hozzászólására (») Aug 6, 2010 /
 
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.
(#) zombee hozzászólása Aug 6, 2010 /
 
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!
(#) Ricsi89 válasza (Felhasználó 4577) hozzászólására (») Aug 6, 2010 /
 
Azzal égeti be az fw-t a doperben lévő kontrollerbe.
(#) Topi válasza zombee hozzászólására (») Aug 6, 2010 /
 
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.
(#) luxmanpower hozzászólása Aug 6, 2010 /
 
Találkozott már vki olyannal ,hogy a winavr-ben a
  1. _delay_us()

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.
(#) Topi válasza luxmanpower hozzászólására (») Aug 6, 2010 /
 
Optimalizáció.
(#) luxmanpower válasza Topi hozzászólására (») Aug 6, 2010 /
 
Kifejtenéd bővebben?
(#) Topi válasza luxmanpower hozzászólására (») Aug 6, 2010 /
 
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.
(#) luxmanpower válasza Topi hozzászólására (») Aug 6, 2010 /
 
Ja értem. Köszi a választ!
(#) zombee válasza luxmanpower hozzászólására (») Aug 6, 2010 /
 
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...
(#) vzoole válasza zsozsoX hozzászólására (») Aug 6, 2010 /
 
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...
(#) zsozsoX válasza vzoole hozzászólására (») Aug 6, 2010 /
 
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.
Következő: »»   256 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem