EA - DOG S 102 will nicht

OP #2136002
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?
Gast
Noob schrieb:
> erstmal die richtige Initialisierung
Upps. Sehe gerade, die stehck ja in DisplayInit...

Hast Du mal mit dem Oszi die Leitungen kontrolliert, ob da SPI 
rauskommt?
Welche Pegel haben VCC, Reset_n und CS_n?

Noob
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
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
danke ich habs gesehen und dann hab ich mir schon gedacht wie das 
ungefähr funktioniernen soll, ich hab leider vorher noch nichs von 
Macros gewusst:[,
aber danke für deine Hilfe, jetz hab ich ja gefunden wonach ich suchte:)
Gast
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
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.