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
Most hulla faradt vagyok, igy ha nem ebredek fel ejjel, akkor reggel megnezem. Az utobbi leirasod alapjan elofordulhat(es szerintem ez a legvaloszinubb), hogy megis prellezik a kapcsolo es nem eleg neki ez a szures. esetleg probalj meg tovabbi szurest alkalmazni vagy csak a teszt kedveert egy RS tarolora kossel egy valtokapcsolot, mert az biztos nem prellezik.
A móka kedvéért kipróbáltam, hogy kivettem az ic-t és átkötöttem a triggerek csatlakozóit.
Így jól működik, és számomra meglepő módon sehogy se tudtam hibát előidézni. Ellenben nagyon kíváncsi lennék, hogy a beépített prell mentesítő kapcsolás miért hibázik?
Az első lehetőségénél ha nullát adok meg kezdőértéknek akkor a ciklusban mindig nulla marad. Nem kéne inkrementálni?
De, folyamatosan novelni kell, mig el nem ered a veget, es akkor megint 0-rol mehet.
Rakjal a schmitt trigger IC taplabaira 100nF-os szurot. Lehet, hogy az a baj, hogy a nem hasznalt bemenetek nincsenek fixen tapra vagy foldre kotve es a lebego bemenetek miatt gerjed, valamint zajt kelt.
A prell mentesitest vegezheted szoftverbol is. A megszakitas letrejotte utan egy adott ideig(mondjuk 50 ms) tiltsad le az adott megszakitast. A hozzászólás módosítva: Okt 19, 2012
Udv!
Nekem ez jutott eszembe. Arra kell figyelni, hogy V+>Vbat legyen, ill. Vcc = V+-a dioda veszultseg esese (~0,65V) vagy Vbat-0,65V. A kapott Vcc-t csak arra kosd amit meg szeretnel vedeni. A hozzászólás módosítva: Okt 19, 2012
Sziasztok tegnap próbáltam ki egy ATmega32A-t ezzel a kóddal:
És a próbapanelen rákötött 8 ledből csak az első 2 és az utolsó 2 világít. Ledek jók, szakadás nincs. Más porton ugyanez működik. Mitől lehet ez? Előre is köszi! szerk: Ó én balga nem olvastam el a fenti sárga részt. bocsánat. Most kipróbálom azt. A hozzászólás módosítva: Okt 19, 2012
Valahol errefelé lesz a megoldás.. Ha minden bemenetet testre kötök, akkor az egymástól távolabbi triggerek már használható eredményt produkálnak. Az egymás mellettiek meg talán rosszabbak mint enélkül. A tápok szűrése nem hozott változást.
A szoftveres prell mentesítést ismerem, és a készülék többi 5 gombjánál használom is, de ennél a kettőnél ki akartam próbálni a hardveres megoldást.
Szia!
Távol álljon tőlem, hogy beledumáljak az áramköröd felépítésébe, ugyanis csak egy lelkes amatőr vagyok, ami a HW-t illeti. Ezért engedd meg, hogy megosszam veled azt a HW-s prell-mentesítést amit én használok. Az előnyét ott látom, hogy szépen be lehet állítani a lenyomás idejét és az elengedés idejét is. Egy hozzáértő valamikor azt mondta, hogy a mérések szerint a nyomógomb elengedésekor tovább tart általában a prellezés. (Neki azért hiszek, mert a fejlesztésben dolgozott) Az értékek amit látsz 20ms-ra vannak belőve. Silányabb nyomógomb esetén az idő növelendő. A schmitt trigger kimeneten található 10K-s ellenállás pull-down. Azért kell, mert az AVR-ben csak pull-up van. A SW-ben természetesen a pull-up-t kikapcsolod és 1-re kérdezed le. Mivel a gombnyomásra Vcc kerül a megfelelő bemenetre. 1. kép Kapcsolási rajz részlet. Az X2-1 és -2 csatira megy a nyomógomb. A D1 azért kell, hogy egymástól függetlenül tudd állítani az időket. Sok kapcsolást láttam már, ahol nem volt dióda. Ott rém macerás a megfelelő idők beállítása, mert egymást befolyásolják. Az időket az R33 és R34 értékének változtatásával tudod beállítani. Itt mind a két idő 20ms. 2. kép Szimulátorban a gomb lenyomása. 3. kép Szimulátorban a gomb elengedése. Ha duplájára szeretnéd növelni mind két idő intervallumot (40ms), úgy R33=33K, R34=40K. Nálam ez a megoldás eddig kitűnően bevált. Ha van időd és kedved kipróbálni, légyszíves tudósítsd a közösséget az eredményről. PS: A schmitt-trigger-nél a 100n-ost nem elfelejteni, mint ahogy azt feljebb írták. A szimulációban a sárga a schmitt-trigger bemenet, a kék a kimenet. Üdv, Pluto A hozzászólás módosítva: Okt 19, 2012
Sziasztok!
Az AVR mennyire érzékeny arra, ha kapcsolóüzemű tápról megy? Konkrétan: Méretek miatt már nem tudok mit kezdeni a táprésszel. Stab. IC-k még elférnek, de trafó egyenirányító stb. nem. Arra gondoltam, hogy használnék mezei 12VDC dugasztápot. Ezt a 12 voltot kapnák a relék és ebből 7805-el adnék tápot az AVR-nek. Ez így lehet jó? Ami miatt bizonytalan vagyok az az,hogy 24 órában kell üzemelne.
Semennyire - az enyém már egy éve kint van a ház falán (esöben hoban), és a jól záro dobozban közvetlenül alatta van a nyitott 5 voltos kapcsoló táp. Eddig a legkisebb hiba sem fordul elö, pedig vagy 20 LED-et kapcsolgat naponta többször is.
Igen sok AVR rendelkezik automotive minősítéssel. Azokat direkt mostoha körülmények közé szánják.
ATMEGA324PA-AU erről van szó. A körülmények nem lesznek "mostohák" csak biztosan kell üzemelnie a nap 24 órájában és itt a kapcsolózüemű tápot látom a gyenge pontnak.
Jól látod, kapcsitáp csak korrekt tervezéssel és kivitelezéssel lesz stabil. Nagyonsok kapcsitáp öli a kondijait.
Átírtam egy picit a kódot.
A legfontosabb módosítás a GIFR használata. Most már meg tudom szakítani és folytatni tudom az avr programját. 2 hiba(bug) van benne: - eleve áll a program, tehát az interrupt az indítás után már aktív(nem tudom miért?) - a ki/bekapcs 1 gombnyomásra 1-2x ismétlődik (talán prell?)
Idézet az oldal fölső sárga részéből:
"2. Soha ne érjen véget a main() függvény" Első nekifutásként a "main" függvény végére tegyél egy ilyet: while(1){ }
Ezt a kapcsolást is láttam, de valamiért az általam választott jobban tetszett. Valószínű, hogy a kevesebb alkatrész miatt
![]()
Bocsi, még nem vagyok eléggé precíz
![]() Természetesen van a main()-ben egy függvény, amit megszakítok az interrupttal. Közben írtam egy lényegében leegyszerűsített interrupt rutint:
Sajnos így is megmaradt a 2 fentebb említett hiba.
Az alkatrészválasztás egy kérdés, ilyen szempontból bármi, bármikor tönkre mehet.
A régi házunkban az alacsonfeszültségü világitás 12 V standard trafoi mentek egymás után sorban tönkre. (eleve nem akartam kapcsolo tápot, mert az zavarta egyes berendezéseimet - a rádiokat). Az uj házban ez már kevésbé volt gond, mindenhová kapcsolo tápokat raktam (több van 100W-n felül), egyik sem ment még tönkre, pedig sok közölük naponta van sokszor kapcsolva, meg olyan is van, ami egyfolytában megy (mint az említett AVR-es berendezés is).
sziazstok!
attiny 2313-al építettem egy termosztátot, párhuzamosan hajtla a 3 db hétszegmenses kijelzőt, nekem csak közös anódos volt ezért ULN2003-al vezérlem a szegmenseket de nem ír ki rendes számokat mintha egybefolynának. Hogyan tudnám változtatni hogy jó legyen? felrakom a komlet programot rajzal. Előre is köszi.
sziazstok!
attiny 2313-al építettem egy termosztátot, párhuzamosan hajtla a 3 db hétszegmenses kijelzőt, nekem csak közös anódos volt ezért ULN2003-al vezérlem a szegmenseket de nem ír ki rendes számokat mintha egybefolynának. Hogyan tudnám változtatni hogy jó legyen? felrakom a komlet programot rajzal. Előre is köszi.
Sziasztok!
Számomra érdekes problémába botlottam ezen az ünnepi hétvégén. AtMega48 IC-vel próbáltam ismerkedni, dolgozni. Annak is a 16 bites Timer1 részével. CTC üzemmódban dolgoztatnám és ehhez a OCR1Ax adná a felső értéket. DE! Az Atmel szimáltorral lefuttatva, Timer1 nem hajlandó számolni és gyakorlatilag semmi memóriát nem tudok írni , ami Timer1-hez kötődik. Van valakinek valami ötlete? Én már kínomban az AVR Studio6-ot is letöltettem, de nem használt ez a dolog sem. A beállítás részlete a csatolt file szerint. Hát, várom a tippeket. Köszönöm! A hozzászólás módosítva: Okt 20, 2012
Az utolso egyenletet elirtam, helyesen: kt=2^((Tmax-Top)/10)
Bemásolom a kódod...
![]()
A beállításokat nem néztem meg, hogy helyesek-e, csak a kommentekre reagálnék első körben. A fényerőszabályzás miért A és B csatorna arányában történik? Mármint fizikailag ezzel mit szeretnél elérni? Fényerő/ teljesítmény vezérlése PWM jellel lehetséges alapesetben, ha egyenáramról megy a fogyasztó, ezt sem írtad. Szóval a CTC mód nem alkalmas erre, azzal változtatható frekvenciájú kimenetet kaphatunk. Az interruptos részt sem tudom, szükséges-e... De, ha mégis kellene, akkor timer1 nem adhat szerintem elviekben comapreB-re és overflow-ra is interruptot. CTC módban, ha TCNT eléri OCR értékét, akkor nullázódik, és nem csordul túl, amire az overflow interrupt aktiválódna. Nekem szimulátorban működik a 16 bites timer, igaz, mega64-et nyúzok mostanában...
Ezeket a regisztereket szükséges beállítani, amennyiben 16bit-es FAST PWM módra van szükséged...
Itt csak egy csatorna van használva.
szerk.: Neked természetesen timer1 regiszterneveit kell használni. (3 helyett 1-et írni... ![]() A hozzászólás módosítva: Okt 20, 2012
Köszi Zolee!
Legfontosabb infó, hogy neked mega64 üzemel. Ezt fogom kipróbálni és lépkedni egy-egy fokot. Gyenge angol fordításommal eddig úgy értelmeztem a gyári leírást, hogy CTC üzemmódban OCR1Ax érték adja a TOP értéket, ameddig a számláló mehet. Abban igazad van, hogy OVF interrupt nem generálódik. De ezt könnyen tudom javítani. Ez egy egyszerű LED fényerőszabályzás, amit az időzítő másodlagosan le tud vezérelni. B ideig be lesz kapcsolva a kijelző, és (A-B) ideig off lesz. A kapcsolást az interruptok vezérlik, mert egy tök általános panelt csináltam. Most kipróbálom a mega64-et.... Köszi mégegyszer!
Kedves Zolee!
A problémát megoldottam, én voltam a tudatlan. Mivel közben a progit átalakítottam, módosítottam, nem teljesen tudom visszaállítani a problémát. De a tippem az, hogy egy jól irányzott mozdulattal és egy rossz helyfoglalással a PRR regisztert fejbe írtam és valószínűleg letiltottam Timer1 működését. Ez most tipp, de még ellenőrzöm, mert nem is gondolnám, hogy ilyenkor még a Timer1-hez tartozó memóriát sem lehet módosítani. Na, de ez már csak holnapra marad. Köszönöm fáradozásod! ![]()
Nem néztem meg se a rajzod, se a programot.
A hiba abból áll, hogy amíg átkapcsolsz a következő számjegyre, a szegmensek még az előző számjegyen állnak. Először MINDENT le kell kapcsolni, majd VÁRAKOZNI (100-300us ideig).
Helló mindenki! Segítséget szeretnék kérni. Nem értek az Atmelekhez. Adott egy program amit AT90S2313 -ra írtak. Kérdésem, hogy ez használható e Attiny2313- ba egy az egybe, vagy nem. Előre is bocs, ha hülyeséget írtam. A fájlt mellékelem. Csak azért kérdezem, mert Attiny2313-am van.
|
Bejelentkezés
Hirdetés |