 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Sob Jan 21, 2006 8:42 pm Naslov sporočila: Microchip C 18 in LCD |
|
|
LP
Imam eno vprašanje za mojstre v C-ju.
V microchipovem C 18 je funkjija XLCD, v kateri so v originalu definirani pini za LCD.
Vsi pini so na PORTB in sice tako , da so D4-D7 na spodnjih štirih bitih porta-B, E,RS in R/W pa so naslednji trije biti.
Če lcd priklopin tako, kot je definirano v originalnem XLCD.h potem vse dela OK.
Problem nastane, ko [slovenščina je zame španska vas] želim spremeniti priključitev LCD-ja. V navodilih za xlcd lepo piše da je potrebno v XLCD spremeniti te pine. Pine spremenim glede na mojo aplikacijo, ponovno prevedem program pa stvar ne deluje.
Ampak to še ni vse. Za foro priklopim LCD po originalni varijanti, čeprav sem spremenil pine v XLCD, stvar deluje. Za foro še enkrat vse pine dam pod komentar v XLCD-ju prevedem še enkrat (stvar nebi smela delovati v nobenem primeru) ampak ševedno dela z originalno priključitvijo.
Če kdo ve, v to ne dvomim, bi prosil za kao informacijo glede tega, kako LCD v C-ju spravit na svojo željeno kombinacijo pinov.
LP |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Sob Jan 21, 2006 8:49 pm Naslov sporočila: |
|
|
V kaj se pa prevede? A nima C18 tudi možnosti ogleda assemblerske kode?
Si prepričan, da spreminjaš nastavitve v datoteki, ki je vključena v prevajanje tvojega projekta? |
|
Nazaj na vrh |
|
 |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Sob Jan 21, 2006 8:59 pm Naslov sporočila: |
|
|
LP
V levem zgornjem kotu v MPLABU je drevo, v katerem so datoteke, ki jih vključuje tvoj projekt.
V tem drevesu vključim v projekt datoteko XLCD.h potem dvakrat kliknem nanjo, da se odpre, popravim pine, jo shranim, shranim projekt in dam prevajat.
V source kodi pa imam še napisano
#include delays.h
#xlcd.h
...
...
prevede vse OK, dela pa posvoje.
Nevem, če je to pravi način, mogoče obstaja še kakšna druga varianta.
LP |
|
Nazaj na vrh |
|
 |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Sob Jan 21, 2006 9:01 pm Naslov sporočila: |
|
|
LP
Zatipkal
Tamle sem mislil napisat
#include xlcd.h
LP |
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Sob Jan 21, 2006 9:02 pm Naslov sporočila: |
|
|
Tam kjer imaš source za to knjižnico mora biti ena .bat datoteka, ki jo je potrebno zagnati, da ti prevede knjižnico (in prepise staro), ampak pazi kaj zaganjaš, ker ti lahko tisto zelo dolgo dela. Jaz sem enkrat dal makeall.bat in sem potem čakal ene par ur. Tako da moraš poiskati točno kaj moraš zagnati. Najhitreje in verjetno tudi najpregledneje pa bi bilo, da si skopiraš to knjižnico v svoj projekt in si jo prirediš po svojih potrebah (npr. lahko si tudi spremeniš kakšna imena ali način vnašanja spremenljivk). |
|
Nazaj na vrh |
|
 |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Sob Jan 21, 2006 9:16 pm Naslov sporočila: |
|
|
LP
Djurodrljaca, to zadnjo varijanto bi tud sam najraje imel, sam ne vem kako bi to iozvedu. Če lahko malo bol podrobno opišeš ta način.
Bom poskusu, zagnat tele bat datoteke:
- build.bat
- makeclib.bat
- makeplib.bat
če bo kaj od tega.
LP |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Sob Jan 21, 2006 9:21 pm Naslov sporočila: |
|
|
Kreiraj svojo .c datoteko, ter jo vključi v svoj projekt. Potem pa enostavno prekopiraj vsebino xlcd.c v to, novo datoteko ter poskusi prevesti.
Tisto z assemblerjem sem pa takole mislil - meni CCS C compiler na željo vrže ven tudi datoteko, kjer so vsi asm ukazi:
Koda: |
.................... void lcd_send_byte( BYTE address, BYTE n ) {
....................
.................... lcd.rs = 0;
005A: BCF 06.1
.................... while ( bit_test(lcd_read_byte(),7) ) ;
*
0082: MOVF 78,W
0083: MOVWF 3E
0084: BTFSS 3E.7
0085: GOTO 088
0086: BCF 03.5
0087: GOTO 05B
.................... lcd.rs = address;
0088: BTFSC 3C.0
0089: GOTO 08D
008A: BCF 03.5
008B: BCF 06.1
008C: BSF 03.5
008D: BTFSS 3C.0
008E: GOTO 092
008F: BCF 03.5
0090: BSF 06.1
0091: BSF 03.5
.................... delay_cycles(1);
0092: NOP
.................... lcd.rw = 0;
0093: BCF 03.5
0094: BCF 06.2
.................... delay_cycles(1);
0095: NOP
.................... lcd.enable = 0;
0096: BCF 06.0
.................... lcd_send_nibble(n >> 4);
0097: BSF 03.5
0098: SWAPF 3D,W
0099: MOVWF 3E
009A: MOVLW 0F
009B: ANDWF 3E,F
009C: MOVF 3E,W
009D: MOVWF 3F
009E: BCF 03.5
009F: CALL 049
.................... lcd_send_nibble(n & 0xf);
00A0: BSF 03.5
00A1: MOVF 3D,W
00A2: ANDLW 0F
00A3: MOVWF 3E
00A4: MOVWF 3F
00A5: BCF 03.5
00A6: CALL 049
.................... }
00A7: RETLW 00
|
|
|
Nazaj na vrh |
|
 |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Sob Jan 21, 2006 9:47 pm Naslov sporočila: |
|
|
LP
To da bi skopiral v .c datoteko in prevedel ne dela.
Zdele sem pognal makeall.bat bom videl kaj bo ta naredul.
LP |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Ned Jan 22, 2006 12:17 am Naslov sporočila: |
|
|
Zakaj ne bi delalo? Kaj javi? |
|
Nazaj na vrh |
|
 |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Ned Jan 22, 2006 11:27 am Naslov sporočila: |
|
|
LP
Ne nič ne javi, prevede vse OK, dela pa še vedno po starem.
Program se v PIC sigurno zapeče, ker spreminjam napise na lcd-ju tako da videm al se je res zapeku al ne.
Sem včeraj pognal makeall.bat pa je še vedno isto.
Za znoret.
LP |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Ned Jan 22, 2006 11:46 am Naslov sporočila: |
|
|
Poznaš PIC assembler? Zagotovo ti mora C-18 kreirati neko datoteko z vsebino, ki je podobna tisti, ki sem jo nekaj postov nazaj pripel! Kaj tam noter piše? Daj tisto datoteko sem prilimaj. |
|
Nazaj na vrh |
|
 |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Ned Jan 22, 2006 12:09 pm Naslov sporočila: |
|
|
LP
Če bi [slovenščina je zame španska vas] tako datoteko kje najdu, bi ti jo pripel, tako pa ker je ni ?? je ne morem.
Sam to lahk še povem , da kakeršne kol spremembe delam v tem XLCD, je kod da nebi nič naredu.
LP |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Jan 22, 2006 12:11 pm Naslov sporočila: |
|
|
Offtopic;
Pa je prevajalnik toliko "pameten" da zna ustrezno pripraviti tudi podatke za LCD, če zamenjaš pine v okviru porta?
Recimo v assemblerju sam za izpis na diplej naredim tabelo:
Procedura iz nje "vlači" karakter po karakter (8bitna vrednost)
Če je displej priključen standardno, lahko to vrednost pošljem direknto na njega (4 ali 8 bitno) sicer bi moral napisati ustrenzo proceduro, ki bi ustrezno pretvorila poslano vrednos. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
saso Član


Pridružen-a: Čet 18 Mar 2004 10:16 Prispevkov: 510 Aktiv.: 2.15 Kraj: Trbovlje
|
Objavljeno: Ned Jan 22, 2006 12:36 pm Naslov sporočila: |
|
|
lP
Tole je originalna datoteka XLCD.h, v kateri sem samo popravil tisti del, kjer se definirani E,RS in R/W pini in TRIS porti.
Eno vrstico nad temi definicijami piše, da so to samo primeri in da za svojo aplikacijo spremeniš te nastavitve.
Sam to men ne dela.
#ifndef __XLCD_H
#define __XLCD_H
/* PIC18 XLCD peripheral routines.
*
* Notes:
* - These libraries routines are written to support the
* Hitachi HD44780 LCD controller.
* - The user must define the following items:
* - The LCD interface type (4- or 8-bits)
* - If 4-bit mode
* - whether using the upper or lower nibble
* - The data port
* - The tris register for data port
* - The control signal ports and pins
* - The control signal port tris and pins
* - The user must provide three delay routines:
* - DelayFor18TCY() provides a 18 Tcy delay
* - DelayPORXLCD() provides at least 15ms delay
* - DelayXLCD() provides at least 5ms delay
*/
/* Interface type 8-bit or 4-bit
* For 8-bit operation uncomment the #define BIT8
*/
/* #define BIT8 */
/* When in 4-bit interface define if the data is in the upper
* or lower nibble. For lower nibble, comment the #define UPPER
*/
//#define UPPER */
/* DATA_PORT defines the port to which the LCD data lines are connected */
#define DATA_PORT PORTB
#define TRIS_DATA_PORT TRISB
/* CTRL_PORT defines the port where the control lines are connected.
* These are just samples, change to match your application.
*/
#define RW_PIN PORTCbits.RC6 /*PORT for RW */
#define TRIS_RW DDRCbits.RC6 /* TRIS for RW */
#define RS_PIN PORTCbits.RC5 /* PORT for RS */
#define TRIS_RS DDRCbits.RC5 /* TRIS for RS */
#define E_PIN PORTCbits.RC4 /* PORT for E */
#define TRIS_E DDRCbits.RC4 /* TRIS for E */
/* Display ON/OFF Control defines */
#define DON 0b00001111 /* Display on */
#define DOFF 0b00001011 /* Display off */
#define CURSOR_ON 0b00001111 /* Cursor on */
#define CURSOR_OFF 0b00001101 /* Cursor off */
#define BLINK_ON 0b00001111 /* Cursor Blink */
#define BLINK_OFF 0b00001110 /* Cursor No Blink */
/* Cursor or Display Shift defines */
#define SHIFT_CUR_LEFT 0b00010011 /* Cursor shifts to the left */
#define SHIFT_CUR_RIGHT 0b00010111 /* Cursor shifts to the right */
#define SHIFT_DISP_LEFT 0b00011011 /* Display shifts to the left */
#define SHIFT_DISP_RIGHT 0b00011111 /* Display shifts to the right */
/* Function Set defines */
#define FOUR_BIT 0b00101111 /* 4-bit Interface */
#define EIGHT_BIT 0b00111111 /* 8-bit Interface */
#define LINE_5X7 0b00110011 /* 5x7 characters, single line */
#define LINE_5X10 0b00110111 /* 5x10 characters */
#define LINES_5X7 0b00111011 /* 5x7 characters, multiple line */
#define PARAM_SCLASS auto
#define MEM_MODEL far /* Change this to near for small memory model */
/* OpenXLCD
* Configures I/O pins for external LCD
*/
void OpenXLCD(PARAM_SCLASS unsigned char);
/* SetCGRamAddr
* Sets the character generator address
*/
void SetCGRamAddr(PARAM_SCLASS unsigned char);
/* SetDDRamAddr
* Sets the display data address
*/
void SetDDRamAddr(PARAM_SCLASS unsigned char);
/* BusyXLCD
* Returns the busy status of the LCD
*/
unsigned char BusyXLCD(void);
/* ReadAddrXLCD
* Reads the current address
*/
unsigned char ReadAddrXLCD(void);
/* ReadDataXLCD
* Reads a byte of data
*/
char ReadDataXLCD(void);
/* WriteCmdXLCD
* Writes a command to the LCD
*/
void WriteCmdXLCD(PARAM_SCLASS unsigned char);
/* WriteDataXLCD
* Writes a data byte to the LCD
*/
void WriteDataXLCD(PARAM_SCLASS char);
/* putcXLCD
* A putc is a write
*/
#define putcXLCD WriteDataXLCD
/* putsXLCD
* Writes a string of characters to the LCD
*/
void putsXLCD(PARAM_SCLASS char *);
/* putrsXLCD
* Writes a string of characters in ROM to the LCD
*/
void putrsXLCD(PARAM_SCLASS const MEM_MODEL rom char *);
/* User defines these routines according to the oscillator frequency */
extern void DelayFor18TCY(void);
extern void DelayPORXLCD(void);
extern void DelayXLCD(void);
#endif |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Ned Jan 22, 2006 12:43 pm Naslov sporočila: |
|
|
Nisem mislil tega. Poišči datoteko, ki ima ponavadi končnico .lst. V njej je zapisano v kaj se posamezni C stavki prevedejo v assembler. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|