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   51 / 840
(#) digimann válasza digimann hozzászólására (») Márc 24, 2008 /
 
Példaprogi1:

SPITransfer:
out USIDR,r16
ldi r16,(1< out USISR,r16 //1
ldi r16,(1<
SPITransfer_loop:
out USICR,r16
sbis USISR,USIOIF //3
rjmp SPITransfer_loop
in r16,USIDR
ret

1: flag és counter "kitakarítása"
2: 3wire mode, külső órajel, felfutó élre shiftel, USITC lépteti a countert, és USITC-bit
3: ha végzett átugorja az "rjmp SPITransfer_loop"-ot, ha nem akkor újra beírja r16-ot az USICR-be. Ahányszor beírja, lép a számláló, vált a portláb, és a shiftregiszter az órajel láb felfutó éleire shiftel. (a slave-nek a lefutóra kell)

Amennyire én értem, elég lenne csak az USITC bitet beirogatni, de az +2 utasítás lenne >>>>>>>>>>
(#) digimann válasza digimann hozzászólására (») Márc 24, 2008 /
 
Példaprogi2:

ldi r16,(1< ldi r17,(1<
Itt csak a két változó tartalma érdekes. Trükkös megoldás ez

USIWM0: 3wire mode
USICS0: elméletileg a Timer/Counter0 overflow az órajel forrás
USITC: portláb billegető
USICLK: itt shiftel, és a számlálót billegeti

ahol r16-ot írja USICR-be, ott csak a portláb billen át
ahol r17-et írja USICR-be, ott shiftel, és a portláb is billen
az átvitel végén a 4bites counter még csak a felénél jár!

Remélem segítettem ezzel, és hogy az előzőt megszögelik a modik, meg hogy ez nem hullik szét.

Üdv: Zsolt>>>>>>>>>>>>>>
(#) zeusz7 válasza digimann hozzászólására (») Márc 24, 2008 /
 
Köszi, látszólag rendben működik, de nem tökéletes a dolog. Nem tudom hol a probléma, de leírom a jelenséget, hátha van rá ötletek:

Atmega128:slave -SPI
ATtiny2313:master-USI

Küldök mondjuk 0b11001100-t és van amikor ez is jön meg, de van amikor ugyanez jön meg, csak valamennyivel elshiftelve. pl.: 0b00110011 vagy 0b10011001 vagy 0b01100110 tehát látszólag össze-vissza, semmi szabályosat nem látok benne. Ha épp jót kapok meg és resetelem a mastert, akkor is van, hogy elcsúszik az egész.
Nagyon fontos lenne, hogy működjön, mert a diplomamunkámhoz már csak ez a rész hiányzik és olyan pitiáner dolog, de mégse megy.
Az Atmega128 FT232RL-en keresztül van összekötve a PC-vel és terminal programmal figyelem a kapott adatot.
Csatolom a két forráskódot, hálás lennék, ha valaki mondana valami okosat, hogy mit rontok el.
A master vár egy logikai 1-re az RTC-nek nevezett lábán, amit a slave küld, ha ez megjön, akkor kezdődik az adatcsere.
Köszi
(#) vrbst hozzászólása Márc 24, 2008 /
 
Sziasztok!

Most próbálok ismerkedni az AVR-ekkel, egészen pontosan egy atmega88-cal, de van egy kis gondom.

Egy 2x16 karakteres LCD kijelzőt szeretnék meghajtani vele, és először egy olyan programot írtam, hogy írjon ki a kijelzőre egy nagy A betűt. Ennek a kódja ugyebár 0x41. Ezt szépen ki is teszem a PORTD-re de valami miatt ott már a 0x43 jelenik meg és egy nagy C betűt ír ki. A szimulátorban jól működik, de a valóságban már nem. A PD1-en a 0 helyett 1 jelenik meg.

Mellékelem az asm-et, egy hozzáértő ránézne, és megosztaná velem, hogy mi a hiba?

Előre is köszönöm

lcd2.asm
    
(#) zeusz7 válasza vrbst hozzászólására (») Márc 24, 2008 /
 
Nekem az a személyes tapasztalatom, hogyha valami a szimulátorban jól működik, de a valóságban nem, akkor az hardveres hiba. Esetleg próbáld ki úgy, hogy nem kötöd rá az LCD-t és akkor mi jön ki a PORTD,1 lábon. Vagy csak külön kapcsolgatod a PORTD,1-t, hogy az jól működik-e.
Másik ötlet, hogy mivel nem ismerem ezt a procit, nem tudom, de esetleg annak a lábnak lehet, valami külön funkciója és emiatt nem csinálja, amit te szeretnél és a fuse bitekkel kell operálni, nekem volt már ilyen.
(#) digimann válasza zeusz7 hozzászólására (») Márc 24, 2008 /
 
Hello!

MEGA128: Ha slave, akkor SS pin bemenet, és az adatátvitelt LOW szint jelzi. Az init-ben illene beállítani a MISO-t kimenetnek. Nem egészen értem azt sem, hogy miért adsz #define-el álneveket a DDR-eknek.

TINY2313: A kódja elég zavaros... ott most külső megszakítást használsz, vagy egy loop-ban figyelsz?

Belerondítottam a kódodba... csatoltam. A MEGA adatlapja azt írja, hogy az SS pin vezérli a slave-nél az átvitelt. Ha ez kimaradt nálad, nem értem, hogyan ment át mégis adat?!?!

Esetleg ha mutatnál kapcsolási rajzot, többet segíthetnénk.

Üdv: Zsolt

pack.zip
    
(#) matrix64 válasza vrbst hozzászólására (») Márc 25, 2008 /
 
#175489-ben tettem fel egy működő asm LCD routint,igaz 4-bites,de nem nehéz átírni 8-ra....
(#) denon888 hozzászólása Márc 25, 2008 /
 
Sziasztok! Hol lehet AVR-t venni,mert sok helyen még nem is hallotak róla.
(#) alex.taylor válasza denon888 hozzászólására (») Márc 25, 2008 /
 
Pl itt
(#) denon888 válasza alex.taylor hozzászólására (») Márc 25, 2008 /
 
ATMEGA32 16 kellene.A HQ nál nem látok olyat
(#) alex.taylor válasza denon888 hozzászólására (») Márc 25, 2008 /
 
akkor itt
1100 Ft-ba kerül
(#) zeusz7 válasza digimann hozzászólására (») Márc 26, 2008 /
 
Kszi, az SS vezérlése tényleg lemaradt, de így se megy, lehet, hogy valami hardveres hiba van. Azt hiszem inkább ezt a módot hagyom és megpróbálok mást.
(#) zeusz7 válasza denon888 hozzászólására (») Márc 26, 2008 /
 
Itt sok minden van: Bővebben: Link
kb 500Ft
(#) vrbst válasza zeusz7 hozzászólására (») Márc 26, 2008 /
 
Zeus, matrix64!

Köszönöm, még próbálkozom...
(#) digimann válasza zeusz7 hozzászólására (») Márc 26, 2008 /
 
Hello!

Ahogy érzed... sok sikert!

Üdv
(#) fecus válasza fecus hozzászólására (») Márc 27, 2008 /
 
Melyik uc használjam az Attiny85 helyett? Minél kisebb 8k-s kellene. Csak 4 portot használnék. A lényeg, hogy kapható legyen.
(#) Topi válasza fecus hozzászólására (») Márc 27, 2008 /
 
8K Flash és 4 láb használat... Huh.. Hát végignéztem a nyomtatott AVR katalógusomat, de a legkorábbi kapható 8 K-s az Atmega8 DIP28-as tokban...
Automotive kategóriában volt még pár 8K-s, de azok sem kaphatók nálunk.
(#) zeusz7 hozzászólása Márc 27, 2008 /
 
Atmega48 A/D konverterét szeretném használni normal módban, de akárhogy nézem, 0-t olvasok ki belőle.
(Vref: Külső Aref,oszc: 16MHz)
Esetleg lát vki vmi hibát benne?

  1. AD_INIT1:
  2.         ldi temp,0b00100001    ;ADLAR->8 bit,AD0_on
  3.         sts ADMUX,temp
  4.         ldi temp,0b11000111    ;AD_enable,clk/128              
  5.         sts ADCSRA,temp
  6.         ldi temp,0b00111100    ;ADC0,ADC1 engedélyezve
  7.         sts DIDR0,temp
  8. AD_WAIT:
  9.         lds temp,ADCSRA
  10.         sbrs temp,4
  11.         rjmp AD_WAIT
  12.  
  13.        lds temp,ADCH
(#) zeusz7 hozzászólása Márc 27, 2008 /
 
Nem tudtok egy jó AVR szimulátort, ami minden funkciót tud? AVR Studio szimulátora pár dolgot nem tud.
(#) PHARO hozzászólása Márc 27, 2008 /
 
Sziasztok!

ATTINY45-ötbe szeretnék programot égetni.Még nem használtam ilyen áramkört,nem igazán ismerem.Tudnátok ajánlani egy egyszerű programozót hozzá?A legegyszerűbb is jó,csak próbálgatom... Programnak AVR studio-t gondoltam.
(#) Frankye hozzászólása Márc 27, 2008 /
 
Üdvözlüm a tisztelt Kollégákat!

Minhogy csak mostanság ismerkedem az AVR-ek programozásával, szeretném megtudakolni a témában jártasabbaktól, hogy mit szóltok ehhez az AVR programozóhoz, illetve hogy a fenti programozóhoz kell-e a külső, 5V-os táp? (Ha jól értelmeztem, akkor kell.)

Szíves segítségeteket előre is köszönöm!
(#) IMi válasza Frankye hozzászólására (») Márc 27, 2008 /
 
Üdv.!

Igen kell neki külső táp,amit a cél ák.-ból kap.
Ez a kapcsolás az STK200 néven ismert, működő programozó !
(#) Dudus válasza Frankye hozzászólására (») Márc 27, 2008 /
 
Régen, hibamentesen használom.

Vagy ez az áramkör kapja a tápot a céláramkörből, vagy ez adja neki ( helyzettől függ ). Erre a célra egy 5V-os dugasztápot használok.

Ha ismerkedsz, akkor megéri csinálnod egy JTAG debugger-t, amivel a fejlesztés fázisában nagyon kényelmesen lehet a programot bogarászni.
(#) PLaci válasza zeusz7 hozzászólására (») Márc 27, 2008 /
 
Szia!
Miért sts, miért nem out? Bocsi, csak már késő van.
(#) matrix64 válasza zeusz7 hozzászólására (») Márc 28, 2008 /
 
http://www.helmix.at/hapsim/
A studio kiegészítéseként működik,nagyon jó.Többek között az LCD-t is tudja szimulálni.Aztán ott a VMLAB,ingyenes.Egy baja van,hogy a asm2-t nem ismeri.
(#) zeusz7 válasza PLaci hozzászólására (») Márc 28, 2008 /
 
Ha jól tudom, az az oka, hogy ezeket a portokat nem lehet közvetlenül elérni csak az SRAM-on keresztül. Minden esetre az AVR studio fordításkor hibaüzenet küld, ha out-ot írok.

Köszi mátrix!
(#) PLaci válasza zeusz7 hozzászólására (») Márc 28, 2008 /
 
Szia!
Köszi a választ. Mint írtam nem néztem utánna, csak valahogy az ugrott be. hogy ezeket a regisztereket out utasítással érem el. Bocsi a félrevezetésért!
(#) PLaci válasza PLaci hozzászólására (») Márc 28, 2008 /
 
Lehet, higy csak elírás,de a
ldi temp,0b00100001 ;ADLAR->8 bit,AD0_on
sor nem azt jelenti, hogy az AD1 lesz az aktív bemenet? a 0b00100000 jelentené az AD0-t
(szerintem) Ha megint félrevezetlek bocsi...
(#) zeusz7 válasza PLaci hozzászólására (») Márc 28, 2008 /
 
áá köszi 88-szor átnéztem és nem vettem észre, de igazad van!
(#) Frankye válasza IMi hozzászólására (») Márc 28, 2008 /
 
Köszönöm! Akkor jól értettem a dolgot.
Következő: »»   51 / 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