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


Pridružen-a: Pet 16 Dec 2005 17:48 Prispevkov: 183 Aktiv.: 0.77 Kraj: Loče
|
Objavljeno: Tor Mar 21, 2006 8:01 pm Naslov sporočila: I2C & 16F84 & Microbasic |
|
|
Zdravo,
imam en LCD zaslonček, poiskal sem njegov datasheet, ampak mi ga nikako ne uspe "zbudit"; PICe programiram pod basicom; za I2C imam podatkovno linijo na RA0 (pin 17), naslovna linija je RA1 (18 pin)
cikel za "inicializacijo" pa je naslednji (printscreen iz datasheeta):
http://freeweb.siol.net/tcugmas1/elektro/lcd.gif
a ima kdo kakšno rešitev za kakšen podoben primer I2C...
Hvala za kak nasvet in lp,
Toni
Opis: |
|
Velikost datoteke: |
30.41 KB |
Pogledana: |
37 krat |

|
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
|
Nazaj na vrh |
|
 |
tonic Član


Pridružen-a: Pet 16 Dec 2005 17:48 Prispevkov: 183 Aktiv.: 0.77 Kraj: Loče
|
Objavljeno: Tor Mar 21, 2006 8:16 pm Naslov sporočila: |
|
|
ja, točno ta
spet sem sestavil vezje na testni, ampak sedaj nočem delat pod ASMjem, ampak bi "vso" kodo prenesel v basic; pa zadeva "ne špila"...
tule je stara tema, oz. ko sem se lotil zadeve, iz drugega foruma
http://www.elektro-n.com/forum2/viewtopic.php?t=10051&highlight=ga628
kolikor sem jaz razbral iz datasheeta moram komunicirat preko I2C, frekvenca je 100KHz ali pa 400KHz, besede so lahko 4bitne (gornji printscreen) ali pa 8 bitne...
pa na LCDju se mi nič ne pokaže ... če proban stari ASM program, zadeva dela...
|
|
Nazaj na vrh |
|
 |
tonic Član


Pridružen-a: Pet 16 Dec 2005 17:48 Prispevkov: 183 Aktiv.: 0.77 Kraj: Loče
|
Objavljeno: Tor Apr 04, 2006 9:05 pm Naslov sporočila: |
|
|
Zdravo,
tule sem našel en primer kode v Cju; ker pa v Cju nisem tako domač bi prosil koga, kateri obvlada C in basic, če bi mi lahko nakazal inicializacijo LCDja v basicu (oz. kako bi v basicu preko I2CWRITE poslal pravilen niz znakov...)
koda v Cju pa je takšna:
Koda: |
// LCD_test.CPP
// ------------ Version 23.10.2001
// Borland IDE C++ 3.1
// bearbeitet: BBS WiLu, D.Schwarzer
// ----------------------------------------------
// Ziel-Hardware: SC12 mit DOS- / I2C-LCD-Anzeige
// Das Programm initialisiert die I2C-LCD-Anzeige TTR6030 der Fa.Conrad
// und gibt in..
// Spalte 1, Zeile 1 den Schriftzug 'GoBlack' aus .. und
// Spalte 1, Zeile 2 den Schriftzug 'BBS WiLu aus
#define I2C_lcd 0x74 // Adresse der LCD-Anzeige
#include <stdio.h>
#include <dos.h>
static union REGS inregs;
static union REGS outregs;
// SoftINTs des I2C-Bus
void i2c_init()
{
inregs.h.ah = 0x80;
int86(0xAA,&inregs,&outregs);
}
void i2c_release(void)
{
inregs.h.ah = 0x84;
inregs.h.al = 0;
int86(0xAA,&inregs,&outregs);
}
int i2c_scan(unsigned char start_addr, unsigned char end_addr)
{
inregs.h.ah = 0x81;
inregs.h.al = start_addr;
inregs.h.cl = end_addr;
int86(0xAA,&inregs,&outregs);
return outregs.h.al;
}
int i2c_transmit(unsigned char slave, char c)
{
inregs.h.ah = 0x82;
inregs.h.al = slave & 0xFE;
inregs.h.cl = c;
int86(0xAA,&inregs,&outregs);
if(outregs.x.flags&0x01){
return (int)outregs.h.al & 0x00FF;
}
return 0;
}
// Hauptprogramm von LCD.EXE
// -------------------------
void main (void)
{
i2c_init(); //I2C-Bus initialisieren
if(i2c_scan(I2C_lcd, I2C_lcd)!=I2C_lcd){
i2c_release(); return; //Test ob LCD vorhanden
}
i2c_release();
i2c_transmit(I2C_lcd,0x00); // RS = 0
i2c_transmit(I2C_lcd,0x25); // 2 Zeilen, Sonderinst on
i2c_transmit(I2C_lcd,0x06); // Sonderinst. Zeile/Spalte spiegeln
i2c_transmit(I2C_lcd,0x24); // Standardinst. on
i2c_transmit(I2C_lcd,0x0F); // Display, Cursor, Blinken on
i2c_release();
i2c_transmit(I2C_lcd,0x00); // RS = 0
i2c_transmit(I2C_lcd,0x01); // Display löschen
i2c_transmit(I2C_lcd,0x84); // DDRAM Adr.04 (1.Spalte, 1.Zeile)
i2c_release();
i2c_transmit(I2C_lcd,0x40); // RS = 1
i2c_transmit(I2C_lcd,'G'+128); // Buchstaben 'G' senden
i2c_transmit(I2C_lcd,'o'+128); // usw ..
i2c_transmit(I2C_lcd,'B'+128);
i2c_transmit(I2C_lcd,'l'+128);
i2c_transmit(I2C_lcd,'a'+128);
i2c_transmit(I2C_lcd,'c'+128);
i2c_transmit(I2C_lcd,'k'+128);
i2c_release();
i2c_transmit(I2C_lcd,0x00); // RS = 0
i2c_transmit(I2C_lcd,0xC4); // DDRAM Adr.C4(1.Spalte, 2.Zeile)
i2c_release();
i2c_transmit(I2C_lcd,0x40); // RS = 1
i2c_transmit(I2C_lcd,'B'+128); // Buchstaben 'B' senden
i2c_transmit(I2C_lcd,'B'+128); // usw ..
i2c_transmit(I2C_lcd,'S'+128);
i2c_transmit(I2C_lcd,' '+128);
i2c_transmit(I2C_lcd,'W'+128);
i2c_transmit(I2C_lcd,'i'+128);
i2c_transmit(I2C_lcd,'L'+128);
i2c_transmit(I2C_lcd,'u'+128);
i2c_release();
} |
HEX naslov LCDja je 0x74; pošilja se besede (8 bitov)...
sintaksa I2CWRITE je:
Koda: |
I2CWRITE DataPin,ClockPin,Control,{Address,}[Value{,Value...}]{,Label} |
ni mi čist jasno kaj pomeni spremenljivka Control in Label (Label je opcijski parameter?)
poskušam nekaj v stilu:
Koda: |
sdata var PORTA.0 'podatki na A0 pinu
sclock var PORTA.1 'ura na A1 pinu
addr VAR byte ' spremenljivka za naslov
addr = $74 ' naslov LCDja
cont CON $80 ' 80hex je tudi v initu v tistem programčku iz Cja
PAUSE 100 'pavza (za "inicializacijo" rabi 10ms, jaz počakam 100ms)
I2CWRITE sdata, sclock, cont, addr 'akcija
|
V glavnem, zadeva ne "zasveti"
Ima kdo kakšno idejo?
Hvala in lp,
Toni
p.s.
v prilogi primer I2C operacij za PCF2103 iz datasheeta
Opis: |
primer I2C operacij za PCF2103 iz datasheeta |
|
Velikost datoteke: |
45.21 KB |
Pogledana: |
14 krat |

|
|
|
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
|