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   220 / 840
(#) trudnai válasza pittyu2 hozzászólására (») Máj 11, 2010 /
 
Hianyzo vagy ismeretlen eszkoz...
(#) pittyu2 válasza trudnai hozzászólására (») Máj 11, 2010 /
 
OK. Köszi már énis rályöttem , csak nemtudom mi baja.
(#) (Felhasználó 4577) válasza pittyu2 hozzászólására (») Máj 12, 2010 /
 
Idézet:
„OK. Köszi már énis rályöttem , csak nemtudom mi baja.”

Szerintem rosszul köthetted be, nézd át újra.
(#) (Felhasználó 4577) válasza trudnai hozzászólására (») Máj 12, 2010 /
 
Én meg azt hittem, hogy sima hétköznapi boiler-ről beszélünk. Így persze más. Egy cirkó vezérléséhez is tökéletes a PIC és az AVR-is.
(#) Horv hozzászólása Máj 12, 2010 /
 
Sziasztok!

Jobban megnéztem, más gépre kötöttem rá, s ott nem vágta le a tápot. Viszont, megmértem mennyi V-t vesz fel és sajnos semennyit, ezért nem ismeri fel a gép :no: Viszont az én gépemnél még midnig lecsapja a tápot! Szerintetek?
(#) slogan válasza pittyu2 hozzászólására (») Máj 12, 2010 /
 
Baja egy város
(#) trudnai válasza Horv hozzászólására (») Máj 12, 2010 /
 
Szerintunk nezd meg hol vana rovidzar, de ezt mar leirtuk!
(#) v alaki válasza gergobmwe30 hozzászólására (») Máj 12, 2010 /
 
Szia, nem azért mert értek hozzá, de talán most jövök a homályból.
Én jó ötletnetnek tartom, ha elkötelezed magad gyorsan valamelyik mellett. És abban mélledj el. Én az első két hónapot azzal töltöttem, hogy erre rájöjjek.
A következő hónapot azzal töltöttem, hogy a különböző példa programokban meg tudjam különböztetni a stílusbeli, és a lényeges eltéréseket.
pl.:
  1. dddd &= ~(1 < < cccc)
  2. dddd |=(0< < cccc)

ugyanaz, csak nem minenkinek tetszik.
Szerintem...
(ha mégsem ugyanaz, írjátok meg, és tanulok belőle
(#) zombee válasza v alaki hozzászólására (») Máj 12, 2010 /
 
Szerintem nemcsak nem ugyanaz, hanem hibás.

Ilyen operátort("< <") nem ismerek, véletlenül nem "<<" akart lenni?

Ha igen:
Az 1-es résznél a "dddd"-nek a "cccc"-edik bitjét nullázzuk ki.
A 2-esnél "dddd" nem változik.
(#) gergobmwe30 hozzászólása Máj 12, 2010 /
 
Köszi szépen, egyenlőre akkor ismerkedek a leírásokkal, megpróbálom értelmezni őket. Amint látom nem lesz egyszerű... Hamarosan jelentkezem! Tuti csak egyre több kérdésem lesz
Köszi mindenkinek!
(#) zombee válasza gergobmwe30 hozzászólására (») Máj 12, 2010 / 1
 
Igazából nem nehéz, csak az operátorokat kell 1-szer megtanulni.

Ha dddd és cccc char, akkor ez történik:

1-es: fogod a "0b00000001"-et, balra shifteled cccc-szer. Így az 1-es a cccc-edik biten lesz. Ezt negálod a "~" jellel, azaz csupa 1-es lesz kivéve a cccc-edik bitet. Ha ezt össze-ÉS-eled a dddd-vel, akkor annak cccc-edik bitjét kinullázza, a többi változatlan marad.

2-es: a "0b00000000"-t hiába shifteled, továbbra is ugyanaz marad mert a shifteléskor belépő bitek nullások. Így a dddd-vel mindig 0b00000000-át VAGY-olsz össze, emiatt a dddd változatlan marad.
(#) trudnai válasza gergobmwe30 hozzászólására (») Máj 13, 2010 /
 
Meg annyit had tegyek hozza, hogy nemcsak az C-ben hasznalatos operatorokat kell megtanulni, hanem matekbol a logikai muveleteket, illetoleg a logikai muveletek igazsag tablazatait illik kivulrol fujni. 1x ubb, mint az 1x1
(#) trudnai hozzászólása Máj 13, 2010 /
 
Ovakodj a hamis AVR-tol!
(#) v alaki válasza zombee hozzászólására (») Máj 13, 2010 /
 
Szóval az opearátor valóbban "<<" akart lenni "< <"helyett, de beírva szép volt, de megjelenve szétesett. (valahol olvastam, hogy ez lehet, mert "valami"kódnak olvassa, és értelmezhetettlennek mutatja.)
Három javítás után maradtam a kérdéses változatnál.

A többit még emésztem...>>>>
(#) pec hozzászólása Máj 13, 2010 /
 
Sziasztok!

AVRStudioban szeretnék felprogramozni egy procit, de nem tudom csatlakoztatni az égetőmet, a Tools->Prog funkcióra pedig a "No supported board found! AVRprog version 1.40" hibaüzenetet kapom... Mi lehet a gond?

Köszi!
(#) v alaki válasza zombee hozzászólására (») Máj 13, 2010 /
 

TÉÉÉNYLEEEG.
Viszont tényleg láttam egy programban a 2.-es verziót és ránézésre egy kezdőnek logikusabbnak (szebbnek, könnyebben érthetőnek tűnt). Rá is kaptam, mint...
Amúgy köszi hogy szántál a szájba rágásra időt.
Tényleg segített.
(#) zombee válasza pec hozzászólására (») Máj 13, 2010 /
 
Programozó csatlakozik?
Ha USB-s akkor látod az eszközkezelőben.
Nem ütközik más eszközzel? Az enyém bluetooth eszközökkel ütközik ezért COM4-re állítom be.
avrdude látja?
Van vmi konzolparancs a lekérdezésére.
(#) zsuscsinyo válasza v alaki hozzászólására (») Máj 13, 2010 / 1
 
Idézet:
„ugyanaz, csak nem minenkinek tetszik.
Szerintem...”


Szia! Ez nem így van, nézz utána a Bitwise Operátoroknak.

  1. a |= (0 << b);


Ez semmilyen műveletet nem végez az 'a' változóval, ugyanis a függőleges "vonal" VAGY műveletet végez a jobb oldali értékkel.

Tegyük fel, hogy 'a' értéke 0b00001111 azaz 15 decimálisan.

Ha a 0.bitet akarjuk kikapcsolni a fenti művelettel, akkor ezt kapjuk:

0b00001111
0b00000000 VAGY
==========
0b00001111 azaz változatlanul 15 marad.


viszont ha ezt a műveletet alkalmazzuk:
  1. a &= ~(1 << b);

akkor a következő történik:
tegyük fel, hogy 'a' egy 8bites változó (0...255), 'b' a változtandó bit számát adja meg. Maradjunk az előző példánál (a=15, b=0).
Itt az 1-et balra shifteljük b értékkel, azaz 0-val toljuk balra (marad a helyén) így jobb oldali értékre ezt kapjuk: 0b00000001, ebből képezzük a komplemensét ~( ), amivel ezt kapjuk: 0b111111110, majd ezt az értéket össze Bitwise ÉS-eljük:

0b00001111
0b11111110 ÉS
==========
0b00001110 Ezzel elértük a célt, csak a 0.bit váltott 0-ra. A helyes szintaxis így ez lesz:
  1. a &= ~(1<<b);
(#) puli122 hozzászólása Máj 13, 2010 /
 
Hali.
Megakadtam. Sorba kötöttem egy 1n4148-at meg egy 10K-s ellenállást. Feszültségmérőként rákötöttem az egyik Adc lábra. A diódával szeretnék hőmérsékletet mérni. Tudom hogy az 5V-os referenciánál a lépcsőfeszültség kb 4,88 mV. A gond az hogy a szilíciumdióda nyitóirányú feszültsége °C-onként kb. 2 mV-tal változik. De az acd-m értéke csak 4,88mV-onként változik egyet. Hogy tudok így hőmérsékletet mérni ? ( Nem ebböl akarok precíziós hőmérőt csinálni, csak kísérletezem )
(#) zombee válasza zsuscsinyo hozzászólására (») Máj 13, 2010 /
 
ugyanezt mondtam el én is kicsit rövidebben...
(#) zsuscsinyo válasza zombee hozzászólására (») Máj 13, 2010 /
 
Kétségtelen, viszont részletezve jobban megérti más is
(#) zombee válasza puli122 hozzászólására (») Máj 13, 2010 /
 
pl. alacsonyabb referenciafeszültség?
Elvileg mintha lenne belső 2.56V-os referencia fesz. Bár 1.0V vagy még kisebb kéne.
(#) pec válasza zombee hozzászólására (») Máj 13, 2010 /
 
Rájöttem, hogy az IsoJtagIsp-m átállíthatom JTAG-ről ISP-re, így az egyik áramkör megy, a másiknál viszont verifynál hibát kapok... Gyanakodjak hardware hibára?
(#) puli122 válasza zombee hozzászólására (») Máj 13, 2010 /
 
Ahha, jogos, csak azt nehezebb megoldani, jobban örültem volna ha szoftveresen megoldható, de látom már hogy nem, így tényleg alacsonyabb referencia kell. Megnézem a belsővel.
Köszi
(#) pec válasza pec hozzászólására (») Máj 13, 2010 /
 
Hopp, egy erase két írás között megoldja a problémát...
(#) (Felhasználó 4577) válasza trudnai hozzászólására (») Máj 13, 2010 /
 
Már ezt is.
De még csak nem is egy közismert típust hamisítanak, hanem egy kevésbé ismertet.
(#) puli122 válasza zombee hozzászólására (») Máj 13, 2010 /
 
A probléma itt már csak az, hogy a referenciánál nagyobb feszt nem tudok mérni, de mivel nekem a nyitófeszültséget kell mérnem, így nem megehetek a referenciával a dioda nyitófeszültsége alá.
(#) zombee válasza puli122 hozzászólására (») Máj 14, 2010 /
 
Az ellenállás egyik lába a diódára kerül, másik a tápra?
Így mennyi a dióda nyitófeszültsége? Nemrég játszottam ilyenekkel, 600mV alatti értékeket mértem, ami jóval kisebb mint 2.56mV.

Ha max. 100°C-os hőmérsékletet mérnél, akkor is csak legfeljebb 750mV lehet a nyitófesz!
Az érzékenységet én növelném több dióda sorba kapcsolásával, mert akkor a fesz változás összeadódik!
2.56mV referenciafesznél 3 diódát sorba lehet kötni...

Sőt, mondok mást is!
Mi történik ha meghagyjuk az 5V-os referenciafeszt, és 6 darab diódát sorbakötsz? Így 12mV/°C lesz, ami jóval nagyobb mint a kontroller 4.88mV/div felbontása...
(#) Kafka válasza puli122 hozzászólására (») Máj 14, 2010 /
 
Ötlet: egy nem invertáló alapkapcsolás (alacsony offsettel rendelkező erősítővel). Pozitív bemenetre kötni a dióda/ellenállás osztópontját, negatívra egy táp-föld közötti fesz.osztó osztópontját és a kimeneti visszacsatoló ellenállást. A fesz.osztási arányt úgy kell számítani,hogy kb. 500mV köré essen. Konkrétan: a dióda nyitófeszültsége alá a legkisebb mérni kívánt hőmérsékleten. Ezt a delta feszt felerősítjük és ez mindig ott lesz a kimeneten (AD bemeneten). Erre az értékre majd szükség lesz a kalibráláshoz. Erősítésnek pedig a mérési tartomány szab határt. Pl.:nyitófesz:560mV (szobahőmérsékleten), ref.fesz:500mV, A= 25. Ekkor (560mV-500mV)*25=1,5V ez tartozik a 25C-hoz. 35C-nál 2V. Vagyis 50mV/C. Ez már nagyon kellemesen mérhető AD átalakítóval. (Esetleg nem árt egy aluláteresztő szűrő mert természetesen a zajt is erősítjük).
(#) (Felhasználó 4577) válasza puli122 hozzászólására (») Máj 14, 2010 /
 
Miért nem mérsz máshogy hőmérsékletet?
A DS18B20 sokkal precízebb, mint egy dióda.
Következő: »»   220 / 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