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

Pridružen-a: Sre 03 Feb 2010 10:59 Prispevkov: 27 Aktiv.: 0.14 Kraj: Lendava
|
Objavljeno: Sre Mar 17, 2010 12:13 pm Naslov sporočila: PIC18F4585 + LCD 20x4 (KS0076B) problem pri izpisovanju |
|
|
Imam težavo z izpisovanjem na lcd. Uporabljam knjižnice lcd.h in lcd.c za hi-techov kompajler, sicer lite verzijo v mplabu. Knjižnice so za hd44780, vendar sem prebral na internetu, da je ks0076b kompatibilen z hd44780.
Inicializacija se po moje izvede brez problemov (kurzor utripa v zgornjem levem kotu), namesto izpisanih znakov pa dela samo velike presledke.
V delay.h piše:
Koda: |
Set the crystal frequency in the CPP predefined symbols list in HPDPIC, or on the PICC commmand line, e.g. picc -DXTAL_FREQ=20MHZ |
To mi ni jasno kam bi naj vpisal. V programu sem zato uporabil _delay(x), kjer je x število ciklov.
Sem bolj nov v tem in nimam idej kaj bi lahko še blo narobe? prosim za pomoč...
Opis: |
|
 Download |
Ime datoteke: |
lcd.c |
Velikost datoteke: |
2.21 KB |
Downloadano: |
6 krat |
Opis: |
|
 Download |
Ime datoteke: |
lcd.h |
Velikost datoteke: |
595 Bytov |
Downloadano: |
3 krat |
Nazadnje urejal/a dha Čet Mar 18, 2010 8:28 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.36 Kraj: Lovrenc na P.
|
Objavljeno: Sre Mar 17, 2010 1:00 pm Naslov sporočila: |
|
|
Koda: |
#ifndef _XTAL_FREQ
// Unless specified elsewhere, 4MHz system frequency is assumed
#define _XTAL_FREQ 4000000
#endif |
Definiraj pravilno frekvenco oscilatorja.
|
|
Nazaj na vrh |
|
 |
dha Član

Pridružen-a: Sre 03 Feb 2010 10:59 Prispevkov: 27 Aktiv.: 0.14 Kraj: Lendava
|
Objavljeno: Sre Mar 17, 2010 2:48 pm Naslov sporočila: |
|
|
ja oscilator mam 20mhz, to sem [slovenščina je zame španska vas] napisal pa ni pomagalo...
|
|
Nazaj na vrh |
|
 |
dha Član

Pridružen-a: Sre 03 Feb 2010 10:59 Prispevkov: 27 Aktiv.: 0.14 Kraj: Lendava
|
Objavljeno: Pon Mar 22, 2010 9:16 am Naslov sporočila: |
|
|
Ok sem rešil,
Napačno sem imel nastavljen ADCON1 register. Zdaj sem ga nastavil na 0x0F, tako so vsi analogni vhodi nastavljeni kot digitalni i/o.
Naslednji problem je, da ko priklopim lcd na druge pine, se dogaja isto kot prej: inicializacija se izvede, potem pa kurzor skoči na konec zadnje vrstice.
lcd je zdaj priklopljen na naslednje pine
RS => RA3 Data4 => D0
RW => RA2 Data5 => D1
E => RA1 Data6 => D2
Data7 => D3
rad bi ga priklopil na:
RS => RB4 Data4 => B0
RW => RB5 Data5 => B1
E => RC5 Data6 => B2
Data7 => B3
Koda: |
#include <htc.h>
#include "lcd.h"
#include "delay.h"
__CONFIG(1,IESOEN & FCMEN & HS);
__CONFIG(2,SWBOREN & BORV43 & WDTDIS);
__CONFIG(3,MCLREN & LPT1DIS & PBDIGITAL);
__CONFIG(4,XINSTDIS & DEBUGEN & LVPDIS & STVREN);
__CONFIG(5,UNPROTECT);
__CONFIG(6,WRTEN);
__CONFIG(7,0xffff);
void main(void)
{
TRISB = 0;
TRISC = 0;
//TRISD = 0;
//TRISA = 0;
lcd_clear();
lcd_init();
lcd_goto(0); // select first line
lcd_putch('a');
lcd_putch('2');
lcd_putch('3');
lcd_putch('4');
lcd_putch('5');
lcd_goto(0x40); // Select second line
lcd_puts("Hello world");
while(1);
}
|
Koda: |
#ifndef _XTAL_FREQ
// Unless specified elsewhere, 4MHz system frequency is assumed
#define _XTAL_FREQ 20000000
#endif
#include <htc.h>
#include "lcd.h"
#include "delay.h"
#define LCD_RS RB4 //RA3
#define LCD_RW RB5 //RA2
#define LCD_EN RC5 //RA1
#define LCD_DATA PORTB //PORTD
#define LCD_STROBE() ((LCD_EN = 1),(LCD_EN=0))
/* write a byte to the LCD in 4 bit mode */
void
lcd_write(unsigned char c)
{
DelayUs(40);
LCD_DATA = ( ( c >> 4 ) & 0x0F );
LCD_STROBE();
LCD_DATA = ( c & 0x0F );
LCD_STROBE();
}
/*
* Clear and home the LCD
*/
void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
DelayMs(2); //__delay_ms(2);
}
/* write a string of chars to the LCD */
void
lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)
lcd_write(*s++);
}
/* write one character to the LCD */
void
lcd_putch(char c)
{
LCD_RS = 1; // write characters
lcd_write( c );
}
/*
* Go to the specified position
*/
void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}
/* initialise the LCD - put into 4 bit mode */
void
lcd_init()
{
char init_value;
ADCON1 = 0x0F; // Disable analog pins
init_value = 0x3;
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
DelayMs(15); // wait 15mSec after power applied,
LCD_DATA = init_value;
LCD_STROBE();
DelayMs(5);
LCD_STROBE();
DelayUs(200);
LCD_STROBE();
DelayUs(200);
LCD_DATA = 2; // Four bit mode
LCD_STROBE();
lcd_write(0x28); // Set interface length
lcd_write(0xF); // Display On, Cursor On, Cursor Blink
lcd_clear(); // Clear screen
lcd_write(0x6); // Set entry Mode
}
|
|
|
Nazaj na vrh |
|
 |
tibi Član

Pridružen-a: Tor 16 Dec 2003 11:08 Prispevkov: 253 Aktiv.: 1.07 Kraj: bukovje
|
Objavljeno: Pon Mar 22, 2010 12:56 pm Naslov sporočila: |
|
|
Citiram: |
lcd_write(unsigned char c)
{
DelayUs(40);
LCD_DATA = ( ( c >> 4 ) & 0x0F );
LCD_STROBE();
LCD_DATA = ( c & 0x0F );
LCD_STROBE();
} |
Če se ne motim ko daš vse pine na portB z to funkcijo povoziš RS in RW in E.
L.P.
|
|
Nazaj na vrh |
|
 |
dha Član

Pridružen-a: Sre 03 Feb 2010 10:59 Prispevkov: 27 Aktiv.: 0.14 Kraj: Lendava
|
Objavljeno: Pon Mar 22, 2010 2:19 pm Naslov sporočila: |
|
|
kak bi to popravil?
|
|
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: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|