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
Ez a program egy "software debounce button". Összeraktam, működik az alábbiak szerint: a PINB1 levő mikrokapcsoló nyomkodásával egyszer a PINB0-on másszor a PINB2-őn lévő led gyullad fel. Hogyan kell értelmezni ezt a programot? Néhány napja kezdtem csak el programozni AVR-t. Mit jelent a pressed/released confidence level és miért van rá szükség? (maszkolással és késleltetéssel nem lehetne megoldani a pergésmentesítést?/vagy ennél egyszerűbben?/
Ez a késleltetés egy tovább fejlesztet formája.
A bemeneten minden változó állapot észlelésétől elszámol 500-ig, utána cselekszik. De ha közben történik 1 változás a bemeneten, akkor elölről kezdi a számolást.
Sziasztok!
Szeretnék tőletek tanácsot kérni. Építgetek egy digitális órát AVR-el. Közös anódú kijelzőt használok, az anódokra a tápfeszt NPN tranzisztoron keresztül kapcsolom. A kijelző típusa: LN5624-11 Az őt meghajtó IC SN74LS47. Ebbe csatlakoznak a katódok, katódonként 10 Ohm-os ellenállással. Ez a kód üzemel az atmega8-ban (16Mhz, 22pF):
Az a baj, hogy még így is gyenge a fényerő. Nappal alig látni a számokat. Ha lejjebb veszem a frekvenciát, azaz a delay-t a digitek között akkor valamivel erősebb ugyan, viszont így előjön a vibrálás. Kijelzőt kellene cserélni? Vagy van valami szoftveres trükk erre? (Továbbá, azért csak 10 Ohm, mert nagyobb ellenállással megint azt értem el, hogy a fényerő lecsökken... ) Köszi szépen A hozzászólás módosítva: Ápr 25, 2014
PNP-re nem gondoltál?
Az Ls változat kb. fele ampert tud. De hogy működik egy közös anódos kijelző egy közös katódra tervezett ic-vel, az avr megfordítja?
The '46A, '47A, and 'LS47 feature active-low outputs designed for driving, common-anode LEDs or incandescent indicators directly.
P-s tranyóval nem próbáltam még.
Az adatlapja szerint ez nem egy tul fenyes kijelzo..
Ettol fuggetlenul, normalisan 20mA kellene egy-egy szegmensnek. Ha 4-es multiplexelest hasznlasz, akkor ennek a negyszerese kell, hogy ugyanazt a fenyerot kapd. Tehat 80mA-es szegmensmeghajto kellene. A 74LS47 maximalis terhelhetosege 24mA. Szoval ez igy nem lesz jo. A sima 7447 is csak 40mA. Tobb megoldas is van a dologra. 1. hagyod benne a 74LS47-et, de minden kimenete utan teszel egy PNP tranzisztort (BC212) emitterkoveto kapcsolasban. (kollektrol foldon, bazis a 7447 kimeneten, emitter a kijelzo fele) 2. a 74LS74 helyett beteszel egy TPIC6C595 tipusu IC-t, ami egy 8 bites shift regiszter, aminek a kimenetei 100mA-ig terhelhetoek. Ezzel a megoldassal persze a programot modositani kell jelentosen. Viszont ugy lehetoseged van barmilyen karakter kiirasara is, pl. kotojel, vagy alahuzas, nehany betu. Mindket esetben ki kell pontosan szamolni a LED-ek elotet ellenallasat, ami fugg a + tap oldali megoldastol es a valasztott meghajtastol is. Ha folul NPN tranzisztor van, akkor a 22 Ohm nagyjabol 80mA-t fog kiadni. Viszont valamit tudnod kell. Nem minden LED-nek lesz a fenyereje negyszeres ha negyszeres aramot folyatsz at rajta. Vagy 20 eve talalkoztam egy olyannal, hogy egy piros Kingbright kijelzo ilyen multiplexelt meghajtasnal piros helyett halvany narancssarga volt. Ugyanabbol a kijelzobol a zold szinu tokeletesen mukodott a kapcsolasban. Mivel a te kijelzod adatlapja nem adja meg, hogy impulzus uzemben mennyi a maximalis aram, igy csak proba szerencse alapon tudhatod meg. Idézet: „Nem veletlenul szoktam en uzem kozben nezni, hogy egy programban a processzek mennyi stack-et hasznalnak.” Ezt hol/hogyan lehet nézegetni? Szimuláció, debugger? Sőt, mondhatni féltékenyen tekintek az ilyen témákra, mert egy klasszikus hobbista AVR Studio 4 + WinAVR kombó esetét véve elvileg a stack fogalom ismeretének hiányában is tökéletesen boldogulnék. Ha nem mániánk a végtelen rekurzió és nem atomerőmű kontrollert építünk...
Most vegyük azt a mindennapi esetet, hogy el akarod adni a Projected.
És számit a bekerülési költség is! Akkor a legkisebb olcsóbb Megát kel választanod, amibe még bele tudod gyömöszölni a programod. Nincsenek 1000 BYTEk a heap és a stack közt. Van Pár tucat adatod + pár tucat függvényhívásod, pár megszakításod. És nem figyelsz oda a változók helyfoglalására + a verem használatra? E miatt bent marad, valami rejtet búg, ami a használattól függően majd 1 hét múlva esik ki a szekrényből. Majd visszadobják az egészet, mert nem biztonságos! + különben is a Kínai olcsóbban adja! Késsz csőd lesz az egész munkád!
A hobbista winavr-hez nem tudok hozzaszolni, en Linux-on fejlesztek, gcc-t hasznalok, es semmifele integralt fejlesztorendszert nem hasznalok. Csak egy editort (jEdit) es unix tool-okat mint a make, awk, sed, grep, meld es tarsai. Meg persze a gcc toolchain-t. A C libek es a multitask kernel sem gyariak, a batyam eloszeretettel ir ilyeneket minden processzorra, igy AVR-re is es ARM-re is azokat hasznalom. Ezek persze open source, free dolgok. A startup kodot es a linker script-eket is mindig magam irom, ugyhogy egyetlen byte gyari kod nem fut a munkaimban. Nalam a debug-olas altalaban ugy megy, hogy minden mikrokontrolleren van egy sorosvonal, amin keresztul a program tud kommunikalni, azon keresztul kuldok ki debug infokat, ha kell. Mondjuk egy 100 soros ATmega8 kodot nem nagyon szoktam debug-olni...
Szerintem a stack fogalmanak ismerete nelkul el sem lehetne kezdeni programozni. Fokepp nem mikrokontrollert. Persze boldogulni lehet, foleg hobbi szinten, de azert illik ismerni. A kerdeserde valaszolva en ezt ugy szoktam csinalni, hogy a processznek szant stack teruletet meg a processz inditasa elott feltoltom valami ismert mintazattal (pl. 0xe521), es az elobb emlitett debug sorosvonalon keresztul meg lehet neznni, hogy mennyit irt felul a stack hasznalat soran a kod. Mivel sokszor multitaskos rendszert hasznalok, igy tobb stack is van, mert minden processznek sajatja van, es altalaban van egy minitor vagy hivjuk debugger processznek, ami pont arra jo, hogy a sorosvonalon keresztul bekuldott parancsokat ertelmezi es valaszol ra. Na, ezek a parancsok kozott van olyan, ami a stack-et a 'másik' vegetol kezdve vegignezni, es megszamolja, hogy hany darab 0xe521 van benne, es ennek alapjan kiirja, hogy mennyi a hasznalt terulet. A hozzászólás módosítva: Ápr 27, 2014
Sziasztok!
Adott egy volatile char buf[50]=""; változó, amit ISR-ben használok a main-ben és: ezt kellene egy külön xy.c fájlban egy függvény visszatérési értékének visszaadni. Hogyan kell megoldani? Azt hiszem a függvényen belülre be lehet "hívni" lokális változónak. De csak így rémlik. Mi az utasítása?
Nem véletlenül kérdeztem hát, ez a színvonal otthoni barkácsolásra talán indokolatlanul profi, de iránymutatásnak tökéletes. Köszönöm!
Egyszerű szerintem, a portot bemenetnek programozod, a led a felhúzó ellenállás (esetleg rá is segíthetsz) ez után a gomb a test és a port közé kerül. Megnyomod a gombot, led kigyullad, processzor észreveszi a bemenet változást, kimenetét beállítja alacsonyra. a led úgy marad, míg szoftveresen ki nem kapcsolod.Még prell mentesíteni sem kell a gombot.
A hozzászólás módosítva: Ápr 29, 2014
Üdv, egy kis segítségre lenne szükségem. Adott egy Atmega8 a 24 lábával. 50db ledet kellene vezérelnem vele de ehhez kevés a láb. Gondoltam multiplexre de ahogy még meg tudnám oldani szoftveresen úgy is 15 lábat igényelnek a ledek. Sajnos nekem több lábra lenne még szükségem. Másik lehetőség amit meg tudnék oldani szoftveresen ahhoz hardveresen nem ismerek megoldást. 6 lábon azaz 6 biten lehetne 2es számrendszert használni így 63 kapcsolható kimenetet létre lehetne hozni. Remélem érthető amit akarok. Ehhez keresek egy IC-t vagy megoldást. Programozás téren kezdő vagyok de van segítségem. Válaszokat előre is köszönöm.
Ezt ismered?Bővebben: Link
Ez jónak tűnik, és mivel smd nem is foglal sok helyet, de még mindig minimum 6 db kell belőle. Ilyen sorbafűzhető 8nál több bites kellene. Találtam a CD4067-et de az a probléma hogy nincs smd-be és még csak nem is lehet sorbakötni tudtommal. Ha nem marad más akkor az általad javasoltat fogom használni.
A 74hc154-es kapható SMD-be is, sorba is fűzhető csak a demultiplexerek egyszerre egy kimenetet kapcsolnak kellene még utánuk rs tároló szóval megint csak jobb a shift regiszter végül is a lábak száma számít mindegy hány tokban van. A 74 HC 595 SMD 49ft áfával.
A hozzászólás módosítva: Ápr 29, 2014
A 74 HC 595-ből multiplex üzemben 2db kell a 64 Ledhez és 4 portot használ.
Sziasztok! Terveztem egy NYÁkot amin egy Attiny85 látna el egy apró feladatot. Az IC 2,3 as lábára potencióméter kerülne. Az egyik poti impulzus hosszát állítaná 5-30ms ig, a hármas lábon meg az impulzusok közötti szünet idejét lehetne 0.5 és 3mp között állítani. Az IC 6. lábán pedig az optó felé a kimenet. Megszeretnék kérni Valakit akinek van kedve és ideje, írja meg nekem a progit. Arduinós környezet is jó lenne. Mert ha bele kell módosítani akkor azt meg tudjam tenni. Előre is köszönöm.
Üdv: K.Gy A hozzászólás módosítva: Ápr 30, 2014
Sziasztok!
Vásároltam egy USB ASP V2-es programozót, de nem tudom a számítógéppel összehozni. Windows 7 op. rendszerem van, de nem ismeri fel (eszközkezelőben vagy meg sem jelenik, vagy "ismeretlen eszköz" jelenik meg). A drivert nem engedi feltenni, hogyan tudnám megoldani ezt a dolgot? Valakinek van/ volt hasonló ügye? Előre is köszönöm a választ!
Sziasztok.
Össze szeretnék kötni egy AVR-t a gépemmel. A V-USB működik Windows 8.1 64 bites változatával? Vagy inkább más megoldást javasoltok? (Lehetőleg USB-t szeretnék, de ha Ethernet, az még emészthető. Csak kis mennyiségű adatot küldenék a PC felé, nem szükséges kétirányú kommunikáció.)
Igen. Dobd ki a * a programozót:
- emulált USB, - nincs hozzá normális, aláír driver, - egyedi programozási nyelv, nem kompatibilis valóságban semmivel, csak önmagával. Ezzel szemben olcsó. Röviden: Olcsó, de *. Egy valódi USB-illesztős programozóval sokkal kevesebb szívással van eredményed. Pl. MKII, STK500 (USB illesztővel). Feltenni: - LibUSB létrehoz hozzá, - Win7 driverellenőrzés kikapcsol, - fekete kakas éjfélkor feláldoz teleholdnál, - a készítőtől kérdezz rá, melyik szoftverrel működik együtt Win7 alatt. A hozzászólás módosítva: Máj 2, 2014
USB-re:
- Arduino leonardo (valódi USB-s eszköz), - Emulált USB-s csak kis sebesességű átvitelre és sok szabadidővel és ősz hajszálhiányban szenvedőknek javasolt. Ethernet: - Arduino + EthWiz (W5100 illesztővel)
Sosem foglalkoztam még Arduinoval. A programozásuk hogyan működik? Úgy értem, hogy az elkészült programot hogyan töltöm a mikrokontrollerbe? Illetve működik rendesen 64 bites Windowszal? (A driver aláírásos marhaság az őrületbe kerget, mert a 8.1 újítása többek között az volt, hogy minden alkalommal, amikor használni akarom, akkor ki kell lőni a driver ellenőrzést...)
A hozzászólás módosítva: Máj 2, 2014
Igen, aláírt driver van hozzá. Arduinoban bootloader van, azon keresztül PC-ről van feltöltés.
Már nem engedte szerkeszteni.
Az nem lesz gond, hogy az Arduino külön tápegységről fog menni, és így dugom az USB-re? |
Bejelentkezés
Hirdetés |