www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SED1531 Serial LCD Controller


Autor: mihailo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich hab ein GLCD Display mit einem SED1531 Controller (Pollin).
Das display muss seriel angesteuert werden, hab troz langem suchen keine 
beispiel programm gefunden, deswegen hab ich es mal selber probier :

geht leider nicht, hab keine idee was falsch sein könnte am Parallel 
port funktioniert das display ohne probleme, deswegen müsste es am 
atmega16 doch auch gehn ;-(

also fals jemand zeit hat und sich den code kurz anschaut und nen fehler 
findet wäre ich sehr dankbar ;-)

----------------------------------------------------
#include <avr/io.h>
#include <avr/sfr_defs.h>

#include "font6x8.h"

#ifndef F_CPU
#define F_CPU 1000000UL     /* Quarz mit 3.6864 Mhz  */
#endif
#include <util/delay.h>




// Definiton der Ausgänge zum LCD

#define SI       PC0
#define SCL       PC1
#define AO       PC2
#define CS       PC3
#define NCS      PC4
#define RES      PC5
#define BL       PC6


// Ports
#define LCD      PORTC
#define LCDD     DDRC

uint8_t myByte;


void init()
{
  //JTAG Port beim ATmega16 disablen. Standardmaessig sind Ports 
PC2..PC5 durch JTAG-Schnittstelle belegt!
  MCUCSR |= JTD;  //Dazu Bit 'JTAG Disable' in Register MCUCSR setzen - 
gemaess Datenblatt 2x !!
  MCUCSR |= JTD;  //alternativ koennte auch per Programmer das  Fusebit 
JTAGEN in 'hfuse' auf 0 programmiert werden

    //Initialize Port C als Ausgange
  LCDD |= 0xff;
}




// Funtkionen Überträgt Command an das Display
void lcd_WriteCom(unsigned char byte){


    /* Command muss ins Steueregiste d.h */
  LCD &= ~(1<<AO);

  /* Jetzt alle Bits durchgehen und Flanke von SCL Wechseln */
  volatile int i;


  for(i=0 ; i<8 ; i++)
  {

    // Erst das DataOut Bit Löschen
      LCD &= ~(1<<SI);

     if (byte & (1 << i)){      // Wenn in übergebenen Byte an Stelle=1 
dann übertragen
      LCD  = LCD | ( 1 <<SI);}


     // Flashen des SCL Bits, datenübernahme für das Display
     LCD  = LCD | ( 1 <<SCL);
     _delay_ms(10);
      LCD &= ~(1<<SCL);
     _delay_ms(10);
  }

  /* Das DatenOutBit wieder zurücksetzen */
    LCD &= ~(1<<SI);

}


// Funtkionen Überträgt Dispaly Inhalt an das Display
void lcd_WriteData(unsigned char byte){


    /* Byte muss ins Bildregister d.h */
  LCD  = LCD | ( 1 <<AO);

  /* Jetzt alle Bits durchgehen und Flanke von SCL Wechseln */
  volatile int i;


  for(i=0 ; i<8 ; i++)
  {

    // Erst das DataOut Bit Löschen
      LCD &= ~(1<<SI);

     if (byte & (1 << i)){      // Wenn in übergebenen Byte an Stelle=1 
dann übertragen
      LCD  = LCD | ( 1 <<SI);}


     // Flashen des SCL Bits, datenübernahme für das Display
     LCD  = LCD | ( 1 <<SCL);
     _delay_ms(1000);
      LCD &= ~(1<<SCL);
     _delay_ms(1000);
  }

  /* Das DatenOutBit wieder zurücksetzen */
    LCD &= ~(1<<SI);

}




// Funtkiom zum Initialisieren des Displays
void lcd_Init(void){

    /* als Erstes muss Reset auf HIGH gelegt Werden */
  LCD  = LCD | ( 1 <<RES);
  LCD  = LCD | ( 1 <<BL);


  /* CS auf High und /CS auf LOW ( nur daten zum Display senden ) */
    LCD  = LCD | ( 1 <<CS);
  LCD &= ~(1<<NCS);

  /* Init Rotine Senden */
  lcd_WriteCom(64);  // Start Display Zeile 0
  lcd_WriteCom(161); // Gespiegelte Anzeige
  lcd_WriteCom(162); // LCD BIAS 1/6
  lcd_WriteCom(47);  // Intigrierter Spannungsregler Ein
    lcd_WriteCom(175); // Display Ein

}



// Den LCD Pointer an ein Stelle Setzen
void lcd_setadress(unsigned char Spalte,unsigned char Zeile){

    lcd_WriteCom(0xB0|Zeile);
  lcd_WriteCom(0x10|(Spalte/16));
  lcd_WriteCom(Spalte&15);


}


// Ein Zeichen auf das Display Schreiben
void lcd_WriteSign(unsigned char byte){

  unsigned char i;
   for (i=0;i<6;i++)
   {

      lcd_WriteData(pgm_read_byte(&Font[byte][i]));
   }


}


// Main ---------------------------
int main(void)
{


  init();


  myByte = 170;
  lcd_Init();
  lcd_WriteSign(1);


  return 1;
}
---------------------------------------------------

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.