www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ST7565r graphic LCD initialisieren AVR


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche nun schon seit geraumer Zeit ein EA DOGL128B graphic 
Display an einem Atmega328p zum laufen zu bringen.

Das Display habe ich nach der im Datenblatt gezeichneten "Dual-Supply" 
Schaltung angeschlossen, wobei die Spannung für den Kontrast aus einem 
12V Netzteil geliefert wird.

Die 12V werden dann per 7805 auf 5V heruntergeregelt und dann durch den 
Spannungsabfall an drei Dioden auf 3V gebracht, welche den Controller 
sowie V0 bis V4 am Display versorgen.

Das das nicht ganz ideal ist, ist mir zwar durchaus bewusst, aber einen 
Linearregler für 3V habe ich im Moment leider nicht zur Hand.

Die Anschlüsse des Displays habe ich wie folgt an den Controller 
gehängt:

SI -> MOSI
RESET -> PD2
CS -> PB1
SCL -> SCK
A0 -> PB0

kommuniziert wird per SPI über einen st7565r Displaycontroller.

Leider tut sich bei meinem Versuch das Display zu initialisieren 
überhaupt nichts, auch wenn der Display-Modus auf reverse geändert wird, 
was meiner Meinung nach ja ein invertieren des Hintergrund auch ohne 
senden eines Frames zu Folge haben sollte.

Code verwende ich folgenden:
void dogm_send_command(unsigned char data)
{
  PORTB = 0b00000000;
  SPDR = data;
}

int main (void)
{

  DDRD = 0xff;

  //reset auf high
  PORTD = 0b00000100;

  //A0 auf low -> commands senden, CS auf low
  DDRB |= 0b00000011;
  PORTB = 0b00000000;

  //Spi initialisieren
  SPCR = 0b010111001;

  //display reset
  PORTD = 0b00000000;
  _delay_ms(50);
  PORTD = 0b00000100;

  //display initialisieren
  dogm_send_command(0x40);
  dogm_send_command(0xA1);
  dogm_send_command(0xC0);
  dogm_send_command(0b10100111);
  dogm_send_command(0xA2);
  dogm_send_command(0x2B);
  dogm_send_command(0x27);
  dogm_send_command(0x81);
  dogm_send_command(0x10);
  dogm_send_command(0xAC);
  dogm_send_command(0x00);
  dogm_send_command(0xAF);
}

Datenblätter:

dogl128-6e: http://www.lcd-module.de/eng/pdf/grafik/dogl128-6e.pdf
st7565r: http://www.lcd-module.de/eng/pdf/zubehoer/st7565r.pdf

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Michael schrieb:
> Die 12V werden dann per 7805 auf 5V heruntergeregelt und dann durch den
> Spannungsabfall an drei Dioden auf 3V gebracht, welche den Controller
> sowie V0 bis V4 am Display versorgen.

Verstehe ich nicht so ganz: an V0...V4 hängen doch nur die Kondensatoren 
für die internen LCD-Teilspannungen dran?

Gruß aus Berlin
Michael

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, mein fehler hab mich beim verfassen des Textes wohl ein wenig 
vertan.
V0 bis V4 liegen natürlich auf Potenzial.

und VDD sowie VDD2 an den 3V.

Autor: GG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

du mußt SCK, MOSI, CS als Ausgang definieren.

#define LCD_CS    4  // PB4   = Select      PIN 40
#define SPI_SCK   7  // PB7   = SPI SCK     PIN 37
#define SPI_MOSI  5  // PB5   = SPI MOSI    PIN 36
#define SPI_MISO  6  // PB6   = SPI MISO
#define LCD_A0    0  // PB0   = Display A0  PIN 38
#define LCD_RST   1  // PB1   = Display Res PIN 39

DDRB  |= (1 << LCD_RST) | (1 << LCD_A0) | (1 << SPI_MOSI) | (1 << 
SPI_SCK)|(1 << LCD_CS) | (0 << SPI_MISO);


// SPI Init

SPCR = (1 << SPE) | (1 << MSTR) | (0 << SPR1) | (0 << SPR0); // 4 MBit 
SPI
SPSR = 0;

delay_ms(2); // wichtig

Außerdem die Wartezeit bei der Übertragung einhalten

#define Spi_Busy()          while(!(SPSR & (1<<SPIF)))

// Daten zum Display ausgeben

uint8_t Spi_Io(uint8_t  b)
{
  SPDR = b;
  while (!(SPSR & (1 << SPIF))); //warten bis gesendet
  b =SPDR;
  return SPDR;
}


Den PORTB z.B. als  0b00000000 auf "0" oder "1" setzen ist gefährlich,
nimm lieber PORTB|=(1 << LCD_RST)/PORTB &= ~(1 << LCD_RST)her.

Gruß gg

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke,
es funktioniert aber leider noch immer nicht.

glg

Autor: GG (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe Dir mal meine kompletten Code beigelegt.

Bitte SPI Port an eigenen Proz. anpassen.



Gruß GG

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.