KS0108_Library

Gast #3808428
Lesenswert?

Hallo zusammen,

ich benutze derzeitig 
http://www.mikrocontroller.net/articles/KS0108_Library die dortige 
Library für mein LC_Display

http://www.pollin.de/shop/dt/NDc1OTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_TG12864B_13B.html.

Ich habe wie im Beitrag die die Hardware an die Software angepasst.
1
// Ports
2
#define LCD_CMD_PORT    PORTC    // Command Output Register
3
#define LCD_CMD_DIR      DDRC    // Data Direction Register for Command Port
4

5
#define LCD_DATA_IN      PIND    // Data Input Register
6
#define LCD_DATA_OUT    PORTD    // Data Output Register
7
#define LCD_DATA_DIR    DDRD   // Data Direction Register for Data Port
8

9
// Command Port Bits
10
#define D_I          0x03    // D/I Bit Number
11
#define R_W          0x02    // R/W Bit Number
12
#define EN          0x01    // EN Bit Number
13
#define CSEL1        0x04    // CS1 Bit Number
14
#define CSEL2        0x05    // CS2 Bit Number

Zusätzlich benutze ich das angehangende Beispiel Programm um dort etwas 
angezeigt zubekommen. Leider blieb das Display leer.
1
/*
2
 * Copyright:      Fabian Maximilian Thiele  mailto:me@apetech.de
3
 * Author:         Fabian Maximilian Thiele
4
 * Remarks:        this Copyright must be included
5
 * known Problems: none
6
 * Version:        1.1
7
 * Description:    KS0108 Library Demo Program 
8
 * 
9
 */
10

11
#include <inttypes.h>
12
#include <avr/io.h>
13
#include <avr/pgmspace.h>
14

15

16
#include "ks0108.h"
17
#include "arial_bold_14.h"
18
#include "corsiva_12.h"
19

20

21
int main(void) {
22
  
23
  // Wait a little while the display starts up
24
  for(volatile uint16_t i=0; i<150000000; i++);
25
  
26
  
27
  // Initialize the LCD
28
  ks0108Init(0);
29

30
  
31
  // Select a font
32
  ks0108SelectFont(Arial_Bold_14, ks0108ReadFontData, BLACK);
33
  // Set a position
34
  ks0108GotoXY(15,10);
35
  // Print some text
36
  ks0108Puts_P(PSTR("KS0108-Treiber"));
37
  // a nice little round rect
38
  ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK);
39

40
  // Once again :)
41
  // Select a font
42
  ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK);
43
  // Set a position
44
  ks0108GotoXY(5,30);
45
  // Print some text
46
  ks0108Puts_P(PSTR("Hallo"));
47

48
  while(1);
49
}
Hätte da jemand noch eine Idee was ich tun bzw wie ich am besten anfange 
bin bissel ratlos.
Gast #3811005
Lesenswert?

hab einen fehler schonmal gefunden hatte den reset dauerhaft auf 0V da 
konnte dann auch nix angezeigt werden.
Jetzt wird auch am Display was angezeigt, aber leider nur willkürliche 
pixel :(.
1
#include <inttypes.h>
2
#include <avr/io.h>
3
#include <avr/pgmspace.h>
4

5
#include "ks0108.h"
6
#include "front1.h"
7
#include "front2.h"
8

9
const char pgmString[] PROGMEM = "http://www.apeTech.de\n\naffe.t@gmx.de";
10

11
int main(void) 
12
{
13
  volatile uint16_t i,j,k;
14
  struct font largeFont, smallFont;
15
  
16
  for(i=0; i<15000; i++);
17
  
18
  
19
  largeFont.width = FONT12X16_WIDTH;
20
  largeFont.height = FONT12X16_HEIGHT;
21
  largeFont.charData = Font12x16;
22
  
23
  smallFont.width = FONT6X8_WIDTH;
24
  smallFont.height = FONT6X8_HEIGHT;
25
  smallFont.charData = Font6x8;
26
  while(1)
27
  {
28
    ks0108Init();
29
    for (k = 0;k< 128;k++)
30
    {
31
      for (j = 0;j <65;j++)
32
      {
33
      ks0108ClearDot(k,j);
34
      }
35
    }
36
  }
aber ansich sollten ich doch mit meiner for schleife alle pixel löschen 
oder nicht?









}
Angehängte Dateien:
Gast #3811363
Lesenswert?

ich vermute am ehesten die library. Sobald ich nur den init befehl 
ausführen will habe ich schon wilkürliche pixel im display stehen.
Aber Prozessor Frequenz hab ich standart mäßig auf 1Mhz gesetzt. Benutze 
ein Atmega 1284p.
Gast #3811366
Lesenswert?

Hi

>ich vermute am ehesten die library. Sobald ich nur den init befehl
>ausführen will habe ich schon wilkürliche pixel im display stehen.

Solange nicht etwas wie ein Clear durchgeführt wird ist das normal.

MfG Spess
Gast #3811372
Lesenswert?

Hatte ich ja auch schon durch den Befehl init
1
void ks0108Init(void) {
2
  pos.x = 0;
3
  pos.y = 0;
4
  pos.page = 0;
5
  
6
  LCD_CMD_DIR = 0xFF;                // command port is output
7
  ks0108WriteCommand(LCD_ON, CHIP1);        // power on
8
  ks0108WriteCommand(LCD_ON, CHIP2);
9
  
10
  ks0108WriteCommand(LCD_DISP_START, CHIP1);    // display start line = 0
11
  ks0108WriteCommand(LCD_DISP_START, CHIP2);
12
  ks0108Fill(CLEAR);                // display clear
13
  ks0108GotoXY(0,0);

Dort wird ja ks0108fill aufgerufen der Clear wurde vorher als 0x00 
deklariert und so mit sollte nach der funktion alles auf 0 gesetzt sein.
1
void ks0108Fill(uint8_t mode) {
2
  uint8_t i, j;
3
  
4
  for(i=0; i<8; i++) {              // page address
5
    ks0108GotoXY(0, i*8);
6
    for(j=0; j<128; j++)            // x address
7
    ks0108WriteData(mode);          // write data

es werden aber immer nur pixel angezeigt.
Gast #3811828
Lesenswert?

2 mal überprüft und denke nicht das ich Hardwaretechnisch was falsch 
gemacht habe. Zumindestens denke ich das ^.^. Habe aber nochmal Zeichung 
davon gemacht wie ich es angeschlossen habe.
Vielleicht hab ich auch was übersehen wäre nett wenn mal wer drüber 
guckt.
Danke schon mal für die hilfe.
Angehängte Dateien:
Gast #3811998
Lesenswert?

ich nochmal Ansteuerung funktioniert gut. Bekomme auch am Display 
angezeigt was ich programmiere nur dauert es teilweise bis zu 30s bis er 
was anzeigt. Ist das normales verhalten oder hab ich wieder mist gebaut?
1
int main(void) 
2
{
3
int i, j;
4
  ks0108Init();
5
for (i=0;i<65;i++)
6
{
7
  for (j=0;j<129;j++)
8
  {
9
    ks0108SetDot(i,j);
10
  }
11
}
12
while(1);

soll mit quasi das Display einmal voll punkten und dann nix weiter tun. 
das Klappt auch nur die zeit zwischen jedem punkt kommt mir ziemlich 
lange vor. Oder kommt des daher das ich pro Punkt ihm den Befehl + die 
datenliefe?
(Firma: Vescomp) #3812208
Lesenswert?

kleiner_meiner schrieb:
1
for (i=0;i<65;i++)
2
{
3
  for (j=0;j<129;j++)
4
  {
5
    ks0108SetDot(i,j);
6
  }
7
}
 Dein display ist doch 128x64, nicht 129x65, oder ?
 (0,0) ==> (127,63). Und x und y wäre vielleicht übersichtlicher ?

> angezeigt was ich programmiere nur dauert es teilweise bis zu 30s bis er
> was anzeigt. Ist das normales verhalten oder hab ich wieder mist gebaut?

 Das zweite, was hast du denn gedacht ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren