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
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.
Szia !
Jo lenne ha tudnal segiteni ! ATmega8 pdf 126. old: SS Pin Functionality. Sajnos nem egyertelmu szamomra..
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!
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.
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.
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.
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 ![]() 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... ![]()
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?
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
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.
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
4MHz-es kvarc van rajta.
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
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....
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 ![]()
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.
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.
Szia !
De ilyen nincs hogy nem megy az SPI (vagy mi nem megy?) ![]()
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.
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.
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.
köszi
![]() Megpróbálom a te programoddal és átnézek mindent újra
Ha az enyémmel sem megy, akkor biztos, hogy hardware, mert az a progi ebben a pillanatban is megy itt az asztalomon.
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...
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..
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
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.
Nem lehet hogy hyperterminallal van a gond? Tud vki vmi más programot amivel figyelni lehet a soros portot?
Jó az a hiperterminál, nálam működni szokott...
|
Bejelentkezés
Hirdetés |