LCD-Dotmatrix-anzeige ansteuern mit elektor-r8c

Alle allgemeinen Themen zu Elektronik und Elektro

Alle allgemeinen Themen zu Elektronik und Elektro

Moderator: Moderatorengruppe

LCD-Dotmatrix-anzeige ansteuern mit elektor-r8c

Neuer Beitragvon hubertus am Dienstag 13. Dezember 2005, 16:45

n'abend :)
ich habe jetzt folgendes problem:
ich habe eine lcd-dotmatrix-anzeige. hersteller weiss ich leider nicht (steht net drauf), aber typ ist WM-C1604M. das teil hat 4 Zeilen x 16 spalten. nun möchte ich, am liebsten über einen r8c vom elektor, das display ansteuern. ich habe bereits auf www.sprut.de nachgeschaut, dort steht vieles über solche displays. leider bin ich nicht so recht schlau draus geworden... ich weiss, dass die 8 datenleitungen für die 8 bits eines zeichen stehen, und ich weiss auch, dass man das display initialisieren muss. ich weiss nur nicht genau wie... ausserdem frage ich mich, wie mand em display "mitteilt", dass es die bits, die gerade an den eingängen anliegen, einlesen und darstellen soll. ich krieg immer nur schwarze rechtecke, wenn ich das display anschalte und anzusteuern versuche. hat jemand erfahrung von euch und weiss wies geht? kann mir jemand evtl. einen kurzen beispielcode posten? das wäre toll. danke schon im voraus, gruss hubertus
Benutzeravatar
hubertus
Threadstarter
16665
Bronze Mitglied
 
Beiträge: 53
Registriert: Donnerstag 1. Dezember 2005, 17:23
Wohnort: CH

Neuer Beitragvon Zerleger am Dienstag 13. Dezember 2005, 18:24

Code: Alles auswählen
long t;
long i;
long b;

#include "sfr_r813.h"


/**************** delay ************/
void delay(long zeit) /* 2000 ist ca. 5 msec */
{
/* 50 ist ca. 150 usec */
/* 50000 ist ca. 120 msec */
for (t=0; t<zeit; t++);
}


/**************** Instruction ************/

void inst(int anw)
{
p1=anw;
p3 = 1;
delay(50);
p3 = 0;
}

/**************** Data ************/

void data(int wert)
{
p1=wert;
p3 = 3;
delay(50);
p3 = 2;
}


/********** Display einstellen ************/

void init(void)
{
p3 = 0;
inst(0x38);
delay(8000);
inst(0x38);
delay(50);
inst(0x38);
inst(0x38);
inst(0x08);
inst(0x01);
delay(2000);
inst(0x06);
inst(0x02);
delay(2000);
inst(0x0F);
inst(0x80);
}

/********** Daten ausgeben ************/

void ausgabe(char ausgabewert[80])  //hier evtl ändern
{
for (i=0; i<80; i++)   /* ausgeben */  //hier auch
{
   if (i==20)   /*und hier,  nach 20 Zeichen in die nächste Zeile */
      {
      inst(0xC0); /* Adresse für zweite Zeile in
               (nächste Zeile umgeschaltet)*/
      }

   if (ausgabewert[i] == 0)
   {
   ausgabewert[i] = ' ';
   }
   data(ausgabewert[i]);
}
}


void main(void)
{
/*-------------------------------------------------
- Change on-chip oscillator clock to Main clock -
-------------------------------------------------*/

prc0 = 1; /* Protect off */
cm13 = 1; /* Xin Xout */
cm15 = 1; /* XCIN-XCOUT drive capacity select bit : HIGH */
cm05 = 0; /* Xin on */
cm16 = 0; /* Main clock = No division mode */
cm17 = 0;
cm06 = 0; /* CM16 and CM17 enable */
asm("nop"); /* Waiting for stable of oscillation */
asm("nop");
asm("nop");
asm("nop");
ocd2 = 0; /* Main clock change */
prc0 = 0; /* Protect on */

pd1 = 0x0FF; /* Set Port 1.0 - 1.7 be used for output*/
pd3 = 0x0F; /* SET PORT 3.0 - 3.? ALS OUTPUT */



while (1) /* Loop */
{
init(); /* Display einstellen */


ausgabe("text");
delay(500000);
}


}



Musst mal auf dem elektor forum schauen, von da habe ich das...
Benutzeravatar
Zerleger
16670
Platinum Mitglied
 
Beiträge: 570
Registriert: Samstag 1. Februar 2003, 17:05
Wohnort: Rhein-Main Gebiet
Postleitzahl: 55
Land: Germany / Deutschland

Neuer Beitragvon hubertus am Dienstag 13. Dezember 2005, 18:40

hoppla, danke!! kompletter quellcode :) super! ich schau gleich im forum. hast du noch die pinbelegung? (welcher lcd-anschluss an welchem pin ist des r8c?)

gruss hubertus
Benutzeravatar
hubertus
Threadstarter
16673
Bronze Mitglied
 
Beiträge: 53
Registriert: Donnerstag 1. Dezember 2005, 17:23
Wohnort: CH

Neuer Beitragvon Zerleger am Dienstag 13. Dezember 2005, 18:57

ja klar habe ich vergessen:

Hallo
Ihr braucht ein Display mit einem HD44780 Controler. Die Datenleitungen werden auf P1_0..P1_7 gelegt.
RS an P3_1 und EN an P3_0. R/W und VO auf GND. VCC nicht vergessen.
Benutzeravatar
Zerleger
16675
Platinum Mitglied
 
Beiträge: 570
Registriert: Samstag 1. Februar 2003, 17:05
Wohnort: Rhein-Main Gebiet
Postleitzahl: 55
Land: Germany / Deutschland

Neuer Beitragvon hubertus am Mittwoch 14. Dezember 2005, 19:30

ach ja, danke.
also ich hab das jetzt so versucht... leider hats nicht ganz geklappt.
ich kriege immer noch nur schwarze rechtecke. kann das daran liegen, dass der code für ein 2-zeiliges display geschrieben wurde und meines ein 4-zeiliges ist? wie kann man dem abhelfen?
Benutzeravatar
hubertus
Threadstarter
16710
Bronze Mitglied
 
Beiträge: 53
Registriert: Donnerstag 1. Dezember 2005, 17:23
Wohnort: CH

Neuer Beitragvon Zerleger am Mittwoch 14. Dezember 2005, 19:42

ich habe ein 4zeiliges angeschlossen, aber erst in der 3ten zeile fängt mein text an...
Ändere mal den einen teil auf:
Code: Alles auswählen
void ausgabe(char ausgabewert[30])  //hier evtl ändern
{
for (i=0; i<30; i++)   /* ausgeben */  //hier auch
{
   if (i==16)   /*und hier,  nach 20 Zeichen in die nächste Zeile */
      {
      inst(0xC0); /* Adresse für zweite Zeile in
               (nächste Zeile umgeschaltet)*/
      }

   if (ausgabewert[i] == 0)
   {
   ausgabewert[i] = ' ';
   }
   data(ausgabewert[i]);
}
}


void main(void)
{

So wie es auf der elektor seite stand...
Benutzeravatar
Zerleger
16712
Platinum Mitglied
 
Beiträge: 570
Registriert: Samstag 1. Februar 2003, 17:05
Wohnort: Rhein-Main Gebiet
Postleitzahl: 55
Land: Germany / Deutschland

Neuer Beitragvon hubertus am Donnerstag 15. Dezember 2005, 17:56

ok, versuchs :) danke.
das problem war: in meinem 4zeiligen display erschien überhaupt kein text. kann ich irgendwie testen ob das teil überhaupt noch geht? bevor ich eine schaltung aufbaue? :)

gruss
Benutzeravatar
hubertus
Threadstarter
16736
Bronze Mitglied
 
Beiträge: 53
Registriert: Donnerstag 1. Dezember 2005, 17:23
Wohnort: CH

Neuer Beitragvon Zerleger am Donnerstag 15. Dezember 2005, 19:41

das lcd muss mit versorgungsspannung +5V (pin1 ist GND und pin 2 +5V) und der Vo spannung in der ersten und dritten zeile dunkler sein als in den anderen.

Die Vo spannung ist wichtig, weißt du wie du da einen poti anschließt? Ohne die wirst du nicht sehen.

Wenn dein lcd die zeilen nicht anzeigt, musst du mal die Vo spannung ändern, oder es ist defekt, keinesfalls sollte es warm werden!
Benutzeravatar
Zerleger
16743
Platinum Mitglied
 
Beiträge: 570
Registriert: Samstag 1. Februar 2003, 17:05
Wohnort: Rhein-Main Gebiet
Postleitzahl: 55
Land: Germany / Deutschland


Zurück zu Elektronik Allgemein

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 56 Gäste


cron