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   124 / 840
(#) vzoole válasza anklar hozzászólására (») Máj 14, 2009 /
 
Nézd meg ezt is:
Bővebben: Link
(#) anklar válasza ATtiny hozzászólására (») Máj 15, 2009 /
 
Szia, tagolva volt, csak sajnos kiléptetett én meg bekopiztam a kiléptető üzenetet és az már nem volt tagolva (a code, /code ott van )

Egyébként mi a külömbség a signal és az isr között ? nekem mind a kettő ugyan azt az eredményt hozta.
(#) ATtiny válasza anklar hozzászólására (») Máj 15, 2009 /
 
Ha
  1. <avr/interrupt.h>
-t használsz akkor ki is irja, hogy a signal már elavult és helyette az ISR-t kéne használni. Lehet, hogy még most pontosan ugyanazt a kódot eredményezi, de könnyen előfordulhat, hogy ez késöbb ez már nem így lesz. Fölleg az új AVR-eknél kérdéses az ilyen már nem támogatott funkciók használata.
(#) aquafood hozzászólása Máj 15, 2009 /
 
Sziasztok!

C-ben van egy olyan függvény, hogy:
void EEPROM_write(unsigned int uiAddress, unsigned char ucData).

Ilyen függvényt szeretnék írni assemblyben. A neten találtam is egy megoldást:
http://www.scienceprog.com/atmega-eeprom-memory-writing/
lefordul, de valamiért nem működik. Valaki tudna nekem segíteni, hogy mi a gond?
Erről a kódról van szó:
EEPROM_write:

; Wait for completion of previous write

sbic EECR,EEWE

rjmp EEPROM_write

; Set up address (r18:r17) in address register

out EEARH, r18

out EEARL, r17

; Write data (r16) to data register

out EEDR,r16

; Write logical one to EEMWE

sbi EECR,EEMWE

; Start eeprom write by setting EEWE

sbi EECR,EEWE

ret
A választ előre is köszi!
(#) gtk válasza anklar hozzászólására (») Máj 16, 2009 /
 
A nyomogombot ne tedd megszakitasra ! Hogy fogod prell mentesiteni? HW-esen tobb alkatresz es tobb sz^vas. Szoftveres prellmentesitesre ott pl a nixi ora kodja, de lehet hogy a topicban is van errol szo.
(#) Sir-Nyeteg válasza gtk hozzászólására (») Máj 16, 2009 /
 
Nekem egy 10nF-os kondi tökéletes prellmentesítésnek bizonyult a nyomógombhoz.
(#) ATtiny válasza gtk hozzászólására (») Máj 16, 2009 /
 
Lehet simán perl menetsíteni interrupt rutinon belül is. Persze csak akkor járható ez az út, ha a main kódban nem fut semmi olyan ami időkritikus.
  1. ISR(PCINT0_vect)
  2. {
  3.  //perl mentesítés
  4.  GIMSK = 0;            // Pin Change Int. Disable
  5.  _delay_loop_2(0x3fff);// Várunk...
  6.  GIFR |= (1<<PCIF);    // Töröljük a Pin Change flag -et
  7.  GIMSK = (1<<PCIE);    // Pin Change Int. Enable
  8.  //perl mentesítés vége
  9.  
  10.  //további kód helye...
  11. }
(#) gtk válasza ATtiny hozzászólására (») Máj 16, 2009 /
 
Idézet:
„Lehet simán perl menetsíteni interrupt rutinon belül is.”
Koszi.
En nem irtam azt, hogy nem lehet. Mindent lehet. Csak az a kerdes hogy ki csinalja. En csak jo iranyba probaltam terelni, hogy "megtanulja" hogy lehet normal I/O-n nyomogomb esemenyt lekezelni.
(#) trudnai válasza ATtiny hozzászólására (») Máj 16, 2009 /
 
Ezt ugy szoktak interruptban, hogy a gomb fel es lefuto elet is figyelik. Mikor a gomb megnyomodik akkor egy timer elindul. A timer a prell ido vegen ad megszakitast, de kozben ha a gombot elengedtek, akkor a timer leall, ill ujboli megnyomasakor ujra indul az idozites. Mikor a timer megszakitas megjott akkor a prell mar megtortent.

Egy valtozatban nem kell az elengedest figyelni, hiszen legfeljebb ha az idozites lejart le lehet pollozni, hogy a gomb meg mindig nyomva van-e (es tovabbra is megnyomaskor mindg nullazni kell az idozitest...).

Ezek a modszerek tekinthetok a legbiztonsagosabb szoftveres prell mentesitesnek, szinte teljesen mindegy milyen kapcsolot kezelunk le a modszer mukodni fog mivel nem kell pontosan ismerni a prellezes idejet. Hatranya viszont, hogy a timer dedikaltan egy gombhoz van rendelve amivel kulonbozo modszerekkel lehet segiteni de mindenkeppen bonyodalmakat fog okozni.

Ennek egy extrem valtozata mikor a timer korul forog minden, adott idokozonkent ad megszakitast amikr a gombot vizsgaljuk (pollozzuk). A timer idozitesetol fuggoen vagy egy szamlalo vagy egy flag az amit seged valtoonak hasznalunk a gomb allapotanak a jelzesere.

A flag az egyszerubb, a timer megzakitas bejon, megnezzuk meg van-e nyomva a gomb es ha pedig nem a flag-et toroljuk es kilepunk. Ha meg van nyomva a gomb akkor megvizsgaljuk, hogy a flag all-e. Ha meg nem all a flag akkor beallitjuk es kilepunk, ha viszont mar all akkor a gomb megnyomottnak tekintheto. Ez azt feltetelezi, hogy a timer idozitese tulnyul a prellezes idejen es elenyeszo hibalehetoseggel kielegito megoldaskent szokott szolgalni.

Ha gyorsabban ad megszakitast a timer mint a prellezes lecsengese, akkor szamlaloval kell ugyanezt eljatszani. Tehat elengedett allapotban a szamlalot nullazni kell, megnyomottban pedig novelni. Ha bizonyos erteket elertunk, akkor a gomb megnyomottnak tekintheto. Ennek elonye az is, hogy konnyu kiegesziteni az ismetles funkcioval, tehat meg azt is el lehet jatszani, hogy elso megnyomaskor X ideig meg nem ismetel, de utana Y idokozonkent elengedesig igen.
(#) wg_kezdo hozzászólása Máj 17, 2009 /
 
Van egy távirányítós autóm amit fel akarok tuningolni.
A nyákján találtam egy RX IC-t.
Ha jól olvastam akkor ebből csak a "kimeneti" lábakat kell kioperálnom és a helyükre tenni mondjuk pár AVR lábat. Az AVR lábaira meg bemenetként rárakhatom az RX kimeneti lábait.

Innentől az AVR kapja a távirányító jeleit és ő irányítja a két motort (kormány+kerék).
A tápot pedig kaphatja onnan ahonnan az RX is kapja.

Helyes az elgondolásom?

(Az adónál szintén így csak a megfelelő lábra a megfelelőt.....)
(#) aquafood hozzászólása Máj 18, 2009 /
 

Sziasztok!

Egy olyan problémám van, hogy nem akar két timer interrupt együtt működni.(timer0 és timer1).
Az a baj, hogy amelyik előbb meghívódik, csak az fut utána, a másik nem jut szóhoz. De nem tudom , hogy miert.
Valaki tudna segíteni??Köszi


(#) gtk válasza aquafood hozzászólására (») Máj 18, 2009 /
 
Lehet, hogy nem jol irtad meg a programot.
(#) aquafood válasza gtk hozzászólására (») Máj 18, 2009 /
 

köszi!!
Itt a program érdemi része, ami lefut. Biztos van vmi amit elfelejtettem beállítani.


#define TMR2_CTRL (1 << WGM21) | (4 << CS20)
#define TMR2_MATCH (uint8_t)(125 - 1) // 125000 / 125 = 1000 Hz ==> 1 ms
#define TMR2_ASSR_AS2 0

int main(void) {

/* timer0 interrupt */
TCCR0=0x1;
TIMSK=1;


/*timer2 interrupt */
OCR2 = TMR2_MATCH;
TCCR2 = TMR2_CTRL;
TIMSK = (1 << OCIE2);


/* enable interrupt */
sei();
while(1) {

}

return 0;


}

ISR(TIMER0_OVF_vect) {


kiir(1,0x80);

}


ISR(TIMER2_COMP_vect)
{

kiir(2,0x80);

}
>>>>>
(#) gtk válasza aquafood hozzászólására (») Máj 18, 2009 /
 
Milyen procira van irva ?
Most igy elsore:
  1. TIMSK = (1 << OCIE2);
-- Ezzzel a sorral a TIMSKregisztert felulirod. Ird at igy:
  1. TIMSK |= (1 << OCIE2);
(#) aquafood válasza gtk hozzászólására (») Máj 18, 2009 /
 
Atmega8

Sajnos, így sem működik
(#) ATtiny válasza aquafood hozzászólására (») Máj 18, 2009 /
 
A kiir fügvényedröl semmit nem mondtál. Látatlanban azt tudom mondani, hogy a kiir fügvényedben van a hiba oka. Könnyen előfordulhat, hogy túl sokáig fut a kód a megszakítás rutinon belül és ezért nem jut szóhoz a másik timer.
(#) gtk válasza aquafood hozzászólására (») Máj 18, 2009 /
 
Az ISR-kben a kiir helyett egy -egy I/O szintet allits at, majd ellenorized le, hogy ez igy mukodik-e. Ha igen, a kiirben van a hiba.
(#) gtk válasza aquafood hozzászólására (») Máj 18, 2009 /
 
Ez mi a akar lenni:
  1. | (4 << CS20)

Ha egybe allitod is, akkor az : reserved. A COM21 bitet kell 1-be allitani, vagy a COM21-20 biteket !
(#) gtk válasza gtk hozzászólására (») Máj 18, 2009 /
 
Na beneztem , sietek.

  1. (1 << CS20)
a no prescaling.
(#) aquafood válasza gtk hozzászólására (») Máj 18, 2009 /
 
Köszi a segítséget!!

A kiir függvényem egy 7segmenses kiíratás.
Ha az interruptban nem csinálok semmit , akkor sem veszi el az egyik a másiktól.
(#) aquafood válasza aquafood hozzászólására (») Máj 18, 2009 /
 
Meg van a hiba!
Az volt a mi az elso tipp is volt!
csak nem a timer2-re kellett volna vagy hanem a timer0 ra!
TIMSK|=1;

köszi a segítséget!!
(#) gtk válasza aquafood hozzászólására (») Máj 18, 2009 /
 
Timer0-ra hogyan, ha azutan felulirod a timer2-nel?
Es ez? (#437966)
(#) Ichthyophagy hozzászólása Máj 19, 2009 /
 
Helló szakik!

Azzal a problémával fordulok hozzátok, hogy szeretnék csinálni egy hangoló gépet, és egy metronómot...ehhez freki mérés kell, és ezt mikroprocesszorral szeretném megcsinálni.A suliban tanultunk 80c32-re egy freki mérőt, meg ezt már többé-kevésbé ismerem is, mert ebben a félévben ezzel dolgoztunk...
Azt szeretném tőletek megtudakolni, hogy létezik-e hasonlóan működő avr, vagy hogy mivel a legegyszerűbb megoldani?Úgy néztem, hogy vannak hasonló avr-ek, és ezeket felprogramozni is jóval egyszerűbb...

A válaszokat előre is nagyon köszönöm!!

(#) pici hozzászólása Máj 20, 2009 /
 
Sziasztok
Bedöglött az JTAGICE MK II-m.
80eHUF-ért nem vennék újat.
Tud valaki megoldást arra, hogy lehetne AVR32-t és XMEGA chipeket programozni JTAG-en (milyen hardver)?
(JTAGICE van, de az nem kezeli ezeket)
(#) Dudus válasza pici hozzászólására (») Máj 21, 2009 /
 
Én anno 100USD körül vettem. Igaz, nem itthon vettem, hanem NET-en rendeltem.

Ebben a webstore -ban....
(#) pici válasza Dudus hozzászólására (») Máj 21, 2009 /
 
Igen, ilyet néztem én is. Clone.
De a leirásban nem írja, hogy igen tudja kezelni az AVR32-t és az XMEGA cuccokat, csak említi, hogy van ilyen és olvasd el az atmel oldalán...
A tieddel használtál már AVR32-t XMEGA-t?
(#) Dudus válasza pici hozzászólására (») Máj 21, 2009 /
 
Az XMEGA biztosan meg vele ( ATxMega256A1) AVR32-vel még nem próbáltam. Mivel a firmware-t az AVR studió frissíti, nagy különbség nem lehet az eredetihez képest.
(#) pici válasza Dudus hozzászólására (») Máj 21, 2009 /
 
Az eredeti az megy vele.
Az eBay-en találtam ilyen clone-okat, de ott pár visszajelzésben írták, hogy ok megy, de AP7000 (AVR32) vagy XMEGA procikat az a clone nem kezelte.
Ezért kérdeztem, hogy fizikailag tesztelted-e.
THX
(#) zacc hozzászólása Máj 21, 2009 /
 
Hello.
Bascom problema:

Config Portc = Output
Config Timer0 = Timer , Prescale = 1024
On Timer0 , Vilog:
Enable Timer0
Enable Interrupts
Do
Loop
Villog:
Timer0 = 100
Toggle Portc.2
Return

Eddig megy (a portc.2 -ön levő ledet villogtatja), az a gond hogy nem tudom hogy hogy kell a külső megszakitásokat használni. ATmega8-at használok a portd.2 az Int0. Ha esetleg valaki tudna nekem segiteni abban hogy az Int0-t hogy kell beálitani valamint, hogy kell rá hivatkozni, mert azt akarom elérni hogy a villogást ki be kapcsoljam vele akkor azt megköszöném.
Kösz a seggitséget elöre is.
(#) pici válasza zacc hozzászólására (») Máj 21, 2009 /
 
Ez még nem olyan komoly feladat, hogy megszakítás kelljen hozzá.
Elég lenne a egy sima portfigyelés és ki be kapcsolás.
Következő: »»   124 / 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