Go Down

Topic: Aansturen van display met een COP472n-3 controler [OPGELOST] (Read 2510 times) previous topic - next topic

DimitriK

Jul 02, 2014, 10:14 pm Last Edit: Jul 04, 2014, 10:22 pm by DimitriK Reason: 1
Beste allemaal,

De COP472n-3 is een Liquid Crystal Display Controller, deze maakt gebruik van een shift register om zo elk element aan te sturen. Nu wil ik graag elk afzonderlijk element aansturen, op de display staan namelijk woordjes. De display is verdeelt in rijen en kolommen. Maar voor de aansturing loop ik vast . . .

Ik vermoet dat het gebruik van de functie ShiftOut() de oplossing is, echter hoe moet ik deze gebruiken voor deze IC.
Op blz. 6 van het datasheet ; www.ti.com/lit/ds/symlink/cop472-3.pdf
Staat een uitleg van de aansturing… helaas begrijp ik niet wat er staat.

Wat ik graag wil is een functie in de richting van
SegmentAan( int rij, int column){}
En
SegmentUit( int rij, int column){}

Er is al eens een toppic over geweest maar deze helpt mijn niet verder.
http://forum.arduino.cc/index.php?topic=108065.0

Alvast dank
Dimitri

MAS3

Hoi DimitriK, en welkom.

Die beschrijving is mij best duidelijk, het laatste stukje van bladzijde 5 en bladzijde 6  horen bij elkaar.

Jij hebt het over woordjes die ergens staan, en over rijen en kolommen.
De datasheet heeft het daar juist niet over.
Deze datasheet laat zien dat er geen rijen en kolommen worden aangestuurd, maar als jij dat wil zou dat alsnog kunnen, maar daar maak je het jezelf niet gemakkelijker mee.

In onderstaande afbeelding (zie attachment)uit dat document, zie je hoe een 7 segments element word aangestuurd in een Epson LD-370.
Maar dat is dus afhankelijk van het display.

Op bladzijde 7 staat ten eerste een foutje.
Daar is vermeld dat je eerst !CE (de ! uitroepteken komt overeen met de streep over de letters en betekent dat dat signaal actief is als het LOW is) laag moet maken.
In stap 7 staat vervolgens dat je !CS weer hoog moet maken.
Maar je hebt geen !CE (Chip Enable), en alleen een !CS (Chip Select).
De fout is dus dat ze hier in beide gevallen !CS bedoelen.

Een enkele chip kan 32 bits aansturen.
Dus moet je ook 32 bits uitklokken.
Natuurlijk kun je wel een kleiner aantal bits uitklokken, maar alleen als je de laatste bits niet wil instellen.
Dus als je daar wel iets op hebt aangesloten dan wil je dat dus ook aansturen.
Wel staat er dat je per 8 bits moet aansturen en dus dat je 8, 16, 24 of 32 bits in 1 keer moet aansturen.
ShiftOut doet dat standaard niet.
Die doet 8 bits per keer en stuurt dus maar een enkele 7 segment aan.
Daar kun je omheen werken door !CS zelf aan te sturen (met een andere Arduino pin), en dan dus telkens 4 bytes te sturen met ShiftOut.
Als je meer wil punten / segmenten sturen, dien je per chip een aparte !CS aansturing door de Arduino te gebruiken aldus deze gebruiksaanwijzing.

Als je dit nog niet snapt, geef dan aan wat je dan wel snapt.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

DimitriK

Beste MAS3,

Hartelijk dank voor je reactie, het is gelukt!!
Door jou duidelijk uitleg ben ik op het goede spoor gekomen en kan ik nu elk woordje op de display aansturen.
Hartelijk dank!!

Code: [Select]

/* COP472n-3 test program
by Dimitri
02-07-2014
v3
*/
int i_di = 12;
int i_cs = 10;
int i_clk = 11;
int a_Reeks[8] = {
  1,2,4,8,16,32,64,128};
int i_toSend = 0;

void setup()
{
  Serial.begin(9600);
  Serial.println("v3");
  pinMode(i_di, OUTPUT);
  pinMode(i_cs, OUTPUT);
  pinMode(i_clk, OUTPUT); 
}

void loop()
{
  for (int i=0; i < 8; i++)
  {
    i_toSend = a_Reeks[i];
    Serial.print("Waarde:");
    Serial.println(i_toSend);
    digitalWrite(i_cs, LOW);
    shiftOut(i_di, i_clk, MSBFIRST, i_toSend); //reeks A
    shiftOut(i_di, i_clk, MSBFIRST, i_toSend); //reeks B
    shiftOut(i_di, i_clk, MSBFIRST, i_toSend); //reeks C
    shiftOut(i_di, i_clk, MSBFIRST, i_toSend); //reeks D
    digitalWrite(i_cs, HIGH);
    delay(100);
  }
}



Go Up