Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   174 / 840
(#) zolee1209 válasza IMi hozzászólására (») Dec 29, 2009 /
 
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...
(#) szepnorbee válasza zolee1209 hozzászólására (») Dec 29, 2009 /
 
És AVR-hez is működött pl. rossz fuse bit visszaállításhoz?
(#) zolee1209 válasza szepnorbee hozzászólására (») Dec 29, 2009 /
 
Én csak ahhoz használom!
(#) edison14 válasza szepnorbee hozzászólására (») Dec 29, 2009 /
 
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.
(#) szepnorbee válasza edison14 hozzászólására (») Dec 29, 2009 /
 
A programozó teszt jó? "Probe"
(#) edison14 válasza szepnorbee hozzászólására (») Dec 29, 2009 /
 
A teszt OK.

A PONYPROGGAL nem lehet gond?
(#) labu01wx hozzászólása Dec 31, 2009 /
 
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?
(#) Topi válasza labu01wx hozzászólására (») Dec 31, 2009 /
 
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.
(#) labu01wx válasza Topi hozzászólására (») Jan 1, 2010 /
 
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).

dalcseng.png
    
(#) janyjozsef hozzászólása Jan 1, 2010 /
 
Mindenkinek Boldog Új Évet Kívánok.

(Újév napja hajnalán AVR-ezni? )
(#) Topi válasza labu01wx hozzászólására (») Jan 1, 2010 /
 
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.
(#) IMi hozzászólása Jan 1, 2010 /
 
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:
  1. void pwm_init (void)
  2. {
  3. TCCR1B |= (1<<CS10);    //elooszto = FCPU/1
  4. TCCR1A |= (1<<COM1A1)//
  5. TCCR1A |= (1<<PWM1A);   //PWM engedélyezés
  6. }

Persze utána OCR1A-ba is lett írva.
(#) labu01wx válasza Topi hozzászólására (») Jan 1, 2010 /
 
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.: : warning: this is the location of the previous definition
(#) Krisz03 hozzászólása Jan 1, 2010 /
 
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
(#) vzoole válasza IMi hozzászólására (») Jan 1, 2010 /
 
Szia!

Itt találsz ATTINY26-ra működő PWM-et:
Digitális Forrasztó Állomás

(#) Topi válasza labu01wx hozzászólására (») Jan 1, 2010 /
 
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.
(#) magitor hozzászólása Jan 1, 2010 /
 
Ü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!
(#) janyjozsef hozzászólása Jan 2, 2010 /
 
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.
(#) TavIR-AVR válasza janyjozsef hozzászólására (») Jan 2, 2010 /
 
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.
(#) janyjozsef válasza TavIR-AVR hozzászólására (») Jan 2, 2010 /
 
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.
(#) trudnai válasza janyjozsef hozzászólására (») Jan 2, 2010 /
 
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:
  1. ISR(XXX_vect, ISR_NOBLOCK)
  2. {
  3.   ...
  4. }

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...
(#) TavIR-AVR válasza janyjozsef hozzászólására (») Jan 2, 2010 /
 
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...

(#) edison14 hozzászólása Jan 2, 2010 /
 
HELLO !

Valaki tudna egy oldalcímet vagy egy leírást az AVR studio használatáról?
(#) janyjozsef válasza trudnai hozzászólására (») Jan 2, 2010 /
 
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.
(#) janyjozsef hozzászólása Jan 2, 2010 /
 
Pontosabban. ISR_NOBLOCK alkalmas arra, hogy az adott int beleszakítson egy másikba.
Vagyis lehet az így jelölt a legmagasabb prioritású?
(#) TavIR-AVR válasza janyjozsef hozzászólására (») Jan 2, 2010 /
 
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.....
(#) trudnai válasza janyjozsef hozzászólására (») Jan 2, 2010 /
 
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 ...
(#) Krisz03 válasza Krisz03 hozzászólására (») Jan 2, 2010 /
 
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.
(#) janyjozsef válasza trudnai hozzászólására (») Jan 2, 2010 /
 
Köszi szépen a választ.
Erre volt szükségem.
T0 megszakítható. Stack van bőven. (kb400k)
(#) Topi válasza janyjozsef hozzászólására (») Jan 2, 2010 /
 
Idézet:
„Stack van bőven. (kb400k)”

400K Stack? Akkor miért az AVR-es témában vagyunk?
Következő: »»   174 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem