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 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...
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 De miért???
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 |