Fórum témák
» Több friss téma |
Ez nem kontroller. Ez egy programozható kombinációs hálózat, egy marék D flip-floppal kiegészítve. Leginkább ezek korai, butuska elődje.
Idézet: „TRISA = 0b1101111; de muszáj volt beírni utána hogy TRISA7_bit = 1;” És ha egyből megadod mind a 8 bitet? TRISA = 0b11101111
Sziasztok!
A következő kis programot írtam C18-ban:
PIC18F25K80-at használok és most ismerkedem vele és a C18-cal. A programnak elvileg az RA1-en levő ledet kellene villogtatnia, de nem csinálja. Szerintem azért, mert nem kapcsoltam ki a WDT-t. Hogyan tudom megtenni? HI-TECH C-ben a vezérlő könyvtárban megtalálható, hogy mikor mit kell írni és hogy egyáltalán melyik registert milyen név alatt lehet elérni, de itt nem. Csak annyit tudok, hogy a #pragma config WDT = OFF kódnak elvileg működni kéne, de nem teszi (E:\Adam Hollos\Elektro thecnika\Programozás\MBLAB projektek\C18\main.c:2:Error [1224] configuration setting 'WDT' not recognized ). A hozzászólás módosítva: Okt 11, 2012
Hello!
10000 az még lehet, hogy kevés, lehet, hogy gyorsan villog, csak nem veszed észre, de ha egyáltalán nem világít, akkor az is lehet, hogy PORTA analógnak van beállítva.
Szia!
Most már oszcilloszkóppal nézem és csak 1000000-rel villogtatom, de csak a hálózati szinuszjel által keltett zajt látom (igaz a - fele le van "vágva" ) Hogyan tudom állítani, hogy analóg legyen vagy sem. Mármint, hogy tok mutatni azokra a registerekre? A hozzászólás módosítva: Okt 11, 2012
A fordító folyton kidobja a következő hibaüzenetet:
The Externed CPU Mode configuration bit is enabled, but the program that was loaded was not built using externed CPU instructions. Therefore, your code may not work properly. Akkor is, ha beállítok pár konfigurációs bitet. Mit akar ezzel?
Azt akarja, hogy a konfigurációban a kiterjesztett utasításkészlet be van kapcsolva, de a betöltött kód nem kiterjesztett utasításkészletre van lefordítva.
Ez problémát jelent, a config-ban is és a fordító beállításainál is legyen kikapcsolva a kiterjesztett utasításkészlet. A led villogtatást pedig először próbáld RB7..4 közül valamelyiken (azoknak talán alapértelmezetten nincs analóg funkciója), ha ott működik, akkor nézd meg az adatlapban az ADC-ről szóló részt. Talán valamelyik ADCON regiszterben lehet beállítani, hogy hány analóg bemenet legyen (és akkor a maradék digitális be/kimenet lehet) De ez itt egy kicsit off, mert igazából nem kapcsolódik a C nyelvhez.
ez kilistázza a konfigurációs lehetőségeket. Benne áll ez is: Idézet: „Extended Instruction Set: XINST = OFF Disabled XINST = ON Enabled” Tehát a #pragma config XINST = OFF kellett volna. De ezt inkább a PIC kezdőknek c. topikban folytassuk!
Jó, köszönöm mindenkinek a segítséget!
Sziasztok!
Lenne egy problémám. pic16f886+lcd Hitech C fordító alatt. Az lcd használatához a hitech lcd.c illetve lcd.h fájljait használom egy apró módosítással. Mivel kicsit másképp vannak a lábkiosztások az lcd-pic adatvonalain, ugyanis pont fentről lefelé mennek, tehát: lcd_data4 láb -> pic rb3 lcd_data5 láb -> pic rb2 lcd_data6 láb -> pic rb1 lcd_data7 láb -> pic rb0 lcd_rs láb -> pic rb5 lcd_en láb -> pic rb4 Ezért írtam rá egy programot ami szépen felcseréli a kapott adatokat, mivel ugye ha egy az egybe kiküldenék pl.: 0b1110-át, az 0b0111 lenne felcserélés nélkül. Nincs is ezzel semmi baj, szépen működik is addig, míg a lcd_rs láb és az lcd_en láb nem a portb-n van. De amint visszahelyezem a fent említett két lábra, egyből meghalt a dolog. Nem inicializál. Érdekes jelenség, hogy CCS alatt flex_lcd.c nevezetű gyári include fájllal hibátlanul fut. Hitech C alatt csak akkor megy, ha az lcd_rs és lcd_en nem azon a porton van, amin az lcd_data. Mit ronthatok el? Felteszem az lcd.c include fájlomat, egyébként ugyanolyan, mint a gyári, csak benne van egy pár sor, amivel ki kellett egészítenem (bitek felcserélése). Tudna valaki segíteni? Idézet: Az ilyen utasításokkal az a baj, hogy a port minden bitjét módosítja (itt pl. az RS jelet nullába viszi).„LCD_DATA = ( x & 0x0F ); //felső 4 bit” Próbáld így:
Vagy így:
Szia!
Ezek a sorok a PORTB mind a 8 bitjét állítják, amikor a RS = 1 mellett írsz ki karaktert, az adat írásával egyben törlöd is az RS -t. Inkább így:
Igen, teljesen igazad van. Nagyon köszönöm!
Sziasztok!
Az xc8 fordítóval szeretnék megismerkedni, de nem sikerül bekapcsolnom az RC5-re kötött ledet. (ASM-ben működik) Mit szúrhattam el?
Melyik vezérlővel próbálkozol?
16f676
Na itt megbuktam.
Átnéztem az adatlapot.Elvileg az RC5 csak ki/bemenet. A TRIS beállításával működnie kellene. A konfigurációs szóban sem látok turpisságot. Hacsak nem a BODEN bit. De ha az asm-ben is ugyanezzel a konfigurációs szóval megy, akkor ez is kilőve.
Direkt ezért választottam az RC5-öt. Visszaforgattam a hex fájlt is asm-re, de igen nehéz rajta eligazodni, mert ugye a free verzió "nem optimalizál olyan jól" ami azt jelenti, hogy telerakja a kódot fölösleges ugrásokkal, utasításokkal. Én a belső OSC beállításában nem vagyok biztos.
Szia!
Nekem nem ment a konfiguráció megadása csak a
formában. Az XC8 telepítési könyvtárában van egy könyvtár, benne a kontrollerek konfigurációs beállításai. Nézd meg ott a 16F676 -hoz tartozó állományt, annak alapján írd meg a beállítást.
Szia!
Az mplab nekem is aláhúzza pirossal a CONFIG-ot, de az ICprog-ban látszik, hogy jól állítja be. És éppen a pic16f676.h fájlt böngészem, ebben kéne lennie?
Megtaláltam, minden vezérlőhöz van egy html fájl.
A probléma megoldódott, hibás volt a 7805. Valami oknál fogva az assemler-ben írt kód szépen futott rajta (kb 6 sor), az xc8 pedig nem.
Sziasztok!
C30 -ban hogyan tudom megmondani a fordítónak hogy a következő programrészt milyen memória címtől kezdje? Valami olyasmire gondolok mint asm -ben az org direktíva. Nézegetem ezt: c30_users_guide de szerény angol tudásommal nem igazán értem.. talán a 4.8 fejezet tartozik ide, de még ebben sem vagyok biztos.
Egy függvény elhelyezése adott címtől kezdődő memóriahelyre:
Egy változó elhelyezése adott címre:
Memória kijelölése és lefoglalása a programmemóriában: Saját linker állományt kell készíteni (a gyári átszabásával). Az alábbi példában egy területet lefoglalunk a bootloadernek, a memória szekcióra my_boot névvel hivatkozunk:
Függvény, programrész elhelyezése a rezervált szekcióban:
Ezek a Linker Helpjében vannak leírva.
Köszönöm, így már megtaláltam a helpben. És valóban bootloadert szeretnék készíteni. A saját linker állomány készítést ha lehet mellőzném, itt mintha azt írná, hogy ha a bootloadert a programom elejére teszem, akkor nem szükséges saját linker?
De mit ért az alatt hogy a prog.mem. elején?
A honlapomon (a PIC-kwik projektben) is használok bootloadert. A bootloader a memória elején helyezkedik el, az IVT és AIVT táblák után, de az alkalmazáshoz saját linker állományt kell használni.
Idézet: Nem értem a kérdést. A prog. mem eleje az a prog. mem eleje. Nem a közepe és nem a vége... „De mit ért az alatt hogy a prog.mem. elején?”
Köszi, már nézem is.
Asm-ben programoztam sokat, és nem akar ráállni az agyam a C-re. C-ben is írtam már több kisebb programot, (néhány száz soros forráskód) de valahogy nem akar összeállni a kép. Képtelen vagyok komplexen kezelni az egészet, nem mindig értem mi folyik a háttérben. Ezért kérdezek hülyeségeket. Tehát arra gondoltam, hogy ugye a program memóriát tekintve a prog. elején az inicializáló rész van. A forráskódot tekintve még ködösebb a kép, main -on belül legyen az első? Vagy csináljak egy függvényt a main előtt neki? Idézet: Ízlés dolga. Gyakorlatilag mindegy. „main -on belül legyen az első? Vagy csináljak egy függvényt a main előtt neki?”
Köszönöm a segítséget, a fenti részt azt hiszem megértettem, és használom.
Amit nem tudok megoldani, hogy a program az én bootloaderemmel induljon, vagyis az inicializáló részt a fordító a my_boot területre fordítsa, vagy legalább válassza el a firmware (nevezzük most így a bootloaderrel frissíthető programrészt)-től. (Vagy a reset mutasson a my_boot elejére?) Vagy hogyan kéne azt megoldanom, hogy ha a firmware frissítés megáll (pl. tápfesz megszűnik) akkor utána újra lehessen kezdeni? Erre most még csak azt a megoldást látom hogy nem a bootloadernek, hanem a firmware-nek foglakok le egy szekciót, és ezt tudom frissíteni.. Nekem ez a megoldás is megfelel ha működhet, de érdekel hogy van-e más lehetőség? |
Bejelentkezés
Hirdetés |