PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HP12542R-DYO ansteuern!



JazzD
10.05.2006, 18:32
Hallo,
versuche mein HP12542R-DYO von pollin anzusteuern. Die beispielsoftware geht. Aber warum muss man das unbedingt in delphi schreiben, meiner meinung nach ENORM hässlich! ;). Auf jedenfall versuche ich die funktion des displays zu verstehen. Ich habe mir folgenden code gebaut. Er funktioniert irgendwie nur teilweise :(. Das init geht. Ich kann auch den pixeltest einschalten und zum beispiel invertieren. ABER wenn ich meine lcd clear funktion aufrufe passiert nicht wirklich viel. ein paar pixel werden verschoben aber mehr nicht. Sieht hier irgendjemand ob ich einen großen fehler mache? Vielleicht hat ja schonmal jemand hier das HP12542R-DYO angesteuert... Vielen Dank!



#include "s1d1565.h"
#include "font6x8s.cpp"

#define BIT(x) (1 << (x))
#define SETBITS(x,y) ((x) |= (y))
#define CLEARBITS(x,y) ((x) &= (~(y)))
#define SETBIT(x,y) SETBITS((x), (BIT((y))))
#define CLEARBIT(x,y) CLEARBITS((x), (BIT((y))))

#pragma comment(lib, "inpout32.lib")

short _stdcall Inp32(short PortAddress);
void _stdcall Out32(short PortAddress, short data);

#define outp(x,y) Out32(y,x)

#define En 0 // Strobe
#define RES 2 // Autofeed
#define CS 3 // Init
#define A0 1 // Select In

#define LCDP 0x378 // Dataport
#define LCD 0x37A // Controlport

unsigned char Control = 0x0; // Controlregister

void cbi(int adress,int value) // Clear Bit
{
CLEARBIT(Control,value);
outp(Control,adress);
}

void sbi(int adress,int value) // Set Bit
{
SETBIT(Control,value);
outp(Control,adress);
}

void cycle(int times)
{
for(int i=0;i<times;i++);
}

void lcd_writecom (unsigned char byte)
{
cbi(LCD,A0);
outp(byte,LCDP);
cbi(LCD,CS);
sbi(LCD,En);
cbi(LCD,En);
sbi(LCD,CS);
}



void lcd_init(void) //Initialize LCD
{
unsigned int i;
cbi(LCD,RES);
for (i=0; i<10000; i++)
cycle(30);
sbi(LCD,RES);
for (i=0; i<100000; i++)
cycle(30);
lcd_writecom(0x40); // Start Display Line = 0
lcd_writecom(0xA0); // ADC = normal (Anzeigerichtung nicht gespiegelt)
lcd_writecom(0xA3); // LCD-Bias = 1/7 für 4,5-5,5V 1/9 für 3,3-4,5V
lcd_writecom(0xC0); // Output Mode = nicht gespiegelt
lcd_writecom(0x2F); // LCD-Spannungserzeugung/Regelung einschalten
lcd_writecom(0x20); // V5 Regulator Resistor Ratio = 0
lcd_writecom(0xAC); // Static Indicator off
lcd_writecom(0x81); // Kontrasteinstellung auswählen
lcd_writecom(32); // Kontrast = mittel (für Bias 1/7: 20-50, für 1/9: 2-10)
lcd_writecom(0xA4); // Displaytest aus
lcd_writecom(0xAF); // Display ein
lcd_writecom(0xA6); // Display normal (nicht invertiert)
lcd_clear();
}

void lcd_clear()
{
unsigned char x, y;
for (y=0;y<8; y++)
{
lcd_setadress(0,y);
for (x=0;x<128; x++) {
lcd_writecom(0);
}
}
lcd_setadress(0,0);
}



void lcd_setadress(unsigned char Spalte, unsigned char Zeile) //Set Adresspointer
{
lcd_writecom(0xB0|Zeile);
lcd_writecom(0x10|(Spalte/16));
lcd_writecom(Spalte&15);
}




[/code]

Ratber
10.05.2006, 21:42
Schau auch mal hier rein.


https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=271

JazzD
10.05.2006, 22:31
das hab ich schon gesehen aber das ist doch für den avr UND noch bascom bzw. asm. ich arbeite doch am pc. meine basis war auch code für den avr in c daraus habe ich dann pc code gemacht aber irgendwie klappt es nicht so ganz.

Ratber
10.05.2006, 23:51
Oh,Sorry,hab ich übersehen.

So groß hab ich damit auch noch nix gemacht ausser mit LCDhype rumgetestet und natürlich am Controller.
(Albundy war so frei letzten Herbst was reinzustellen.)
Sobald ich Zeit habe muß ich selber erstmal das Datanblatt studieren bevor ich was mache.