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
Köszi!
Akkor amit rendeltem Arduino nem sokra jó. Mit ajánlasz, mivel kellene kezdeni? Mivel lehetne kísérletezni, mivel próbálkozzak? Milyen programozót kellene venni, s milyen AVR chippel kellene kezdeni? Illetve milyen programmal lehetne nekiállni az alapoktól programozni, s kitapasztalni, hogy mit is csinálok?
A 6-os nem fogja felismerni, bármit is csinálsz. Csak a 4-es fogja látni.
A win eszközkezelőben (devmgmt.msc) nézd meg először a portoknál, ha sárga felkiáltójel van rajta akkor a driver nem jó, telepíteni kell. Én saját építésű stk500 és avrisp-mkII klónt használok, eddig mindkettő bevált. Win8 alatt is megy.
Ha már megrendelted, ne tedd félre, lehet vele játszani. Aztán bátrabban indulhatsz neki
az "igazi" AVR-ezésnek.
Sziasztok!
Az alábbi probléma megoldásához kérem a segítségeteket. Adott egy hétszegmenses kijelző, amelyet multiplex vezérléssel működtetek. Időnként (ha jön egy megszakítás) ki kell lénem a kijelzési ciklusból, hogy lekezeljem a megszakítást. Sajnos a megszakítás nem tud kellően rövid lenni, mert be kell olvasnom egy értéket. A megszakítás idejére a kijelző "megtorpan", ekkor az egyik digit értéke fényesebb a többinél. Tehát ronda a kijelzés. A multiplex vezérlés miatt muszáj a kijelzési ciklusidőt tartanom, de akkor mikor és hogyan olvassam be az értéket a portról? Ötlet?
Feltételezem hogy a kijelzőt a "főprogram" szolgálja ki, a beolvasást pedig egy megszakítás.
Miért nem bízod rá a kijelző kezelést is egy megszakításra? Mondjuk időzítőre...
Van egy változóm (tömb), amelynek értékét a kijelzőre írom.
Az időzítő 250ms elteltével meghív egy függvényt, amely a meghíváskor beolvassa a soros porton lévő aktuális adatot (10 karaktert) és feltölti a tömböt az aktuális értékkel. A feltöltés után folytatódik a kijelzés. Arra gondolsz, hogy időzítővel léptessem a kijelzőt?
a soros portot és a tömb feltöltését kezelheted főprogramból, a kijelző léptetéseit megszakításból.
Nem tudom mi a bajod az arduino-val, azon is csak egy sima bootloaderrel ellátott atmega chip van. Nem kötelező a programot a hozzávaló fejlesztőeszközzel készíteni, ugyanúgy használhatod hozzá a normál AVR vagy ATMEL studiot. A fejlesztés idejére simán köré építhető a környezet, a végleges áramkörbe meg csak át kell dugni a chipet (persze csak ha nem SMD a cucc).
Ez így konkrétan nem igaz.
Az Arduino pazarolja az AVR memóriáját rendesen, de iszonyú kényelmes. Van rá egy rakás könyvtár és irodalom, simán illeszthető vele minden. Én átszoktam Arduinora. Összeütöm a szoftvert gyorsan, a végső megoldás meg atmega328p lesz. Kifizeted a drágább ic-t, de gyorsabban megvagy.
Kb. erre gondoltam egész végig. Kényelmes, de LED-ek villogtatásához és nyomógombozáshoz
kicsit drága. Tanuláshoz biztos nem ezt választanám.
Köszi, megpróbálom a javaslatod.
üdv. Vfr72.
Drága????
Az idődet is számold, mivel az Arduino az kb. azonnal működik, míg ha Te (kezdőként) rakod össze, a szívások több 10 órát is elvihetnek. Kezdőként, ha csak küzdés és kudarc ér - soha nem lépsz tovább. Az induláshoz az Arduino teljesen jó, mert sokat megtanulsz a használat során. És utána _azonos_ hardware-n mehet tovább pascal, C vagy Basic fele is... És az Arduino nem csak nyomógombozásra jó. Ardupilot és egy jópár nevesített *duino projakt sokkal gyorsabban kész, mintha megírogatnád... És az Arduinonak azért egész használható irodalma és közössége van...
Pontosan, amikor érdekelt, hogy hogy megy a TV-m infrája, nem kezdtem leimplementálni a NEC és a többi protokolt. Betöltöttem a lib-et és megnéztem. A lib automatikusan felismerte a protokolt és láttam a kódját. A megértést a kész lib egyáltalán nem gátolja.
De mondjuk az LCD illesztőkről is beszélhetünk, melyek programozása nem piskóta, de kész libekkel simán viszed. És persze az SPI kezelése, vagy az ADC is tök egyszerű. Emellett írhatsz könyvtárakat, amiket későbbi projektjeid folyamán felhasználhatsz. Van egy szint, amihez kevés az Arduino, de azt a szintet kezdőként elég sokára fogja elérni.
A neten keresgélve mindenhez találsz kész megoldást.
PS/2 billentyűzet, egér illesztés, sőt még a C64 1541-es lemezét is simán illesztheted. Kezdőként elég arra koncentrálni, amit csinálni akarsz és megkeresni a kész könyvtárakat hozzá.
Szóval annyit csinálsz, hogy pl egy ilyen Arduinó boardba beletöltöd a programot, majd kiveszed a foglalatból az ICt és átteszed az általad csinált áramkörbe?
Tényleg, ha a 328P tönkremenne, akkor csak kiveszem, beleteszem az újat, és megy?
Miután rátöltötted a bootloadert és beállítottad a FUSE biteket, igen.
Vannak arduino-k amikből nehézkes kivenni, mert az IC SMD.
Ha DIP-es Arduino-t vettél, azzal kiszeded az IC-t és másikat raksz helyette bootloaderrel, fuse bitekkel. Ennyi. Mindaddig, amíg Arduino alatt a VCC-t nem piszkálod, addig jó eséllyel csak az AVR-t tudod tönkretenni. VCC-vel már képes vagy kiégetni minden IC-t az Arduino-n, sőt az alaplapod USB portját is. Elég mondjuk 30V-ot rátenned az 5V-ra és game over. De rövidrezárástól is kiéghet némelyik kínai darab. Kiadsz az egyik pinen logikai magasat, abból 40 mA kinyerhető, így nem kell piszkálnod a VCC-t. Ez a legtöbb esetben elegendő. Ha ennél több kell, akkor külső táp. A hozzászólás módosítva: Feb 3, 2014
Idézet: „Ha DIP-es Arduino-t vettél, azzal kiszeded az IC-t és másikat raksz helyette bootloaderrel, fuse bitekkel. Ennyi.” Azt leírnád, hogy a bootloadert és a fuse biteket hogyan lehet rátölteni, és a fuse biteket hogyan tudom beállítani? Bocs, nagyon nem értek hozzá, de lelkes vagyok, s szeretném tudni. ![]()
Pénteken megjött az arduino UNO-m, kipróbáltam, 0-13-ig digitális kimenetet állítottam be, és megnéztem LEDdel, mindet bekapcsoltam mint futófény, jó volt ment.
Gondoltam OK, kipróbálom a kijelzőt is. De itt jött a fekete leves. Nem ment. Elöször így hibássan kötöttem be, és ráengedtem ezt a programkódot:
Majd rájöttem, hogy hülyeséget csináltam, s átkötöttem ez szerint ami a fenti programkódhoz kell.. De persze megint nem ment.... Fel is adtam, majd ma elővettem, hátha megy, de nem jó. Akkor a 0-13-as digitális lábakat beállítottam kimenetté, tettem rájuk LED-et, és a következő furcsa jelenségre lettem figyelmes. A 4,5,6 lábaknál a LED halványan világított, a többi fényesen. Szóval szerintem valamit tönkretettem. Ok, gondoltam akkor a programrészben a 4,5,6 lábakat átírtam a 1,2,3-ra, de úgy sem megy. Így működnie kellene? Vagy sikerült a kijelzőt és az arduinot is tönkretennem? Vagy más lábkiosztással kellene próbálkoznom? A kijelzőn csak hátérvilágítás van, semi, a kontraszt sem változik. Szóval a kijelzőt tettem tönkre, vagy az Arduinot, vagy mindkettőt? Hogyan lehetne letesztelni? A hozzászólás módosítva: Feb 3, 2014
Az elvi lehetőségekről írtam. Nekem van otthon ISP programozóm, így semmiből sem áll kivenni az IC-t, berakni egy másikat és a 6-os tüskesorra meg rárakni a programozót.
Ha az Arduino könyvtárába bemész, láthatod, hogy a hardware/arduino/boards.txt alatt melyik alappanelhez milyen fuse bitek és bootloader tartozik.
Értelemszerűen ha UNO-d van, akkor az optiboot_atmega328.hex-et rakod fel, amit a harware/arduino/bootloaders/optiboot alatt találsz meg. Ha a neten keresgélsz, rájössz, hogy mindezt programozó nélkül is meg lehet csinálni, ide-oda dugdosol kondenzátorokat, vagy ellenállásokat, de ezt még sosem próbáltam. Minthogy van értelmes ISP programozóm, így dugdossa a kondenzátorokat az, akinek két anyja van. ![]() Ha valaki életében már csinált ilyet, akkor az elmesélheti a részleteket.
Egy LCD-t nehéz beizzítani, legalább annyira, amennyire egy Arduino-t tönkretenni.
Az Arduino lábait kötheted +5V-ra, vagy GND-re direkte, attól még nem megy tönkre. Minthogy más nincs, így kizárólag külső táppal tudod agyonverni. Az LCD az más, mert mondjuk fordítva is kezdheted a számozást. Meg felcserélheted a +5V-ot és a GND-t, kicsit több játék van az agyonverésre. Első kérdés: a háttérvilágítás megy-e (15-16-os lábon R1 meg kakaó)? Ha ez megy rögtön tudod, hogy melyik az egyenes irány. Ehhez nem kell semmi más, kizárólag ezt a két lábat bekötnöd. Értelemszerűen úgy lett kitalálva, hogy ha fordítva kötöd be, még nem döglik meg. (16-1, 15-2 lábak, mind VCC és GND) Ha megvan a háttérvilágítás, akkor kötheted össze a többi lábat. A kontraszt beállítása fontos, ha rosszul áll, akkor nem látsz semmit. Én amolyan totál brutál módon 220-ohmmal lekötöttem a földre. Elég hányadék kinézete lett tőle, de legalább sikerült olvasni. Ha a +5V-ra kötöttem volna értelemszerűen semmit sem láttam volna. Talán kezdetben érdemes megtartani az eredeti kiosztást a programban.
Ez annyiból jobb, hogy a az adatbitek a PORTD-n vannak és meg nem mondom, hogy képes-e a lib adatokat átküldeni úgy, hogy össze-vissza portokon van. A 0,1-es pineket hagyd ki a játékból, mert azok az UART lábak. (Serial) A hozzászólás módosítva: Feb 3, 2014
Értem, de akkor az a pár láb miért halványabb vajon?
Nem használtam külső tápot, ugyhogy nem mehetett elvileg tönkre. A háttérvilágítás megy.A kontrasztot lekötöm a földre most, s megnézem mi az eredménye, pill megnézem, s megírom.
A halványan világít sztori már velem is előfordult.
Elfelejtettem outputra kapcsolni a portot (pinMode), az a durva, hogy az AVR belső felhúzóellenállása képes látható fényt produkálni. Azt hiszed, hogy output, csak gyengén világít, közben az input felhúzóellenállását kapcsolgatod ki-be. ![]() A hozzászólás módosítva: Feb 4, 2014
Igazad van, így szépen erősen világít.
![]()
A kontraszt megjött így.
![]() Amúgy mivel lehet normálisan beállítani, hogy a potit kihagyom? A kiíratást holnap megnézem, s bekötöm rendesen az egészet. 1 soron volt kép, azaz minden pixel sötét volt, de a másik az semmi....
Ha inicializálod, akkor kétsoros lesz. Ha ki is írsz rá valamit, akkor a kockák mögött megjelennek a betűk.
Poti nélkül persze szépségversenyre ne menj vele, de nálam a kék LCD olvasható, csak borzasztó ronda.
Jelenleg szóközöket látsz a felső sorban, alsó sor ki van kapcsolva. A betűid ezekben a kockákban lesznek.
A fekete kocka: a kijelző kap tápot és van kontraszt.
Az I2C LCD könyvtárban a paraméterek az LCD és a PCF8574 chip közti beállítást/bekötést adják meg. Ezt vagy ki kell mérni, vagy a gyártói mintakódot kell használni (rajz alapján beállítani). Eddig 5 féle bekötéssel találkoztam. De itt még az I2C illesztőIC címét is meg kell tudni, mert ebből 8-8 féle lehet (PCF8574 vagy 8574A chip). A vezérlő bekötése az SCL/SDA (A4/A5) lábakra mehet csak, máshova NEM! Hogy ne kelljen I2C címet keresgélni:
A hozzászólás módosítva: Feb 4, 2014
Poti helyett: két fix ellenállással helyettesíted
![]() |
Bejelentkezés
Hirdetés |