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
Szia. Kerámia kondi bentvan. Egy 47mikros is. Még mindig süket mint a nagyágyú sajnos
![]()
Üdv,
valami kezdő lökést tudnátok adni hogyan lehet egy egyszerű menüt készíteni, pld óra beállításhoz.
Neked állapotgép kell! A fő programhurokban kell neked egy switch-case szerkezet, amiben egy állapotváltozó alapján választod ki a menüt. Használhatsz második állapotváltozót, pl. olyat ami egy időbeállító menüben megmondja hogy most éppen óra/perc/stb. közül mit állít be éppen. Az egyes menükben lekezeled az eseményeket(pl. nyomógomb), aminek hatására átlépsz egy másik menübe(csak az állapotváltozót kell módosítani!). Érdemes "belépő" állapotokat is gyártani, ami egyrészt a menü környezetét állítja be(kijelző módosítás, villogás be/kikapcsolása), és megvárja míg a nyomógombot felengeded. Nem árt ha interruptokat is használsz, hogy az események kezelése(pl. nyomógombok és pergésmentesítés) a "háttérben" fusson. Egy ilyen cucc nekem kb. fél napos munka, de megérteni és kitapasztalni sokkal tovább tart.
A haladók állapotátmeneti gráfot rajzolnak és mátrixokkal oldják meg a dolgot. Ez nagyon tömör "főprogramot" eredményez, könnyen módosítható belépőkkel és átmenetekkel, de a bővítés (új állapotokkal vagy eseményekkel == mátrix bővítés oldalra és lefelé) kicsit macera, ezért kezdőknek nem ajánlott. A hozzászólás módosítva: Aug 2, 2013
Ha c-ben programozol, nézd meg ezt a hozzászólásomat, a mellékletben van egy váz is amiből kiindulhatsz. Egy olyasmi állapotgép megoldás amit az előző hozzászólásban zombee leírt. AVR-en is használható, ne zavarjon hogy PIC-es topikban írtam róla.
Sikerült hozzájutnom ilyen hőmérő szenzorokhoz: Bővebben: Link, viszont nem tudom hogyan kezdjem el az SPI vezérlést, ugyanis nincs rajta csak egy láb az adatátvitelhez. Van valami ötletetek?
Kezd el úgy, hogy elsőnek csak a bemenetre (MISO) kötöd rá a szenzor SI/O lábát.
MCU-val indítasz egy SPI kommunikációt, és nézd meg mit kapsz vissza. Amúgy a szenzor SI/O lába 3 állapotot vehet fel. Ezzel lehet megadni neki, hogy bemenet, vagy kimenet legyen. Kicsit alaposabban át kéne tanulmányozni hozzá az adatlapot... de jó eséllyel nem is kell írnod a regisztereit mert sok mindent nem tud a chip.
+1: ADATLAP!
És a kommunikációhoz 3 vezeték van, egyikkel aktiválod, másikkal adod neki az órajelet, a harmadikon csorog ki a kőkemény 14 bit amit értelmezni kell...
Ejha
![]() TakiG Neked is köszi.
Üdv. Ma egy atmega 8-at akartam felprogramozni ponyprog-al és a fuse bit beállításnál rá kattintottam Write . De azóta nem találja az atmega-t,fusebit-et nem állítottam. Resetterel helyre hozható?
Külső kristályod van? Meg kellene próbálni rátenni, de ha nem megy akkor vagy kikapcsoltad az SPI-t, vagy a Reset lábat, vagy külső oszcillátorra tetted.
Ilyen hibák elkerülése végett, ha Windows alatt vagy, ajánlom az AVRDUDESS-t, és az engedded fuse calculatort. A hozzászólás módosítva: Aug 5, 2013
Sziasztok
Frekvenciát mérek egy Attiny2313-al, és szeretném 7 szegmensű kijelzőre kiíratni az értékét. 74LS47-el már ki tudom íratni, de szeretném szoftveresen megoldani a decimális kódolást. Így néz ki a while ciklusom:
Szerintem így túl sok proci időbe fog kerülni a kijelzés!
És elcseszi a freki mérést! ![]()
Ezt majd akkor tudom kideríteni, ha működik a kijelzés, és szkóppal vagy frekvenciamérővel megnézem az eredetit. Egyébként van ötleted, hogyan tudnám kiíratni a helyiértékeket?
Ja!
Jó kísérletezgetést! A saját magad által szerzett tapasztalatok a leg hasznosabbak. ![]()
Egy AVRes relés kapcsolást tervezek. A csatolt képen nincs (neten több képet is megnézve nem volt) a tranzisztor bázis-emitter közt ellenállás, de régebben javasolták, hogy kellene. Ennek pontos szerepe micsoda?
Bővebben: Link A hozzászólás módosítva: Aug 8, 2013
Hogy a bázis-emitter átmenetet ne égesd el.
A tranzisztor alapelve
Értem már. Köszönöm. Csak akkor miért "spórolják le" a rajzokról?
Sziasztok!
És a relé tekercs ellenállása? ![]()
Vagy áramgenerátoros kimenete van a meghajtonak, ami korlátozza a kimeneti áramot,és egyben a bázis bemeneti áramát.
Ha biztosra akarsz menni akkor rakj oda mindig ellenállást.
A relékkel kevesebb gond szokott lenni, minden tipusnak van egy többé kevésbé betartott ellenállásértéke (az adott feszültségre), igy ott nagyon nem lehet mellé fogni.
Ez függ a relé teljesitményététöl mennyi kontaktust és milyen áramokat kell kapcsolgatnia. Pl. az autosrelék ellenállása általában a legkisebb, a PCB/SMD relé tekercsellenállása szokott a legnagyobb lenni, ugyanolyan tápfeszültségre gyártva (12V). Természetesen a tranzisztornak ezt ki kell birnia.....
Az a kollektor-emitter körben van...
Ott a kikapcsoláskor a mégneses mező összeomlik és indukciót csinál. Oda ezért kell a dióda, mert az a tekercset "rövidrezárja" ekkor...
Ha ULN28xx IC, akkor az beépítve a tranzisztoros fokozatban tartalmazza.
Vagy olyan tranzisztor, ami már beépítve taralmazza. Vagy FET és nem klasszikus bipoláris tranzisztor. Vagy úgyis áramgenerátoros 40 mA-re az AVR, az majd megoldja ![]()
A vezérlést meg lehet úgy oldani, hogy működhet bázisellenállás nélkül is. Az alacsony szintet az AVR kimeneti meghajtója adja, a felhúzó ellenállást a földre kötve. Magas szintre kapcsoláskor a meghajtót letiltva, a lábhoz beépített felhúzó ellenállás adja a kimenetet, ami egyben a relét kapcsoló tranzisztor bázisellenállása is. Nem szép így tervezni, de működik...
Sziasztok!
Szeretnék készíteni majd egy 6x6-os led mátrixot. Atmega8-al, bipoláris tranzisztorokkal. A kérdésem az, hogy ezeket a kijelzéseket képpontonként valósítsam meg? Ha egy sorban 2 lednek is világítania kell majd, akkor egyszerre vagy egymás után "gyújtsam" ki őket? Bár így elég hosszadalmas lesz egy program. Tud segíteni valaki, vagy ötletet adni, hogy miként lehet egyszerűsíteni a dolgot? Köszi! ![]() A hozzászólás módosítva: Aug 9, 2013
A "LED mátrix" azt jelenti hogy két eltérő sorban nincs olyan hogy "egyszerre".
Egy "becsületes" LED mátrix valahogy így néz ki: Bővebben: Link Kis fantáziával ezt Te megcsinálod 6x6-ra. A tranzisztorok vezérlik a sorokat, ezekből egyszerre egyidőben csak egy lehet aktív. És akkor egy rövid program:
Bonyolult? Majd akkor, ha ezt időzítő megszakítással csinálod meg, esetleg kettősbuffereléssel. A hozzászólás módosítva: Aug 9, 2013
Öhm, eddig úgy csináltam, hogy az oszlopokat is tranyóval hajtottam. De gondolom az már mindegy. Köszi a segítséget, próbálkozok majd...
A hozzászólás módosítva: Aug 9, 2013
Most lehet, hogy butaságot kérdezek, de nem nagyon csináltam még led villogtatásnál többet C-ben.
Szóval; 0. uint8_t adat[6]; ez mit jelent? 1. megadtad a portok irányát. 2. for ciklus, addig csinálja amíg i nem éri el a 6-ot? és miért pont 6? 3. sort bekapcs. 4. portc = adat [ i] az i helyére írom azt hogy hanyadik ledet akarok kigyújtani a sorban? 5. oszlopokat kikapcs A hozzászólás módosítva: Aug 9, 2013
Lehet az oszlopokat is tranyóval, legalább nem terheli az AVR-t. De azokhoz PNP kell.
Próbálkozz számkijelzővel, azzal könnyen ráharapsz majd a működés lényegére! 0: uint8_t azt jelenti hogy "8 bites pozitív egész", ugyanaz mint az "unsigned char" A mátrix képét (soronként) egy 6 elemű tömbbe tárolod, ezért a [6]. A felső 2 bit nincs kihasználva. 1: még szép! 2: azért 6, mert 6 soros a mátrixod. Ezt még be kell ágyazni egy végtelen ciklusba, az lemaradt. 3: azt a sort kapcsolja be ahol éppen tart, és aminek az oszlopait beállítja éppen(a tömbből!) 4: nem, az "i" a tömbön belül címzi meg az adott sor adatát 5: rövid időre ki kell, hogy ne legyen szellemkép A hozzászólás módosítva: Aug 9, 2013
És hogy írom be azt, hogy a 3. sor 3. ledje működjön?
A hozzászólás módosítva: Aug 9, 2013
Ezzel gyújtod ki - a többit nem bántja:
Ha csak ez az egy LED ég, a többi nem:
Még mielőtt megkérded: azért "2" mindenhol, mert 0-tól számolunk... A hozzászólás módosítva: Aug 9, 2013
|
Bejelentkezés
Hirdetés |