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   248 / 840
(#) echo11 válasza gtk hozzászólására (») Júl 10, 2010 /
 
ok! itt van...

program.PNG
    
(#) gtk válasza echo11 hozzászólására (») Júl 10, 2010 /
 
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.
(#) zolee1209 hozzászólása Júl 10, 2010 /
 
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.
(#) (Felhasználó 4577) válasza zolee1209 hozzászólására (») Júl 10, 2010 /
 
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.
(#) echo11 válasza gtk hozzászólására (») Júl 10, 2010 /
 
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?

program.txt
    
(#) (Felhasználó 4577) válasza echo11 hozzászólására (») Júl 10, 2010 /
 
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.
(#) echo11 válasza (Felhasználó 4577) hozzászólására (») Júl 10, 2010 /
 
É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.
(#) zolee1209 válasza (Felhasználó 4577) hozzászólására (») Júl 10, 2010 /
 
Szia!
Megpróbálom csatolni a kódrészletet, még nem csináltam ilyet.
  1. sbi     admux,mux0; kiválasztom az1-es csatornát
  2.         sbi     adcsra,adsc;elindítom a konverziót
  3.         call    delay;itt várom meg, amíg be nem fejeződött
  4.  
  5.         lds     datreg1,templ
  6.         sts     voltl,datreg1
  7.         lds     datreg1,temph
  8.         sts     volth,datreg1 ;mentettem
  9.  
  10.         cbi     admux,mux0; kiválasztom a 0-ás csatornát
  11.         sbi     adcsra,adsc
  12.         call    delay
  13.  
  14.         lds     datreg1,templ
  15.         sts     amperl,datreg1
  16.         lds     datreg1,temph
  17.         sts     amperh,datreg1


  1. adccomplete:
  2.                         in      datreg1,adcl
  3.                         sts     templ,datreg1
  4.                         in      datreg1,adch
  5.                         sts     temph,datreg1
  6.                         sei
  7.                         reti


  1. delay:
  2.                 inc     countreg1
  3.                 brne    delay
  4.                 ret


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.
(#) gtk válasza echo11 hozzászólására (») Júl 10, 2010 /
 
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.
(#) (Felhasználó 4577) válasza zolee1209 hozzászólására (») Júl 10, 2010 /
 
Szia!

Jujj, Assembly, sajnos nem tudok segíteni, csak C-ül tudok.
Viszont C-ben nagyon szívesen segítek!
(#) (Felhasználó 4577) válasza echo11 hozzászólására (») Júl 10, 2010 /
 
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
(#) edison14 válasza echo11 hozzászólására (») Júl 10, 2010 /
 
Helló!

Itt is van egy leírás ebből is nagyon sokat lehet tanulni.
(#) zolee1209 válasza (Felhasználó 4577) hozzászólására (») Júl 10, 2010 /
 
Szia!
Köszönöm szépen, viszont én épp a C-hez nem értek! Talán más majd tud mondani valami hasznosat!
(#) p_istvan válasza echo11 hozzászólására (») Júl 10, 2010 /
 
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!
(#) echo11 válasza p_istvan hozzászólására (») Júl 10, 2010 /
 
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.
(#) p_istvan válasza echo11 hozzászólására (») Júl 10, 2010 /
 
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
(#) zolee1209 válasza zolee1209 hozzászólására (») Júl 10, 2010 /
 
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!
(#) gallz hozzászólása Júl 10, 2010 /
 
Ü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.
(#) labu01wx válasza gallz hozzászólására (») Júl 12, 2010 / 1
 
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:
  1. Int. RC Osc. 8 MHz; Start-up time: 6CK + 64 ms
(#) echo11 hozzászólása Júl 13, 2010 /
 
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...

program.txt
    
(#) edison14 hozzászólása Júl 13, 2010 /
 
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
(#) p_istvan válasza echo11 hozzászólására (») Júl 13, 2010 /
 
Ú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...
(#) edison14 válasza (Felhasználó 15355) hozzászólására (») Júl 13, 2010 /
 
Majd ha lesz teljes megpróbálom.
(#) (Felhasználó 4577) válasza edison14 hozzászólására (») Júl 13, 2010 /
 
Az mit jelent pontosan, hogy modulszerűen?
Van sejtésem, de nem akarok hülyeséget mondani.
(#) edison14 válasza (Felhasználó 4577) hozzászólására (») Júl 13, 2010 /
 
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.
(#) trudnai válasza (Felhasználó 4577) hozzászólására (») Júl 13, 2010 /
 
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?
(#) echo11 válasza p_istvan hozzászólására (») Júl 13, 2010 /
 
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.
(#) (Felhasználó 4577) hozzászólása Júl 13, 2010 /
 
Köszönöm mindkettőtöknek. Így már nagyjából világos.
(#) echo11 hozzászólása Júl 13, 2010 /
 
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.

ora.txt
    
(#) Ideiglenes válasza echo11 hozzászólására (») Júl 13, 2010 /
 
Jónak néz ki, csak nem lesz pontos.
Következő: »»   248 / 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