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
Próbálom megtanulni, programozni a PID szabályzást. Egy Attiny45-tel szeretnék fényerőszabályozni. A gyári PID implementáció, AVR221-ben 16 bites változókat használnak. Nekem 10 bites AD-m van a fotoellenálláshoz. Hogy praktikusabb 16 bites számot csinálni belőle az algoritmus számára, ha a felső biteket nullázom vagy ha az alsókat? A felbontásom nyilván nem változik.
A LED-et PWM-mel vezérelném.
Miért kéne bármit is nullázni? Ha egy 16 bites változónak egy 10 bites értéket adsz, akkor átkonvertálja 16 bitre, azaz balról kiegészíti nullákkal.
A hozzászólás módosítva: Dec 10, 2014
Én már eljutottam oda, hogy 8+4 porton minden LED-et meg nyomogombot is tudnák kezelni. és még marad talán kettö másra.
Gondolkodtam már a LED kezelön is. (5450/5451). De szeretném az áramkör a lehetö legegyszerübbre tervezni. (Hogy ne kelljen sok külsö cucc).
Tudnátok valami érthető leírást,vagy példaprogramot linkelni,ha egy függvényt asm-ben szeretnék megírni és .S fájlként csatolni ? Leginkább a paraméter átadás és visszatérési érték megadása érdekel,hogy adom át ezeket a regisztereknek ?
Ha minden igaz, akkor egy C-bol meghivott fuggveny az r24,r25-ben kapja az elso parametert, r22,r23-ban a masodikat, r20,r21-ben a harmadikat. Ez addig igaz, amig az atadott parameterek 16 bitesek. (A C nyelv a char-t mindig int-re konvertalva kezeli, tehat azt is 16 biten adja at.)
A fuggveny visszateresi erteket pedig az r24,r25-be kell tenni. Ha 32 bites a visszateresi ertek, akkor r22,r23,r24,r25-ben. Ha a bemeno parameter 32 bites, akkor az r22..r25 regiszterekben megy at az elso parameter, de nem tudom, hogy melyik az LSB, melyik az MSB, es azt sem, hogy osszesen hany parametert lehet igy atadni. A 3x16 bit az 100%. Szoval, ha hivsz C-bol igy: x = myfunc(a, b); akkor a .S-ben a myfunc a-t r24,r25-ben kapja, b-t r22,r23-ban. Es x-be a visszatereskori r24,r25 kerul. Azt sajnos nem tudom, hogy melyik regisztereket szabad elrontani es melyiket nem. Ez valahol le van irva a gcc dokumentaciojaban. Az r1-ben mindig nulla van, azt nem szabad elrontani, az biztos.
A hozzászólás módosítva: Dec 11, 2014
Én asm volatile mániás vagyok. Tök kényelmes, hogy egy for loop-ba asm rutinokat pakolsz bele, de beletellett 2 hónapomba, míg megtanultam, hogy hogyan kell portot, memóriacímet, konstanst, lokális/globális változót átadni a C és az ASM között.
Igazából nem szoktam asm-ben programozni semmit. Megírok mindent C-ben, a kritikus részeket meg az alábbiak szerint adom át. Elsőre garantáltan kínai lesz, de bármilyen változót bárhol átadhatsz a fordítónak, akár függvényen belül is. Sőt, én eleve nem foglalok le regisztereket, azt a C csinálja, csak használom őket.
Akkor az nem teszi tönkre az algoritmust, hogy a 0-65535 helyett csak 0-1023 a bemenő érték tartománya?
Kösz, csabeszq-nak is ! Az inline asm nagyon kínai, még másodikra is
![]() Közben a Fleury féle i2c könyvtárban is találtam a kérdésemmel kapcsolatos megoldást,valamint a doc42055 is erről szól.
Nem egészen értem a problémádat. A PID a hibajel alapján szabályoz. A hibajel a szabályozott jellemző és az alapjel különbsége. Ez most igazából teljesen mindegy hány bites érték, ha nagyobb az eltérés a két érték között, akkor nagyobb lesz a hibajel is. A beavatkozó jelet meg a PID paraméterek határozzák meg, azt úgy kell belőni hogy jó legyen a szabályzás. Nyilvánvalóan ha kisebb a maximális hibajel, akkor nagyobb PID együtthatókat kell alkalmazni. De az most az algoritmus szempontjából teljesen mindegy, hogy mondjuk 20 vagy 80 a P együtthatója, a lényeg, hogy optimális legyen a szabályzás.
Sziasztok
Múltkor felvetettem a kérdést, hogy az ebay-en töredékáron kapható mega128ak mennyire megbízhatók. Végülis rendeltem egyet valami 2-300Ftért. Tegnap meg is jött, de nem sikerül programozóval csatlakoznom rá. Azt a hibát dobja hogy a device signature nem egyezik meg. Holnap majd utánanézek még neten ennek, de hátha valaki tud rá megoldást itt is. Ha meg nem, hát akkor megtanultuk, hogy ebay-ről nem veszünk kínai avr-t.
Ha a device signature nem 000000, akkor örülhetsz, mert megy.
![]() ATmega128RFA1 1ea701 ATmega128 1e9702 ATmega128A 1e9702 A hozzászólás módosítva: Dec 13, 2014
Az a bajom ezzel, hogy AtmelStudio 6-ban ha rányomok hogy olvassaki, akkor mindig a kiválasztott AVR device signature jelenik meg, csak pirosan és jön mellé az error. Szóval a konkrét eszköz azonosítóját nem tudom, pedig abból már vissza lehetne keresni miről is van szó.
Nekem most érkezett meg 5 db atmega8 Kínából és hibátlanul működik. Most próbáltam ki egy alap led villogtató programmal.
![]()
Ezek szerin igazam lett, hogy egy lecsiszolt át szitázót tokról van szó!
Ha az AtmelStudio 6 kitudná olvasni a device signaturet, ki is írná neked az azonosítót típust! Még lehetséges hiba lehetőség, hogy az M128-as programozó kivezetései nem a SPI lábakon vannak. hanem az M103 kompatibilitás miatt talán a 2,3-ason? (Bővebben adatlap! Pin Bekötések)
Még az is lehetséges, mivel ez a hibaüzenet amit dob, hogy nem sikerült belépni a programozási módba. Viszont érdekes mert feszt kiolvassa, meg kiírja azt is hogy milyen device azonosítónak kéne lennie. Asszem ha kizárom magam az AVR-ből és próbálom akkor pedig csak a hibaüzenetet írja ki.
Majd jövő héten beleásom magam jobban, hátha menthető.
Sziasztok!
Atmega2560-as AVR órajelét szeretném átállítani belső-röl külső 16 MHz re-, ehez egy AVR Dragon programozóm lenne kéznél, JTAG üzemmódban. Atmel Studio 6 al hazsnálom. Kérdésem az lenne elég lenne nekem a megfelelő OSC választanom a listából vagy esetleg valami más Fuse bitet is állítanom kell ? Nem szeretném kizárni magam semiképp. Köszönöm!
Szia kiválasztod a listából azt hogy "Ext.crystal high frequency" Én ezt szokom használni. Más fuse bitet nem kell megváltoztatni.
Koszonom! Ha szeretnek debugger-t hasznalani akkor kell valami plusz beallitas ?
Úgy tudom hogy engedélyezni kell a JTAG-ot, de nem vagyok benne biztos, én főként ATmega8-at használok, azon nincs JTAG.
Ha előzőleg letiltja a JTAGot akkor már nem tuja Csak ISP-n keresztül programozni!
![]() Tehát JTAGon már nem is tudja újra engedélyezni a programozást/debugolást! ![]() A project lefordítását viszont debug módban kell elvégezni! ![]() A hozzászólás módosítva: Dec 14, 2014
Üdv!
Nos az lenne a tervem hogy építek egy router féleséget. Van egy wifi hálózat amire csatlakozik és létrehoz egy másik hálózatot de a lényeg az hogy az új hálózat sokkalta nagyobb hatóterű. AVR mikrokontrollerrel gondoltam megcsinálni. Milyen ötletek vannak? Lehető legnagyobbnak kéne lennie a hatótérnek.
Hogyan akarsz egy 8 bites AVR-rel IP packeteket route-olni, mondjuk 54 Mbit/s sebesseg mellett? Szerintem ez eleve nem megoldhato hazilag, de legalabbis nem a hobbi kategoria, es semmikeppen nem AVR. Azon felul nem tudsz nagyobb hatotavolsagu WiFi halozatat csinalni, mint ami az elerheto, ugyanis, meg ha csinalnal is nagyobb teljesitmenyu adot, a vevo erzekenyseget nem tudod a vegtelensegig novelni.
Esetleg ha van valami modul. De bármilyen megoldás érdekel.
Routerek
Nézd meg ezekből a több portosakat (433, 435, 493... ), meg azt is, hogy a legkisebb is 300 MHz-es procival megy. A cég, aki ezeket gyártja, már jópár éves tapasztalattal rendelkezik, ezt megfelelő alkatrészekkel is évekig tart "utolérni"... A firmware ezeken a routerboardokon egy egyszerűbb linuxra hasonlít, és van is annyira bonyolult. Esélytelen, inkább vegyél. A hatótávolságot antennanyereséggel és adóteljesítménnyel lehet növelni. Viszont az adóteljesítmény növelésre mindkét oldalon szükség lenne, mert ahogy kilbill írta, a vevőérzékenységet nem lehet növelni. Ha a kliensek pl. telefonok, notebookok, tabletek, akkor ezek adóteljesítményén sem tudsz növelni.
Üdv!
Belegondoltál egy kicsit is jobban abba, hogy mit is szeretnél? Egy mikrovezérlő nem képes ilyen feladatra, még modulok segítségével sem. A jelenlegi routeremben egy 560MHz-en ketyegő processzor van 128MB RAM tarsaságában. Maximum egy régebbi PC-ből összeállítasz egyet, ha mindenképpen építeni akarsz.
Lehet hogy rosszul fogalmaztam de akkor nem erőltetem a témát.
De pl. Arduino wifi shield-del meg tudod osztani a wifit.
Egy Wireless Access Point-ra van szükséged szerintem, ami tudja ezt a funkciót. Már ha nem mindenáron építeni akarod
![]()
Üdv! Ez a megoldás csak makróban alkalmazható,mármint hogy az expr3 elhagyható a feltételes kifejezésből ?Ha jól értelmezem,akkor ez egy switch-nek felel meg.
|
Bejelentkezés
Hirdetés |