-
          
	
		
		
	
	
	
	
	
		
			
- 
	
	
		
			
			
				Neuer Benutzer
			
			
				Öfters hier
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
				
					LCD Seriell Ansteuern
				
				
						
							
							
						
						
							
						
				
					
						
							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;
}
---------------------------------------------------
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
		
		
		
	
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
 
		- Themen beantworten: Nein
 
		- Anhänge hochladen: Nein
 
		- Beiträge bearbeiten: Nein
 
		-  
 
	
	
	Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen