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
Üdv!
Elnézést ez nem igazán AVR kérdés lesz, de hirtelen nem tudok jobb topikot. A WinAVRben található Make file-al kapcsolatban lenne egy kérdésem. Azt szerettem volna elérni, hogy minden fordítás során frissüljön egy version.h file, ami a fordítás dátumát és idejét tartalmazza. Ez sikerült is a kódban szereplő linkek segítségével, ill. egy új date.exe megírásával.
A kóddal nincs semmi baj, működik, egy apró kellemetlenség/szépséghibát leszámítva. Ha WinAVR-ben ha a (fel)programozásra kattintok (Tools/Program), a Make file akkor is lefuttatja és egy új version.h filet generál. A kérdés: A Makefile melyik részébe/hogyan kellene a "parancsomat" beilleszteni, hogy csak build során fusson le? (már ha lehet ilyet csinálni)
Nem ismerem a WinAVR-t, de nézd meg, hogy tudsz-e egyedi "target"-ek futtatni benne. Ha igen, hozz létre egyet, ami frissíti a version.h-t, míg a normál build békén hagyja.
Ha használsz valamilyen verziókövető rendszert, akkor viszont van egy sokkal jobb megoldás. Pl. git esetén simán ki lehet nyerni az utolsó commit adatait és abból generálni a version.h-t. Így teljesen mindegy milyen számítógépről, illetve mikor fordítod a programot, amíg nem tettél hozzá új commit-ot, addig ugyanazt a verzió kódot kapod. pl.:
Kimenet:
A hozzászólás módosítva: Júl 12, 2021
Köszönöm az iránymutatást!
A Make File-al kapcsolatban nincs sok rutinom, így eltartott egy ideig mire meglett.
Most már teljes mértékben úgy működik ahogy elképzeltem.
a 12-es sorban nem inkább _VERSION_H_ ?
Dede, bocs elírás.
"Azt szerettem volna elérni, hogy minden fordítás során frissüljön egy version.h file, ami a fordítás dátumát és idejét tartalmazza."
Szerintem jobb megoldás, ha a fordítónak paraméterként adod át include file helyett, mert így elkerülöd a version.h generálása miatti újra fordítást, pl.: CFLAGS+=" -DVERSION_SHORT=$(VERSION_SHORT)" vagy CFLAGS="$(CFLAGS) -DVERSION_SHORT=$(VERSION_SHORT)" A "-D<kulcs>=<ertek>" ugyan az, mintha file-ban lenne a "#define <kulcs> <ertek>".
Üdv!
A CFLAGS-et lehet rosszul használom, mivel nekem nem csinál semmit. Legalábbis nem találok változást. Lehet félreérthető voltam, de én csak a flash-elés/felprogramozás során akartam elkerülni, az újrafordítást. Ezt a lentebbi hozzászólásomban sikerült is megoldanom. Most már csak a make/build során generálódik újra (frissül) a version.h file.
Sziasztok!
Tudna valaki segíteni? Egy projectet szeretnék összehozni DIGISPARK board al (Attiny85). Nem foglalkoztam még AVR el \ arduino val csak PIC el. A problémám az, hogy telepítettem az IDE t 1.8.xx , a megfelelő könyvtárat, az AVRDUDE is feltelepítésre került. De nem tudodom feltölteni a DIGISPARK ra a programot mert time out al errort jelez. Tehát elindítom a feltöltést, kéri a board ot, beteszem az USB be de nem történik semmi. A Board on csak egy piros LED villog gyorsan, más semmi... Mi lehet a gond?
Lehet, butaságra emlékszem, de nekem le kellett szednem USB drivert, mert ütköztek. (talán FTDI volt, ami beköszönt). (bocs, régen volt, azóta kidobáltam a kis vackokat)
Üdv. Segítség vagy ötlet kéne.
Adott egy Atmega2561 amin lóg egy soros AD ami figyel egy ADXL gyorsulásmérőt. Az rx-tx vonal közvetlenül kapcsolódik egy BTM-192 Bluetooth modulra, összeházasodik egy telefonnal, ahol fut a kiértékelő program. A mérés folyamán egy kalapács ráüt a készülékre, ez az ütés indítja az AD figyelését, durván 1000 adatot lement, majd elküldi a telefonnak a mért értékeket, az abban futó program aztán feldolgozza. Eddig remélem tiszta. A hibajelenség a következő: 30-40 db. működő készülékből néhány pár órás mérés után úgy dönt, hogy nem működik tovább, leszakadozik a Blue kapcsolat, oszt jónapot. Készülék egy darabig még működik, de sikerült full kiütni, nem ad viszontválaszt. Program újratöltése nem segített. Előszedtem egy saját kreálmányú tesztprogramomat, feltöltöttem azt, azonnal hibátlanul működött, nem tudom leszakadásra, hibára bírni. Érdekesség most jön, visszatöltve a mérőprogit, az is hibátlanul fut. Kérdés a következő: Létezik valami olyan beállítás a nyomorult processzorban ami valamiért (bármiért) felülíródik, túlcsordul, akármi, etc... futás közben és problémát okoz? E-Eprom látszólag nincs használva, üres ha kiolvasom. A program működéséről nincs infóm, más írja, de folyamatosan abba futottam bele, hogy nem működött, és zsigerből az elektronikára fogták. (Amíg megtaláltam, mivel tudom bizonyítani, hogy a progi a hibás, utána csend lett) Új programozó újraírta, ezzel is vannak, voltak gondok, de végre megtalálták, melyik változót kell állítani és mire. Fuse bitek nagyjából alapon, kvarc 7,3xxxMHz, akkus táplálás. Hol keresgéljek?
Üdv!
Ismét a "szokásos" gondom jelentkezett a ATMega1284P-n a Timer2-vel Async (RTC 32768Hz) módban. A szokásos gond alatt azt értem, hogy egy ideig minden jól megy (most kb 1,5évig) aztán egy nap az oszcilláció megszűnik vagy jelenleg piszkosul lelassul. Annyira nem lassul le, hogy a "felügyelő" kód ezt kiszúrja... A kód:
Miközben ezt írom egy apró módosítással az if(rtc_clk_pulse_cntr.l[0] >= 0x1000)-ben -> if(rtc_clk_pulse_cntr.l[0] >= 0x0200)-re már észleli, hogy baj van és külső RTC-ből kiolvassa az aktuális időt. Szóval nem software gondom van hanem hardware. Jelenleg egy 6 vagy 9pF-os kristály (bocsánat nem emlékszem melyiket raktam annó bele) van a lábakhoz közel, kondik nélkül, igaz nincs forrasztva ("prototípus PCB"). A mellékelt képen a PCB kialakítása látható. Hogyan kell a kristályt holtbiztosan rákötni? A hozzászólás módosítva: Nov 6, 2021
Szia!
Igazából leírtad az összes problémát. Idézet: „Jelenleg egy 6pF-os kristály van a lábakhoz közel, kondik nélkül, igaz nincs forrasztva.” A kristály mindkét lábára tegyél a föld felé 10-15pF kondikat, illetve a kristályt be kell forrasztani. Szórt kapacitásból van csak így jelenleg egy pár pF-os illesztésed, de ahhoz hogy megfelelő amplitúdót elérd, szükséges a kristályt megfelelően bekötni. A beforrasztásra is szükség van akkor is, ha az áramkör mechanikailag "nyugalomban van".
Köszönöm a választ.
A 10-15pF-os értéket, hogy kapjuk? Az adatlapon és a neten talált C(stray) "becsült" értékekkel nem tudtam mit kezdeni. A teszt nyákra nem tudom és nem is szeretném beforrasztani. Ezért is vannak hozzá ilyen kis modulok (kép, csak minta). Egy ilyennel oldottam most meg és jelenleg úgy néz ki, hogy megy. Ez elfogadható megoldása a forrasztásnak? Persze azt tudom, hogy így megint más C(stary) kapacitások jelennek meg, mintha csak oda lenne forrasztva.
Ha benned felmerült a kérdés, akkor valószínűleg másban is, úgyhogy azt hiszem ez lesz a következő egyperces cikknek a témája. Próbálom ezért akkor itt nagyon röviden leírni.
A prociban az oszcillátor belül egy CMOS inverter, ami 180°-os fázisfordítást hoz létre. A kristály egy soros RLC és párhuzamos C tagból áll valójában, és a CMOS inverterre kapcsolt másik hálózat feladata a további 180°-os fázisfordítás. Ahhoz hogy az oszcilláció stabilan üzemeljen a körben meg kell lennie a 360° fázistolásnak. A föld és a kristály kivezetései közé helyezett kondenzátorok beszabályozzák a külső kört. A kristály nem valósít meg 180°-os fázisfordítást. Mondjuk példának csak 160°-ot. A maradék 20° fázistolást úgy kell létrehozni, hogy egy kvázi RC tagot képzel a procin belül lévő CMOS kapu kimeneti impedanciája (pl. 10 Ohm), és a föld felé kötött kondenzátorra (erre a pontra kapcsolódik a kristály egyik lába is). Majd a jövőbeni cikkbe készítek egy szemléltető ábrát. Lényegét tekintve tehát a procin belül lévő CMOS inverter létrehoz egy 180°-os fázisfordítást, és neked a feladatod kívül megoldani a maradék 180° fázisfordítást, ezt pedig a kristály és a CMOS ki/bemenetek helyes impedancia illesztésével (fázis finomhangolással) teszed meg. Pontosan ki lehet számolni a szükséges kapacitásokat (erről akkor majd később), egy gyakorlati értéket írtam fentebb, ami az "átlagos" kristály karakterisztika és az "átlagos" CMOS inverter paraméterei alapján egy kiindulópont / sok esetben gyakorlati oldalról elégséges. A hozzászólás módosítva: Nov 7, 2021
Fordított már valaki az "új" tinyAVR 2 family AVR-ekre avr-gcc-vel programot? Pl: ATTINY424 https://www.microchip.com/en-us/product/ATtiny424 Vagy bármi mással eszközzel fordítva a programot használt már valaki ilyen csipet?
(Azért az avr-gcc érdekelne főleg, mert megrögzött Linux+szabad szoftver felhasználó vagyok.) Most hogy a Hestore-on "Átlagosnál hosszabb beérkezési idő jelezve a termékre." van jelezve minden ATTiny termékre, újra felmerült bennem, hogy átállok a tinyAVR2 sorozatú csipekre. Az újakból elvileg van ahol van raktáron, és már régóta úgy tűnt az árazásból, hogy a gyártó ezeket az újakat akarná nyomni, ugyanaz a funkcionalitás sokkal olcsóbb ezekben, mint a "régi" csipekben. Ezek újratervezett csipek, a perifériák mások bennük, mint a "régieken", ezért ezt újra kell tanulni. Persze az is felmerült benne, hogy ha már upgradelek, akkor 32 bites vezérlőre kellene előrelépni, de valamiért nagyon kedvesek a szívemnek a 8 bitesek, úgyhogy meg akarom tanulni az új generációt is. A felprogramozásuk a dokumentáció alapján nem lesz nehéz, úgyhogy ha a fordítást sikerülne megoldani, akkor rendelnék pár ilyen csipet hogy kipróbáljam őket.
Megpróbálhatod, de én nem javaslom. Egyik opció az Mplab X Linuxra. Az Atmel Studio-hoz képest borzasztó, de az UPDI programozó (pl.Snap) frissítés miatt fel kell telepítened. Én Codebloks-ot használtam fordításra, Linux AVR toolchain itt és device packs itt. kicsomagolva. A Studo-ból kinéztem a gcc beállításokat a csomagok használatához.
Később vettem egy ST NucleoG031-et. Felüdülés a használata a CubeMx+Ide-vel az új AVR-ekhez képest, mint időben, mint idegbaj begyűjtésben Te tudod, saját vélemény.
Azért egészítem ki, hogy ne legyen félreérthető: az MplabX- ben is használhatod a letöltött toolchain-t -itt már nem kell a pack-ot letölteni, mert adott. Itt kell beállítani:
Köszönöm! A leírásod alapján leszedtem a csomagot, és már sikerült is fordítanom egy binárist.
A .atpack fájlt leszedtem, kicsomagoltam (a kiterjesztése ellenére sima zip fájl, az unzip parancs kicsomagolta simán), és csak be kellett hivatkozni a parancssorban. Az avr-gcc-ből úgy tűnik, hogy a disztróm által szállított verzió is jó lesz, azt nem kell letölteni az Atmeltől. Persze még kiderülhet, hogy az eredmény esetleg nem működik, akkor majd leszedem és azzal is kipróbálom. A működő parancssor:
Így akkor fogok rendelni ilyen processzort, ha kipróbáltam beszámolok róla.
Sziasztok! Bocs ,hogy ide írom.
Utánépítenék egy projektet.Bővebben: https://youtu.be/x1jnJJqWmE8 Az a probléma ,hogy az arduino idében a program neltöltéskot nem fordul le .A használt avr ic atmega 328p. Következő a hibaüzenet: Display.cpp fájl (PROGRAM prog_uint8_t displayFont [38] segítségeteket kérném. a filok: https://github.com/johannes85/numitron-watch A hozzászólás módosítva: Nov 27, 2021
Azért nem fordul le, mert a program régi (angolul deprecated) nyelvi elemeket használ, amiket azóta kivezettek. Találkoztam már ezzel a problémával, kb 7 éve kellett javítanom a saját programjaimat emiatt, de a részletekre nem teljesen emlékszem. A lényeg, hogy a prog_uint8_t típust eltörölték. Ha megnézed ezt a kódot 7 éve tette fel a készítője, még azt a régi verzióját használta az avr-gcc-nek akkor, amiben még benne volt ez a konstrukció.
Itt tárgyalják ki ez a problémát, és az első és második válasz is helyes szerintem: https://stackoverflow.com/questions/57023846/prog-uint8-t-does-not-...no-ide Nem próbáltam ki, de szerintem a sor lecserélése erre segít:
helyett legyen:
Arról van szó egyébként, hogy ezt a 38 elemű tömböt program memóriába teszi a program, ezáltal a RAM-ból megspórol ennyi helyet. Csak olvasható adatok esetén ez egy gyakori trükk, amit szoktunk használni, hasznos, csak egy kicsit körülményesebb a programozása. Ezzel a sorral olvassa ki:
A körülményesség abból adódik, hogy ezek Harvard architektúrájú processzorok, a program memória nem érhető el sima címzéssel, és ez a C nyelv számára idegen dolog, ezért nincsen rá nyelvi szintű konstrukció. A hozzászólás módosítva: Nov 27, 2021
Most lehet hülyeséget kérdezek .Ha letölteném azt a softvert amivel a srác irta fel tudnám tölteni az ic re a programot?
Még a const szócska hiányzik a sor elejéről:
Itt már a cél kapujában állsz, innen már ne fordulj vissza! Az angol megy? Kiírja a program a hibát angolul, és erre rákeresve is megadja a net is a megoldást, ezzel a keresővel: "variable must be const in order to be put into read only section" Elvileg lehetséges a régi programot leszedni és azzal működtetni. Az Arduino IDE az összes függőséggel együtt van csomagolva, tehát annak egy régi verziója elvileg működhet. De általában programok régi verzióit üzemben tartani macerás.
Sajnos az angol nem nagyon megy..
Jó messze vagyok még a kaputól...
Mindig kitalál ujjabb hibát
Az ablak alsó felét, ahol a hibaüzenet van vedd nagyobbra és görgesd feljebb. Ha több is van, akkor általában az első hibaüzenettel érdemes foglalkozni először, mert sokszor abból következik a többi is.
Ha ki tudod másolni az ablakból, akkor szövegként is megoszthatod a hibaüzenetet. Még ha nem tudsz angolul, akkor is javasolnám, hogy online fordítóval, illetve szó szerinti kereséssel próbálgasd hátha meg tudod találni a hiba okát és a megoldást. Apránként így meg lehet tanulni a nyelv szakmai részét. De ha látható lesz az üzenet, akkor segítek ha tudok. Németül tudsz egyébként - mivel az eredeti projektet németül adta elő a linkelt videó, azért kérdezem?
Sziasztok!
Atmega 644-en akartan volna beállítani a watch dogot. Nem müködött. De most hogy kitöröltem a watch dogot, nem mükodik semmi. Programozni, olvasni tudok mindent. Valakinwk valami ötlete esetleg?
Nem derül ki pontosan, hogy mit csináltál és mi az aminek működni kellene, de nem működik.
Ha a programozó tud csatlakozni, akkor felül tudod írni a fuse biteket is és a programot is. Ezt megcsinálod és akkor olyan lesz mintha lenne egy új Atmega644-ed. Mi a probléma? A FUSE biteket ki is lehet olvasni a programozóval, a probléma megértését kezdheted ezzel, hogy kiolvasod, és megnézegeted az adatlappal összevetve, hogy tulajdonképpen mit is állítottál be.
Sziasztok!
Off topic, de mivel ARM-al függ össze a szakdogám gondoltam itt kérdezem. Tudtok bármi elfogadható magyar nevet a heap-re? Mert ha leírom, hogy kupac/stb... nem lesz egyértelmű miről beszélek, de ahol lehet ragaszkodnék a magyar elnevezéshez nem akarom, hogy kötekedjenek. |
Bejelentkezés
Hirdetés |