Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Az ilyen hibakra is jobban figyelj oda:
Hű ez mekkora találat! Én nem is láttam! A TRISC a TRISB kódértéke lesz, így most nem is tudom fejből mennyi a bináris értéke...
A PIC konfiguráció-beállításait még nem néztem át (mármint hogy mit hogyan kell). A program elején a konfigurációs beállításokat átmásoltam a másik projektben használt asm-emből, amit pedig anno Icserny írt nekem: Bővebben: Link
Ja és persze erre a PIC-re ez a config nem tetszett a fordítónak, ezért azokat a sorokat amelyekre error-t írt, azokat megjegyzésbe tettem. Túl optimista voltam hogy menni fog?
Na okés, de az oszcillátor részt kikommentezted a programodban.
Akkor nézd át ezt a részt az adatlapban(Config bájtokat!), és a fenti hibákat is javítsd és tedd fel a kódot újra, ha nem működik! Még annyit, hogy nézz fel az oldalamra, és próbáld meg úgy beállítani a konvig biteket, mert az jobban követhető az adatlap segítségével. Később ráérsz a támogatott módszert használni. Ne törődj a warningokkal se! Idézet: „mennyi a bináris értéke...” ... abból is csak 8 bit kerül a w-be.
Ahogy watt irta adatlapban. Az MPLAB helpjében is benne van: PIC18Config Settings. Figyelj oda, mert nálad 'FOSC' van (még a kommentben), de ez nem lesz jó!
Betettem ezt a sort:
Idézet: „config OSC = INTIO67” Így már világítanak a LED-ek. A gond az, hogy RC6, RB6 és az RD4, RD5, RD6 kivételével az összes. (Az utolsó három nem is baj, mert azokat bemenetre állítottam.) Igyekszem rájönni miért... Szerk.: Meg is van: törölni kellett az összes portot (clrf LATA, clrf LATB stb...) Idézet: „Meg is van: törölni kellett az összes portot” de... az adatlapban minden egyes port beállításáról egy rövid példa kód is látható assemblerben... :nezze:
Egy újszülöttnek minden C18 értékadás új! Most olvastam a Microchip egyik fórumán, hogy kér 8 bites szám 16 bites szorzatát így lehet legegyszerűbben eltárolni:
A sima c = a*b hatására csak az alsó 8 bit tárolódna el, így meg mind a 16 bit.
No meg az sem szerencsés, hogy a movlw parancs van mindhárom sorban, így a TRISA és TRISB regiszterekbe az égvilágon nem töltődik semmi új.
Hát ez aztán érdekes.
HI-Tech nél elég ha így írom:
Hardveres SPI kommunikációval lenne gondom:S
Tegyük fel, hogy van egy PIC, ami master, és van még 2 slave. Az 1. slave küld a masternek. De a a master honnan tudja, hogy melyik slavetől kap?? Ugye, ha a master küld, akkor ss-l kitudom választani, h melyik slavenek mennyen. Masternél, vétel esetén is az ss-l kell kiválasztani a slavet? Ha igen, akkor honnan tudom, h melyek slave kell??
Az SS jelentése Slave Select (szolga kiválasztása). Master üzemmódban nem játszik szerepet. Mindkét slave-hez kell egy-egy kimenő bitet rendelni, amin keresztül megkapják a SEL jelet. Azt neked kell tudni, hogy éppen melyiket aktiválod. Ebből derül ki, hogy ki küldi az adatot...
Idézet: „movlw TRISA” Nem hiszem, hogy ezt akarnad! Mar nem eloszor latok hasonlo hibat abban amit csinalsz, talan ez segit, hogy megjegyezd az utasitasokat: 1. Az utasitas 3 betu. MOV(lw) MOV(wf) MOV(f) 2. A kovetkezo betu(k) azt jelzik honnan hova... mov(LW) => MOVe Literal to Wreg... mov(WF) => MOVe Wreg to File... mov(F),W => MOVe File to Wreg... mov(F),F => MOVe File to File... Ha igy gondolsz az utasitasokra akkor talan nehezebben rontod el.
Felteszed a jelenlegi verziót élve boncolásra?
Tudna valaki segiteni? Elakadtam:S
Még mindig SPI. Itt egy program részlet. Azt szeretném megvalósitani, hogy main-ből meghivom az SPI_kuld függvényt, ami az spi_vett_buffer -be letárolja az infot. Ez egy 4 elemű tömb. Azt szerettem volna megcsinálni, hogy globális változóként létrehozom a tömböt és a mútatóját. Így a függvény futásakor a tömböt feltudnám tölteni. A gondom az, hogy a forditom hibát jelez, nem ismeri fel a tömbös cuccokat. A deklarációját elhelyeztem már a main előtt is, meg a main első utasitásaként is, de így se volt jó. Mi lehet a baj??Nekem fogalmam sincs:S Program :
Trudnai, Watt!
Ha tapipadozok, akkor hajlamosabb vagyok a CTRL+C és CTRL+V használatára. Ezt valahonnan másoltam és elfelejtettem átírni. De mondom, azóta megoldottam és megy tök jól a kis negyven lábú 18f4520-am! Már írtam is egy programocskát ami lekezeli a 4*3-as tasztatúrát és a lenyomott gombok szerint kapcsolja be a LED-eket. Bár még van egy kis szépséghibája aminek oka szerintem a PIC magas frekvenciájában és a nyák huzalozásában keresendő... Holnap már ha minden jól megy akkor LCD kijelzőt fogok működtetni.
A tombot rakd ki globalisba, a pointer pedig nyugodtan lehet lokalis, de ne a main lokalisa legyen, hanem az SPI_kuld-e. Amugy jobban jarsz akkor is vagy static vagy meg inkabb ha overlay starolasi osztalyt adsz meg ezeknek a mutatoknak.
Amugy az SPI_kuld fuggveny deklaracioja vagy legyen main elott, vagy ha igy van mogotte, akkor egy definiciot adj meg a main elott... Ja, es ha hiba uzenet van, akkor majd azt is idezd be, mert en most itt csak ugy hasamra utve valaszoltam
A nyák huzalozása szerintem nem játszik szerepet. A PIC frekvenciája igen, de annyit súgok, hogy nem a frekvencia csökkentése a megoldás
Ezt örömmel hallom! Látod megy ez! Nagyon nehezen álltál neki, pedig én tudtam, hogy kirázod a kisújjadból az alapokat. Sok sikert a továbbiakra is és jó szórakozást!
Ja igen, most jön majd a megszakítások megismerése, és az abból való kezelése a különböző időzítést igénylő dolgoknak, mint pl. a gombkezelés, kijelzés, stb. stb.
Még mindig nem jó. Nem látja az SPI_KULD_TOMB -t. Lehet, hogy annak nem jó a láthatósága?
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F45J10 "main.c" -fo="main.o" -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa- D:\Szakdolgozat\Progi\szakdoga\InitSPI.h:54:Error [1105] symbol 'spi_kuld_buffer' has not been defined D:\Szakdolgozat\Progi\szakdoga\InitSPI.h:54:Error [1131] type mismatch in assignment D:\Szakdolgozat\Progi\szakdoga\InitSPI.h:57:Error [1105] symbol 'SPI_KULD_TOMB' has not been defined D:\Szakdolgozat\Progi\szakdoga\InitSPI.h:67:Error [1105] symbol 'spi_kuld_buffer' has not been defined D:\Szakdolgozat\Progi\szakdoga\InitSPI.h:67:Error [1131] type mismatch in assignment D:\Szakdolgozat\Progi\szakdoga\InitSPI.h:68:Error [1105] symbol 'SPI_KULD_TOMB' has not been defined Halting build on first failure as requested. Progi:
1. A legelejen kellene definialnod azt a szerencsetlen SPI_KULD_TOMB-ot, pl:
#define SPI_KULD_TOMB 4 2. A main-bol vedd ki azokat a tomboket es pointereket. Tudom, hogy csak kiserletezel es azert maradt benne, de nagyon zavaro igy 3. overlay int *spi_kuld_buffer_m; -- ez igy nem jo, ezert van az "InitSPI.h:54:Error [1131] type mismatch in assignmen" uzenet... Helyette "int overlay *spi_kuld_buffer_m;" kellene, de ha nem megy egyenlore vedd ki, nem oszt nem szoroz, csak max hoszabb lesz a kod...
Feltételezem azért, mert az SPI_KULD_TOMB nincs is deklarálva, nincs adva neki típus sem.
Nem vagyok benne biztos, hogy ez a tömb deklaráció helyes -e ezáltal. Gondolom így nem tudja értelmezni a tömb méretét. ui.: A kódot szerintem inkább csatold, mert (lehet, hogy csak nálam) de írtó mód "széthúzza" az oldalt (ha ez csak nálam történt meg, akkor elnézést).
Hangyányi időzítéseket tettem be a sorok közti váltások közé, így már majdnem tökéletesen működik. A baj akkor van ha egy sor mindhárom gombját lenyomom, mert akkor csak a középsőt és a jobboldalit érzékeli.
De rájövök miért...
1) igen az definiálva is van, csak lemaradt
#define SPI_KULD_TOMB 4 2)kivettem 3)cseréltem - nem jó kivettem overlay- t, csak int *spi_kuld_buffer_m; így se jó kisszee Nálam is széthúzza, legközelebb csatolom.
Érdekes
Létrehoztam egy új projektet. Ha a függvényt a main.c -be helyezem el (ekkor #include Ha áthelyezem a függvényt az spi_adas_vetel.h -be, (ekkor #include Ekkor hibát jelez a függvény végét jelentő }-jelnél. D:\kommunkikacio\spi_adas_vetel.h:52:Error: syntax error Szerintem mára már eléggé lefáradtam Az előbb rosszul csatoltam afájlt Már jó.
Hello
Egy picben engedélyezem az INT lábon a megszakítást felfutó élre, majd magas szintre kapcsolom azt a lábat, akkor megszakítás jön létre. Az INT lábat továbbra is magas szinten hagyom, ezután lekezelem a megszakítást, de mikor a program visszatér a főprogramba, akkor újra megszakítás fog generálódni, vagy csak akkor, ha alacsonyra húzom, majd ismét magasra az INT lábat? Üdv. Idézet: „de mikor a program visszatér a főprogramba, akkor újra megszakítás fog generálódni, vagy csak akkor, ha alacsonyra húzom, majd ismét magasra az INT lábat?” Idézet: „Egy picben engedélyezem az INT lábon a megszakítást felfutó élre” Ha felfutó élre engedélyezted, akkor csak felfutó élnél keletkezik megszakítás, állandó magas jelnél nem. |
Bejelentkezés
Hirdetés |