EA - DOG S 102 will nicht

OP #2136002
Lesenswert?

Hallo Leutz ich habe mich mal an die Programmierung eines Grafikdisplays 
gewagt. Dazu nehme ich das EA-DOGS102-6 und einen ATMega 8535L.

Größten teils habe ich alles aus den Manuals des ATMega's und den 
Manuals des EADOGS102-6. Als dies nicht funktionierte habe ich mir auch 
viel von einem älteren Forumtreat ab geschaut 
Beitrag "EA-DOG S 102 Ansteuerung"

Doch nichts half, ich bekomme noch nicht mal wilden Pixelschnee auf das 
Display

Das Display habe ich wie folgt an den µC angesclossen.

Port B
0 Kommando/Daten
1 Chip Select
2 Display Reset
3
4
5 MISO (Display Daten)
6
7 SCK (Display Takt)

und mein Programm sieht wie folgt aus:
1
#include <avr/io.h>
2
#define F_CPU 1000000UL  // Systemtakt in Hz - Tesboardtakt = 3686400UL
3
#include <util/delay.h> 
4

5
#define CHIPSELECT    PORTB &= ~(1<<1);
6
#define CHIPUNSELECT          PORTB |=  (1<<1);
7

8
#define DATEN      PORTB |= (1<<0);
9
#define KOMMANDO    PORTB &= ~(1<<0);
10

11
#define RESETHIGH    PORTB |= (1<<2);  
12
#define RESETLOW    PORTB &= ~(1<<2);
13

14
void SPI_MasterInit(void); //SPI Intialisierung
15
unsigned char spi_out(char byte); //übergibt Kommandos oder Daten an das SPI Register
16
void sendekommando(char kommando); //Display Kommandos senden
17
void sendedaten(char daten); // Anzeige Daten aufs Display senden
18
void displayInit(void); //Initialisiert das DOGS Display
19

20
int main(void)
21
{
22
  
23
  SPI_MasterInit();
24
  
25
      
26
  displayInit();
27
      
28
      
29
  /*Ein Paar Daten testweise senden.
30
  Erwartung: Schwarzes Kästechen von 5*8 Pixeln in der
31
  oberen linken Ecke*/
32
  sendekommando(0b00000000);
33
  sendekommando(0b00010000);
34
  sendedaten(0xFF);
35
  sendekommando(0b00000001);
36
  sendekommando(0b00010000);
37
  sendedaten(0xFF);
38
      
39
  sendekommando(0b00000010);
40
  sendekommando(0b00010000);
41
  sendedaten(0xFF);
42
  sendekommando(0b00000011);
43
  sendekommando(0b00010000);
44
  sendedaten(0xFF);
45
  sendekommando(0b00000100);
46
  sendekommando(0b00010000);
47
  sendedaten(0xFF);
48
  
49
  sendekommando(0xA4);
50
  
51
        while(1);
52
  
53
  return(0);
54
}
55

56
void SPI_MasterInit(void) //SPI Intialisierung
57
{
58
  // Set MOSI and SCK output (aus Handbuch)
59
  DDRB = (1<<5)|(1<<7); //DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
60
  
61
  //PB0, PB1 und PB2 als Ausgang (für Chipselekt, Reset und Daten/Kommando)
62
    DDRB |= ((1<<0)|(1<<1)|(1<<2));
63
  
64
  // Enable SPI, Master, set clock rate fck/16 (aus Handbuch)
65
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
66
}
67

68
unsigned char spi_out(char byte) //übergibt Kommandos oder Daten an das SPI Register
69
{
70
  //Byte übergeben
71
  SPDR = byte;
72
  
73
  //Warten bis Sendevorgang komplett ist
74
  while(!(SPSR &(1<<SPIF)));
75
  
76
  //SPIF löschen durch auslesen des SPDR Registers
77
   return SPDR;
78
}
79

80
void sendekommando(char kommando) //Display Kommandos senden
81
{
82
  CHIPSELECT;
83
  
84
  // PB0 auf low -> Kommando!
85
  KOMMANDO;
86
  
87
  //Byte senden
88
  spi_out(kommando);
89

90
  CHIPUNSELECT;
91
}
92

93
void sendedaten(char daten) // Anzeige Daten aufs Display senden
94
{
95
  CHIPSELECT;
96
  
97
  //PB0 auf high -> Daten!
98
  DATEN;
99
  
100
  //Byte senden
101
  spi_out(daten);
102
  
103
  CHIPUNSELECT;
104
}
105

106
void displayInit(void) //Initialisiert das DOGS Display
107
{
108
  //Display reset
109
  RESETLOW;
110
  _delay_ms(1);
111
  RESETHIGH;
112
  _delay_ms(5);
113
  
114
  //Display Initialisierungskommandos
115
  sendekommando(0x40);
116
  sendekommando(0xA1);
117
  sendekommando(0xC0);
118
  sendekommando(0xA4);
119
  sendekommando(0xA6);
120
  sendekommando(0xA2);
121
  sendekommando(0x2F);
122
  sendekommando(0x27);
123
  sendekommando(0x81);
124
  sendekommando(0x10);
125
  sendekommando(0xFA);
126
  sendekommando(0x90);
127
  sendekommando(0xAF);
128
}
erkennt jemand eien Fehler?
#3023241
Lesenswert?

Hallo ich hab ne kleine frage

 ich hab mir die lib angesehen und in der Detei lcd.c in der funktion 
"lcd_init" wird die funktion "lcd_send_command();" aufgerufen und ich 
kann die Definition dieser Funktion nicht finden(hab alles abgesucht).
Denn ich würde gerne wissen ob bei jedem Initialisierungskommando das 
geschickt wird die Chip Select Leitung aktiviert und dann deaktiviert 
wird ?,

Danke für jeden Ratschlag:)
Gast #3023262
Lesenswert?

Hi

> ich hab mir die lib angesehen und in der Detei lcd.c in der funktion
>"lcd_init" wird die funktion "lcd_send_command();" aufgerufen und ich
>kann die Definition dieser Funktion nicht finden(hab alles abgesucht).

Hast du nicht. In der lcd.h findest du:

//--------------- Macrofuncitons ----------
#define lcd_send_command(data) lcd_send(data, 0)
#define lcd_send_data(data) lcd_send(data, 1)
#define lcd_clear_all() lcd_clear(0,0,XPIXEL-1,YPIXEL-1)
#define lcd_fill_all() lcd_fill(0,0,XPIXEL-1,YPIXEL-1)

MfG Spess
Gast #3023577
Lesenswert?

Hi

>kann ich bei den Externen Kondis vom Display auch Elkos nehmen oder muss
>ich da ungepoolte Kondis nehmen(im Datenblatt sind ungepoolte
>gezeichnet)??

Probiere es doch mal. Ich habe bei den Dog-Displays bisher immer KerKos 
genommen und damit keine Probleme gehabt. 1µ in 0805 ist sogar wunderbar 
lochrastertauglich.

MfG Spess
Gast #3023623
Lesenswert?

Meine DOG displays liefen bisher sowohl mit Kerkos als auch mit Elkos. 
Was ich noch empfehlen könnte wäre die u8glib 
(http://code.google.com/p/u8glib/) oder deren Vorgänger dogm128-lib 
(http://code.google.com/p/dogm128/). Beide libs haben das DOGS102 
unterstützt. Eine Schritt für Schritt Anleitung hatte ich mal hier 
zusammengestellt: http://code.google.com/p/m2tklib/wiki/as6

Grüße,
Oliver

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