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   27 / 840
(#) PLaci válasza gtk hozzászólására (») Júl 10, 2007 /
 
Szia!
Már megint én. Olvastam a kérdésedet. Írod, hogy az SS lábbal kell-e csinálni valamit. Lyukasra nézte a pdf-edet, de ott nem találok ss lábat.
Esetleg Vss-re gondoltál? Azt természetesen földre kell kötni. Ha nem erre gondoltál akkor bocsi.
Most kb fél órára el kell mennem, de utánna olvasom, ha írsz választ.
(#) gtk válasza PLaci hozzászólására (») Júl 10, 2007 /
 
Szia !

Jo lenne ha tudnal segiteni !
ATmega8 pdf 126. old: SS Pin Functionality.
Sajnos nem egyertelmu szamomra..

(#) PLaci válasza gtk hozzászólására (») Júl 10, 2007 /
 
Szia!
Na, most értem haza. Böngészem az ATmega8 pdf-jét ott azt írja, hogy az SS láb (Slave Select) Azt jelenti, hogyha 2 procit akarsz kommunikációra programozni akkor az SS láb dönti le, hogy melyik lesz a slave, illetve master. Az lesz a slave, amelyiken az ss lábat földre kötöd. A master feladata a shift regiszterekhez szükséges órajel biztosítása. Mivel a te projektednél a kijelző meghajtó lesz a slave, ezért nem kell az ss lábat földre kötnöd. Egyébként nem tudom mi a jobb, de ha nekem kellett volna megcsinálnom ezt a vezérlést, én nem használtam volna a hardware SPI-t, inkább megírtam volna az egészet software-ből következő képpen: Csinálsz 1 ciklus számlálót ami 8-ig számol. A kiírandó bytet beteszed egy "toló" regiszterbe. Shifteled Cary-n keresztül. Ha a Cary 1 akkor a kimeneti DATA láb is 1, Ha a Cary 0 akkor a kimeneti láb is 0, ezután a clock lábra generálsz egy lefutó élet, majd ki idő mulva vissza. Majd ciklusszámláló csökkentése.
Ha nem 0 akkor vissza a ciklus elejére.
Ha 0 akkor jöhet a következő byte betöltése a toló-ba
Egyébként ez csak egy ötlet... lehet a tied jobb, de ez szerintem könnyebben átlátható.
Na megint jól kiírtam magam... bocsi a többiektől, neked sok sikert!
(#) PLaci válasza PLaci hozzászólására (») Júl 10, 2007 /
 
Közben még eszembe jutott... írtad, hogy nincs szkópod. Nekem nagy segítség volt, hogy építettem egy teljesen egyszerű logik ceruzát, és a kimenetét még rávezettem egy 4 bites bináris számlálóra (pl 74LS93) aminek a kimeneteire kötöttem 4 db LED-t. Ez azért jó, mert ha a procid kimenete olyan rövid impulzusokat ad amit nem látnál a számláló azt is megszámolja és a kimenetén lévő ledeken leolvashatóvá válik.
(#) gtk válasza PLaci hozzászólására (») Júl 10, 2007 /
 
Nagyon koszonom a segitseged !

Igazabol softweresen megtudnam csinalni, de eddig meg nem hasznaltam SPI-t, meg akarom ismerni.

A kijelzo IC lefutol elnel(CLK) shiftel.
127. old. Clock Polarity vilagos, de a Clock Phase nem.(mi ez?)

Szerintem az masoknak is csak jo lehet ha valaki kifejti boven es erthetoen a dolgokat.
(#) PLaci válasza gtk hozzászólására (») Júl 10, 2007 /
 
Az azt jelőli, hogy az órajel, első, vagy a második élénél vegyen mintát az adatvonalból, trehát az lesz az érvényes jel. A CPOL azt határozza meg, hogy lefutó, vagy felfutó él, a CPHA pedig azt, hogy az órajel első, vagy a második éle. Ha megnézed az 59, és a 60-as ábrát számodra is egyből világos lesz.
(#) gtk válasza PLaci hozzászólására (») Júl 10, 2007 /
 
Ok, koszonom.
(#) MaSTeRFoXX válasza gtk hozzászólására (») Júl 12, 2007 /
 
Az SPI módnál le van írva, hogy a Slave select lábbal ha az AVR masternak van beállítva akkor nem tud mit kezdeni vele, tehát szoftverből kell azt a lábat vezérelgetni.

Most engem is szívat rendesen az SPI busz. Egy AT45DB161D típusú 16Mbites Dataflash memóriát akarok vele működésre bírni, de eddig csak a gyártóazonosítót próbálgattam belőle kiolvasgatni, de ahányszor módosítottam a kódon, hardveres és szoftveres próbálkozáskor minden módosításkor más kódot ad vissza Kezdek beleunni. Akkor is változik a visszajövő érték ha bekapcsolom az SPI2X bitet, tehát az AVR órajel/2 frekvencián menne az SPI busz. A dataflash memória meg kibírna 66megát is tehát az 1,7 mega ami rájut az biztos hogy nem sok...
Ráadásul a memória 3.4V-ról jár, az AVR felől feszültségosztóval kommunikálok, visszafelé pedig direktbe. De 3,4V-ot az AVRnek meg el kellene fogadnia H szintnek...
(#) zeusz7 válasza PLaci hozzászólására (») Júl 12, 2007 /
 
Bekötöttem az Attiny2313 és a PC közés egy MAX232-t, de még mindig nem látok semmit a hyperterminálon, amikor a programommal elvileg folyamatosan küldök egy "a" betűt.
Lehet az a baj, hogy a PC RS-232 csatlakozóján csak az RxD,TxD,GND van kivezetve és a többi láb meg lóg a levegőben?
(#) MaSTeRFoXX válasza zeusz7 hozzászólására (») Júl 12, 2007 /
 
A PC TX fele megy az AVR RX lábába, és fordítva.
A TXD,RXD, a fontos, továbbá a GND, a többit nem kell bekötni.
A megfelelő portot, baudratet, és az átvitelvezérlést ki kell kapcsolni. Milyen kvarc van az AVR-en?
[off]
Amúgy egy síma inverter IC-vel is lehet kommunikálni sorosan pl 74HC14. De 57600baudnál nagyobb sebességet nem tudtam elérni vele. Bár az a bekötés nem szabályszerű, meg nem a legmegbízhatóbb
(#) potyo válasza MaSTeRFoXX hozzászólására (») Júl 12, 2007 /
 
Mekkorák az ellenállások a feszültségosztóban? Próbáld meg, hogy kondenzátorokat teszel párhuzamosan az osztóval, úgy mint a szkópnál.

Ha jól nézem, min 0.6Vcc-nek kell lennie a lábon, hogy magas logikai szintnek érzékelje. Ha tudod, vedd lejjebb egy kicsit az AVR tápját, hátha nem mindig érzékeli a 3.4V-ot magas szintnek.
(#) MaSTeRFoXX válasza potyo hozzászólására (») Júl 12, 2007 /
 
Megpróbálom majd a kondenzátorokat. 330 és 680 ohmosak az ellenállások. A 0.6Ut belefér elvileg, 3V. Eléggé zavaró dolog hogy nem akar semmire se normálisan reagálni az IC
(#) zeusz7 válasza MaSTeRFoXX hozzászólására (») Júl 12, 2007 /
 
4MHz-es kvarc van rajta.
(#) MaSTeRFoXX válasza zeusz7 hozzászólására (») Júl 12, 2007 /
 
Az nem jó. Nagy a hibaszázalék a kommunikációnál. Nézd meg az AVR adatlapjában az USART résznél hogy milyen kvarcokkal működik hibátlanul. Pl 14,7456MHz, 3.686MHz stb
De valahol máshol is gond van, mivel el kéne indulnia a kommunikációnak, csak rossz karakterek jönnének be hiperterminálon
(#) PLaci válasza zeusz7 hozzászólására (») Júl 12, 2007 /
 
Szia!
Én még mindig hadware hibára gyanakszom. Nem is értem a levelekben mi az a 3V. Annyiról járatod a procit? Elvileg az RS 232-nek 5V kellene. Arról simán menne az ATMEL procid is. Esetleg még a hiperterminál beállításokban van egy olyan, hogy milye hardwerkapcsolat legyen (flow kontrol) ott mindent ki kell kapcsolni. Mind a softwarest, mind a hardwarest. Pontosabban nem tudommegírbi, mert nálam nincs a gépen windows, csak emlékezetből írom. Esetleg becopyzok ide egy pici forrást, amit a kedvedért jó bőven felkommenteztem. felkommenteztem. Igaz ez 8Mhz órajellel megy így 19200 baud az átviteli sebesség. Ha 4 mhz az órajeled nyilván 9600-ra kell állítani. Ime a "szösszenet"

------------------------------------------------------------------
.include "tn2313def.inc"

.dseg
.def temp=R16
.def vasmacs =R17
.def tszaml_2 =R18
.def tszaml_1 =R19

#define LED PORTB,PB0

.cseg
.org 0x0000

rjmp START
.org 0x30
cmd: .db "Hello world!", 0x0d, 0


delay300: ldi tszaml_2, 6 ; 6*delay50
rcall delay50
dec tszaml_2
brne delay300 +1
ret

delay50: ldi tszaml_1, 50 ; 50*delay1
rcall delay1
dec tszaml_1
brne delay50 +1
ret

delay20: ldi tszaml_1, 160 ; 160*delay1
rcall delay1
dec tszaml_1
brne delay20 +1
ret

delay1: ; 1 elvileg 0,125mS
ldi vasmacs, 250 ; 1
dec vasmacs ; 1
nop ; 1
brne delay1+1 ; 1/2
ret

START:
cli
ldi temp, 0xDF ; stack be�ll�t�sa
out SPL, temp
ldi temp, 0x00 ; PORTB mind 0
out PORTB, temp
ldi temp, 0xFF ; �s kimenet
out DDRB, temp
; USART init:
ldi temp, 0b01001000 ; Enable TX,TXCIE
out UCSRB, temp
ldi temp, 0b00000110 ; USZ1+USZ2= 8 databit,no paritas, 1 stopbit
out UCSRC ,temp
clr temp
out UBRRH, temp
ldi temp, 25 ; Baudgenerator 8Mhz orajelnel 19200 Baud
out UBRRL, temp
vissza:
ldi zl,low(cmd*2)-1 ; X regiszter feltoltese a Hello kezdetevel
ldi zh,high(cmd*2)
kellmeg:

inc zl ; R26 novelese, mert 2. byte kell
lpm temp, Z ; beolvassa temp-be
cpi temp, 0x00 ; 00?
breq vege ; ha igen, nincs tobb kiirnivalo
rcall TxD ; Elmegy a kiiro rutinra rjmp kellmeg
TxD:
sbis UCSRA, UDRE ; megvarja meg szabad a puffer
rjmp TxD ; majd a temp-ben levo bytot
out UDR,temp ; kiteszi soros portra
ret

vege: ldi temp, 0x0a
rcall TxD
ldi temp, 0x0d
rcall TxD
villogo:
rcall delay300
cbi LED
rcall delay300
sbi LED
rjmp villogo

rjmp vege
----------------------------------------------------------------------

Ez kiírja hogy Hello word, és utánna villogtat egy LED-t
Sok sikert!

ui. Ha nem, szabad ilyet csinálni a listán akkopr bocsi....
(#) PLaci válasza PLaci hozzászólására (») Júl 12, 2007 /
 
Megint én.
A forrást figyelmesen nézd át, mert valahogy ez a becopyzás kicsit összekutyulta.
Nem minden esetben csinált új sort oda ahová kellett volna De miért???
(#) gtk válasza MaSTeRFoXX hozzászólására (») Júl 13, 2007 /
 
Hat nekem nem jon ossze ez az SPI VFD dolog
Nagyon egyszeru az egesz, de nem mukodik sehogy sem.
500kbps a javasolt ativitel, probaltam sokkal kissebbel is, de nem megy.
(#) PLaci válasza gtk hozzászólására (») Júl 13, 2007 /
 
Szia!
Még mindig amondó vagyok írd meg softwaresen. Jelölj ki 2 neked tetsző portbitet adatnak, és clock-nak, és billegtesd softwareből. Ha majd így megy, akkor próbálkozz az SPI-vel.
(#) gtk válasza PLaci hozzászólására (») Júl 13, 2007 /
 
Szia !

De ilyen nincs hogy nem megy az SPI (vagy mi nem megy?)
(#) gtk válasza PLaci hozzászólására (») Júl 13, 2007 /
 
Nem ertek egy fontos dolgot.

VFD IC: "SCLK: Shifts data at the falling edge of SCLK"

Tehat lefuto elre shiftel. Az SPI alapbol hogy shiftel? (igaz mar mindenfele bitconfiggal probalkoztam .. es tobbfele atviteli sebesseggel 500kbps-tol lefele.Csak eltalaltam volna normalishoz hasonlo mukodest.
(#) potyo válasza gtk hozzászólására (») Júl 13, 2007 /
 
Az SPI-nél nincs meghatározva, hogy mikor shifteljen. A kontrollereknél állítható, hogy az órajel magas vagy alacsony szintjénél lökje ki a következő bitet a kimenetre.

Ezért jobb lenne, ha megírnád szoftveresen, és megnéznéd, hogy akkor megy-e. Ha megy, akkor a programban van a hiba, ha nem, akkor meg nem.
(#) PLaci válasza gtk hozzászólására (») Júl 13, 2007 /
 
Ha a procid (remélem ATMega8) master módban van, akkor az SPCR regiszer CPOL bitje határozza meg a Clock jelet.
Ha a CPOL 0 akkor az érvényes adatot felfutó, ha a CPOL 1 akkor lefutó éllel jelzi.
Elméletileg neked a lefutó élű működésre lenne szükséged.
(#) zeusz7 válasza PLaci hozzászólására (») Júl 13, 2007 /
 
köszi
Megpróbálom a te programoddal és átnézek mindent újra
(#) PLaci válasza zeusz7 hozzászólására (») Júl 13, 2007 /
 
Ha az enyémmel sem megy, akkor biztos, hogy hardware, mert az a progi ebben a pillanatban is megy itt az asztalomon.
(#) zeusz7 válasza PLaci hozzászólására (») Júl 13, 2007 /
 
Na a következő a helyzet, amit nem értek:
Oszcilloszkóp híjján váltakozó feszültséget mértem, hogy kijön-e a jel a mikrokontrollerből, illetve a max232-ből. A mikrokontrollerből 10,2V váltakozó feszültség jön ki, amikor fut a program, de a max232-ből a műszerem szerint 0V.

Ha simán földre teszem a max232 bemeneti TxD-jét, akkor kijön a +8V körüli érték, ha meg tápra, akkor a -8V, tehát látszólag jó.

A másik, ami furcsa volt, hogy sikerül vmi jeleket vennem a PC-vel, de mindig más jött, illetve csak akkor jött vmi amikor elvettem a tápot a mikrokontrollerről

Tehát egy kicsit megkavarodtam, hogy lehet a probléma...
(#) PLaci válasza zeusz7 hozzászólására (») Júl 13, 2007 /
 
Az én programom van benne?
Ha igen, akkor azt írd meg, hogy elkezd-e villogni (vibrálni) a LED. Ha igen, az azt jelenti, hogy a program végigfutott, tehát kiadta a Hello world impulzussorát.
Nem akarsz egy logik ceruzát építeni? Hidd el meghálálja a belefektetett munkát, ráadásul filléres dolog. Szerintem a kikapcsolásnál látható kriksz-krakszok a port miatt jönnek. Megfigyeltem, ha egy kimenetre LED-t kötök, akkor kikapcsoláskor felvillan. Szerintem ezeket az impulzusokat látod a monitoron. Már csak félve merem megkérdezni ugye a szintillesztő IC bemenete at ATtiny2313 3-as lábán van?
Nem tudnál scannelni egy rajzot arról amit összeraktál? Valami nagy szívás van, mert annak menni kell. Egyszerű mint egy faék..
(#) zeusz7 válasza PLaci hozzászólására (») Júl 13, 2007 /
 
A te programod fut, de nem villog a PB0-ra kötött LED.

Mi az a logikai ceruza?

Az Attiny2313 TxD kimenete (3-as láb) van a MAX232 bemenetére (11-es láb) kötve. Mellékelem a szedett-vedett elvi rajzot, amit megcsináltam.

köszi a segítséget

network.JPG
    
(#) zeusz7 válasza zeusz7 hozzászólására (») Júl 13, 2007 /
 
Bocsi, egy helyen új sort kellett beszúrni a programodba ahogy mondtad, de eddig nem vettem észre és így már villog az a led.
(#) zeusz7 hozzászólása Júl 14, 2007 /
 
Nem lehet hogy hyperterminallal van a gond? Tud vki vmi más programot amivel figyelni lehet a soros portot?
(#) MaSTeRFoXX válasza zeusz7 hozzászólására (») Júl 14, 2007 /
 
Jó az a hiperterminál, nálam működni szokott...
Következő: »»   27 / 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