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
Nem szeretem saját magam idézni, de: Bővebben: Nyolc lábbal cikksorozat
Egyszerűség, érthetőség volt a cél.
Köszönöm!
Olvastam már egy részét és nagyon tetszett. Ha megjön a programozóhoz az alkatrész szépen végig is próbálom a cikkben leírtakat. A programnyelv megismeréséhez (BASCOM esetében BASIC) milyen segédanyagok lelhetőek a neten, lehetőleg magyar nyelven? Sajnos ebben is tök kezdő vagyok
BASCOM is található a neten áttételesen Cseh Róbert tollából, magyar fordításként.
DE! Nem javaslom a bascom nyelvet, mert ha komolyabb céljaid vannak a mikrovezérlő programozással, akkor a C-n és az Assembly nyelveken kívül nem sok nyelv marad a talpán. Legyen ez a személyreszabhatóság, optimalizálás, _dokumentáltság_, mások által esetleg perifériákhoz írt illesztőprogramok, library-k, driverek. C ezen a téren igen kiemelkedő. Elsősorban ennek az az oka, hogy a többi fordítóval ellentétben az AVR-GCC (windowsra WIN-AVR) teljesen korlátozás mentesen szabadon használható, ingyenes. Nem ilyen x KB-ig ingyenes, meg X sorig. Egy C kódot bármikor a jövőben le fogsz tudni fordítani. A Basic nyelv egyre ritkább, egyre halottabb.
Hát megfogadom a tanácsod.
Mivel se basic se C ismereteim nincsenek így végül is teljesen mind1 melyik irányba indulok, legalábbis ez az érzésem. Win AVR-ről van valami magyar írás?
Hello!
A következő érdekes probléma merült fel (Attiny 2313): Csináltam egy számlálót, a TIMER0 túlcsordulása növeli a kijelző értékét. A probléma, hogy csak 128-as előosztóig enged! A 256 és 1024-es előosztóval nem csinál semmit, alapállapotban van. A kijelzőn nem változik semmi, folyamatosan "00"-át jelez ki. Ha valaki tapasztalt hasonlót, megtudja velem osztani? Jóéjszakát!
Külső library vagy saját? Külső timer piszkáló library-k általában nem vesznek arról tudomást, hogy egyes típusok adott timerei néha más bit maszkolással rendelkeznek.
Konkrétan írd a TCCRxx regiszterbe az előosztót, adatlapból kinézve. Konkrét értékként.
Hogy érted, hogy konkrétan írd bele?
LDI R16, 0B00000101 OUT TCCR0B, R16 Ez a módszer akkor nem jó?
Ez így tökéletes. Én arra gondoltam, hogy ne ilyen univerzális library-val dolgozz. De így jó.
Viszont! Idézet: „A probléma, hogy csak 128-as előosztóig enged!” Tudtommal nincs 128-as előosztó tiny2313-ban., 1, 8, 64, 256, 1024 van csak.
ok, köszi a helyreigazítást, jogos a felvetésed.
Nem lehet hogy ez volt a gond? Hogy Te 128 felett esetleg már külső órajelre állítottad? Hogy ezért nem működött, mert mikor Te 128-nak gondoltad, az volt az 1024? Mert ez magyarázat lenne.
Igen, jól gondolod. Beleraktam még pluszba egy 15-ös előosztót és már jó is lett.
Üdv!
Szeretnék belekóstolni az AVR-programozásba, és próbálok összeszedni mindent, ami kell hozzá, de sehonnan sem tudom letölteni az AVR Studio-t, pedig ahogy elnézem, az kell. Esetleg tud valaki egy linket?
Szia
A hivatalos oldalról ingyenesen letölthető, csak regisztrálni kell. Itt megtalálod. (Én pl véletlenszerű adatokat adtam meg, csak az e-mail cím valós, a spam-eset érdemes megadni a reklámok miatt)
Köszönöm a segítséget! Már töltöm is le.
Miért lehet az, hogy a PC felismeri Topi AVR programozóját, elnevezi Com4-nek, de AVRStudió nem érzékeli?
Szia!
Nem USB hub-ról használod? Annak idején én is szívtam vele. Csak ha közvetlenül a gépbe dugtam akkor működött.
Ha vista, akkor hiába nevezi el. Nem fog menni, amíg nem cserélsz drivert.
1. Driver eltávolítás eszközkezelőben 2. Vista LowBulk driver betallózása. 3. Örül.
1. és 2. pont megtörtént már többször is.
4 újratelepítés és 3 driver-csere után sikerült elérni a 3. pontot. Valami miatt ezt minden új oprendszernél el kell játszanom. Most működik Köszönöm! Általános kérdés: Attiny13/45-ben a komparátort lehet úgy használni, hogy mindkét bemenetét elérjem kivülről? Vagy csak ADC-vel érhetem el egyiket? Mert én katalógusból ezt vettem ki. ADC mennyi órajelet vesz el? Mert akkor lehet hogy külső komparátort kellene használnom...
ŐŐ. Analóg komparátornak nincs köze az ADC-hez. Az analóg komparátor teljes egészében az ADC-től független egység. Annyi közös van, hogy esetleg használhatják ugyan azt a lábat. De az analóg komparátor egy normál logikai értéket, vagy esetleg interruptot "ad vissza".
Idézet: „Valószínű valami optimalizációs dolog lehet. Masterfoxx! Küldj nekünk a kérdéses részről LSS-t! Hadd tanuljunk a dologból.” Hú, bocs, ezt csak most olvastam. Azóta sajnos(szerencsére) sokat változtattam azon a részen, nem tudom hogy elő tudom-e idézni megint, de megpróbálom. Most néztem utána, s-es, méretre optimalizálásra van beállítva. Eddig nagyon nem tűnt fel, meg nem szokott leesni hogy ilyenkor optimalizálási hiba lehet, általában nekiesek máshogy megírni. (Hozzászoktam a rövid bascomos pályafutásom alatt hogy mindig kel egy másik útnak lennie , ott elég sokszor előfordult hogy egyszerű dolog nem ment...
Nos, kipróbáltam.
0-s optimalizálással atmega64-re 26kbyte méretűre fordul, de a hiba nem jelentkezik s-es optimalizálással 13kbyte fordul, és megint megjelenik a hiba Nem volt egyszerű megtalálni, de sikerült előderiválni: A nem optimalizált verzió
Az optimalizálással
Remélem ennyiből kiderül, bár még nem próbáltam értelmezni. Nem tudom kell-e hozzá a függvény
És lemaradt az amikor s-es opimalizálással jól fut le, amikor a ==1 oda van írva
Egyetlen igazi különbséget látok:
O0 esetén: - 0 konstanst kivonja a (feltehetően r24) visszatérési értékből. - Ha Z = 1 (tehát 0-át kivonva az eredmény 0), akkor ugrik nyolcat, lényegében átugorja a függvényt. Os esetén: - r24-hez hozzá orolja a 0-át (r25-ön keresztül). Ha így nulla lesz (tehát az r24 is nulla volt) akkor átugorja a függvényedet. Os esetén ==1-el: - Nem nullát hanem egyet von ki belőle. Ha az fgv r24-e egy volt, akkor az eredmény nulla lesz. Ez esetben nem ugorja át a fgv-t, mert itt BRNE van. Assembly-ben ez is jó, mint az első három. Egyetlen egy betegséget fedezek fel, hogy optimalizálás esetén 0-ával orol, továbbá r25-öt a fgv. előtt állítja be. Így ha a fgv használja belül az r25-öt, akkor lehet hogy az "or r24, r25" sornál, az r25-ben már más van! Ez az egyetlen egy betegségét látom, ami miatt a felvázolt eset létrejöhet. És ráadásul pont akkor, olyan optimalizációval amit írtál. Logikailag 0-át kivonni csak Zero flag miatt minden gond nélkül lehet, működik (1. verzió), 0-át rá orolni is lehet csak Zero flag vizsgálat miatt (2. verzió) és egyet kivonni inverz logikával is lehet. Egy különbség. r25 esetleges használata. Az az egy hibás sort találom így benne. Kukkantsd már meg kérlek a függvényed belsejét, lehet hogy használja az r25-öt stack-elés nélkül?!
Úgy néz ki igazad van. Használja az r25-öt, de ahogy látom nincs push az r25 birizgatása előtt.
(Bevallom őszintén hogy sajnos az AVRnél kezdő vagyok assemblyben, annó a PIC16-okat csak assemblyben programoztam) Szóval a nem optimalizáltnál (-O0) én azt látom hogy ugyan használja az R25-öt, de előtte elmenti valahova és visszatérés előtt visszaállítja az értékét
Akkor az -Os optimalizálásnál én azt látom hogy itt se pusholja az r25-öt, de nem is menti le sehova. Beletölt értéket, ÉSeli magával, de nem állítja vissza végül
Pff. Ez inkább fordító bug szerintem mint felhasználói hiba. De legalább mostmár látod / látjuk akkor a probléma tényleges, igazi okát.
Hát, akkor ezzel sajnos nem sokat lehet tenni mint együtt élni vele, és erre gondolni amikor makacskodik.
Vagy szépen megfogalmazni egy emailt és írni a fejlesztőknek. Amúgy én nagyon tudom utálni az ilyen dolgokat, amikor az ember csinálna valamit de attól kell félnie hogy mikor esik be egy olyan dolog ami egyszerűnek tűnik de nem tud túllépni rajta mert olyan hiba jelentkezik. Amúgy ilyenkor oké hogy nyílt forráskód ezek előfordulhatnak, de vajon egy fizetős imagecraft, codevision vagy egyéb fejlesztőkörnyezetnél előfordulhatnak-e ilyen hibák?
C nyelven van olyan parancs, mint assembler-ben a nop-nak felel meg?
Idézet: „de vajon egy fizetős imagecraft, codevision vagy egyéb fejlesztőkörnyezetnél előfordulhatnak-e ilyen hibák?” Pár sorral feljebb, magad adtad meg erre a választ Idézet: „Hozzászoktam a rövid bascomos pályafutásom alatt hogy mindig kel egy másik útnak lennie , ott elég sokszor előfordult hogy egyszerű dolog nem ment...”
nekem notebookon Win 7 RC1 van. Azzal szerintetek megy a programozó?
|
Bejelentkezés
Hirdetés |