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
Akik az oszcillátorral küszködnek: Kvarc oszcillátor
Megtalálható a kapcsolás, az értékek. Én megépítettem, nekem működik. Tranzisztor BC182, kimeneti kondi 100nF. Az alkatrészértékeket a táblázat második sorából vettem, mert 4MHz-es kvarcot használok! És ezt mintha már Tomi20 linkelte volna, de lehet, már én is...
És AVR-hez is működött pl. rossz fuse bit visszaállításhoz?
Én csak ahhoz használom!
Mindent úgy csináltam ahogy a leírásban van. A PONYPROGOT is jól állítottam be és adtam neki feszt is.
A PONYPROGBAN állandóan azt írja ki, hogy "device missing or unknown device" ami annyit jelent hogy nincs vagy rossz a chip.
A programozó teszt jó? "Probe"
A teszt OK.
A PONYPROGGAL nem lehet gond?
Sziasztok!
Felprogramoztam az itt található hex fájlt, de hiába zárom 0-ra a PB2-t, nem ad kimenő jelet a PB0. A hex mellett volt egy .elf fájl is, azt is fel kell rakni?
Hex kell, és a Fuses-ok között át kell állítani az oszcillátort 8MHz-re.
Eleve, ahogy tápod adsz neki, zenélnie kell. Nézz körül céláramkörben, ellenőrizd hogy programozásnál tényleg tiny45 volt-e kiválasztva és jók-e a fuses-ok.
Nem állítottam be, hogy AT45--öt fogok programozni, mert azt hittem, hogy azt a .hex tartalmazza.
Csináltam egy üres projectet, ahova betöltögettem a forrásfájlokat, de fordításkor hibaüzenetet ír ki(képen).
Mindenkinek Boldog Új Évet Kívánok.
(Újév napja hajnalán AVR-ezni? )
Először rendes könyvtárnevet adj neki. Számítástechnikában elfogadottat.
1. Hozz létre egy üres projektet. 2. Állítsd be a project options-be hogy ATtiny45 és hogy 8000000 az F_CPU. Optimalizáció -Os 3. Project fában add hozzá a main.c-t mint "Existing..." 4. Fordítsd le. Könyvtár ne ilyen asztalra odahányt mappa legyen, hanem rendes elérési úttal. Nem ékezettel, nem szóközzel. GCC egy linuxról portolt fordító. Nem díjazza a nem szabványos könyvtár struktúrákat. Pl hozz létre egy ilyen ágat: c:\avr\csengo\ és ebbe mentsd bele az aps fájlokat is és a main.c-t is. És elég csak a main.c-t hozzáadni. Semmi mást! Sem header-t, semmit.
Szisztok !
Egy ATtiny26-ban hogyan kell életre kelteni a PWM-et a PB1-es lábon? Eddig így próbálkoztam, de valamiért nem működik:
Persze utána OCR1A-ba is lett írva.
Mindent úgy csináltam, ahogy írtad, most már nincs hiba csak két veszély:
1.: ../global.h:7:1: warning: "F_CPU" redefined 2.:
Helló!
Elkészítettem Topi AVR-es ceruzaakku-töltőjét, bár egy picit módosítottam az áramkörön (töltőáram választhatósága, illetve a fórumon olvasottak alapján 4.7V-os zener a mérőbemenetre, hogy akku nélkül ne kapja meg az áramgenerátor közel tápfeszültségét). Érdekes dolgokat művel az áramkör. Akku nélkül, és töltés közben sincs jelzés. Tápfesz ráadásakor a beállított töltőáram folyik, majd kb 6-8mp múlva világítani kezd a zöld LED, és még 2-3mp múlva kikapcsolja a töltést. A kisütés el sem indul. A programon csak a "Cell num" értékét módosítottam 1-re, aztán AVR Studio 4-gyel lefordítottam, majd AVRISP nevezetű progival beégettem. Alapból be volt kapcsolva a programban az órajel 8-cal való osztása, ezt kikapcsoltam, és úgy égettem hiba nélkül. Élesztéskor (AVR nélkül) véletlen fordított tápfeszt adtam az áramkörnek, de a labortáp áramkorlátja 20mA-nál megfogta. A stabIC kibírta, 4.95V-ot ad. Az áramkörben hibát nem találok, szerintem szoftveres gondja lehet, de ehhez a részhez sajnos nem sokat értek. Azért belinkelem az áramkörről készített képeket, és a módosított kapcsolást: Bővebben: Link. Krisz
Akkor a project option-sből vedd ki a Frequency-t. Nem emlékszem már, hogy beleírtam-e a forrásba. Ezekszerint igen.
Üdv urak, segítségetek kérném, egy olyan kapcsolásra, illetve programkódra lenne szükségem, ami egy 2x7 szegmenses led kijelzőt hajtana meg, illetve időzítőként funkcionálna, a programnak azt kellene tudnia hogy max fél órás időintervallumtól visszafelé tudjon számolni, ezt kijelezze, de csak a hátralevő perceket! Előre köszönöm a segítséget!
Sziasztok!
Egy kérdés. ATMEGA esetén nézegette, az interrupt priority felsorolást. Jól értelmezem, hogy pl az INT0 beleszakíthat a TIMER0-ba. Vagy csak egyszerűen, ha egyszerre jött be a két megszakítás, akkor az INT0 lesz előbb kiszolgálva? Változtatta már meg valaki az IP sorrendet? Hogyan? (C-ben) Köszi a választ.
sorbaállítás van.
1 szintű INT. ha a Timer0 INTben vagyok, a többi megjegyződik és a Timer0 INT lefutása _után_ folytatódik a prg futása a következő, legmagasabb prioritású INTen. Ha elfogynak, akkor a főprogram megy tovább.
Tehát akkor az egyik int nem szakíthatja meg a másikat?
Akkor mi értelme van az INT sorrendnek? És a sorban lefut szerint, ha gyakrabban van INT0 mint T0, akkor T0 soha nem fut le, mert ha INT0 végén már megint van egy INT0, akkor az lesz kiszolgálva.
Ahogy TavIR mondta amig benne vagy egy ISR-ben addig beerkezhetnek mas interruptok is es azok varakozni fognak. Ebbol kovetkezik, hogy nem kell egyszerre bekovetkezniuk az esemenyeknek ahhoz, hogy szukseg legyen annak eldontesere melyik ISR fusson le elobb.
Amugy lehet olyat csinalni, hogy tobb szintu interrupt kezeles:
Es amit szinten emlegettel, hogy tul koran jonne be az interrupt... Ezt nyilvanvaloan kerulni kell. Pl. Az interrupt tul hosszu ideig tart, amin szoftveresen, vagy az esemeny tul gyors, amin lehet hardveresn kell valtoztatni...
Persze. De ha INTből állandóan INTbe lépsz, akkor elbaltáztad a programodat......
Ha INT0 gyakrabban van mint T0, akkor is NEM futht a processzor állandó INTben. Ott erőforráskiosztási gondod van...
HELLO !
Valaki tudna egy oldalcímet vagy egy leírást az AVR studio használatáról?
Szia.
Erről a több szintű kezelésről tudnál egy kicsit bővebben. (link, pdf stb.) Az a helyzet, hogy nekem arra lenne szükségem, hogy ha INT1 bejön, akkor a program akár más INT-et is megszakítva feltétlenül azt szolgálja ki. Egyébként nincs olyan a progiba, hogy állandóan csak egy int fut. Főként a main fut. Köszi.
Pontosabban. ISR_NOBLOCK alkalmas arra, hogy az adott int beleszakítson egy másikba.
Vagyis lehet az így jelölt a legmagasabb prioritású?
NINCS megszakítás általi INT megszakítás....
Timer INT legyen minimális (~20-60 órajel). Az INT1 ha bejön, néhány órajel után folytatódik.... Azaz veszítesz legrosszabb esetben 70 órajelet (20 MHz esetén ez ~3.5uSec! ) Ha multilevel INT kell, akkor AVR32, ARM, PIC24/32.....
Idézet: „ISR_NOBLOCK alkalmas arra, hogy az adott int beleszakítson egy másikba. Vagyis lehet az így jelölt a legmagasabb prioritású?” Egeszen pontosan az ISR_NOBLOCK annyit csinal, hogy az ISR-en belul amilyen gyorsan csak lehet kiad egy SEI-t, azaz ujra engedelyezi az interruptot. Ez a kontextus mentes utan van tipikusan -- ha pontosan erdekel akkor nezd meg mit fordit a gcc belole. Azt hogy melyik interrupt vektor szakithato meg ilyen formaban, azt ugye Te hatarozod meg -- amelyiknek odaadod ezt a parametert az megszakithato, amelyiknek nem, az nem... De ez nem prioritas! Pl ha a timer megszakitasod NOBLOCK-os, es az INT0 nem, akkor is lehet, hogy a timer jon be elobb, csak mikor eler odaig az ISR-ed, hogy kiadja a SEI-t, akkor a timer ISR felbeszakad es az INT0-nal folytatodik a vegrehajtas. Aztan amikor az befejezodott, akkor folytatodik a Timer, es mikor az is befejezodott akkor ter vissza a foprogramra. Viszont ez par eleg csunya hibalehetoseget is hotdoz magaval amit nem biztos, hogy "laboratorioumi" korulmenyek kozt meg fogsz talalni. Pl. ha kicsi a stack, akkor megtelik... Vagy A sok egymasba agyazodas miatt fog idozitesi problema fellepni. Nagyon gondoldd at, hogy tenyleg akarod-e, valoban szukseged van-e ilyesmire! Amugy AVR Studioban: Help / AVR-libc Reference manual / Library Reference / avr/interrupt.h: Interruprs ...
Annyi hibát találtam a töltőben, hogy a duo LED piros diódája szakadt, de ez semmit nem befolyásol, majd cserélem. Egyébként 5V-ot adva AVR nélkül a foglalat megfelelő lábaira működik a töltés leállítása, illetve a kisütés bekapcsolása. Az AVR viszont csak annyit csinál a tápfesz ráadását követően, hogy kb 6mp-ig engedi a töltést, leállítja, közvetlenül ezután 0.5-1mp-re bekapcsolja a kisütést, ezután kikapcsolja, és innentől kezdve semmi sem történik. Se nem tölt, se nem süt ki.
Köszi szépen a választ.
Erre volt szükségem. T0 megszakítható. Stack van bőven. (kb400k)
Idézet: „Stack van bőven. (kb400k)” 400K Stack? Akkor miért az AVR-es témában vagyunk? |
Bejelentkezés
Hirdetés |