- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Fehlerhafte Zeichendarstellung 4x20LCD KS0066

  1. #1

    Idee Fehlerhafte Zeichendarstellung 4x20LCD KS0066

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo liebe Forengemeinde ich habe Probleme mit der Darstellung von Zeichen mit einem LCD Display 4,75mm 204A-CC-BC-3LP von RS mithilfe eines Atmega 32 gefused auf 8MHz.
    Laut Shopseite soll es einen KS0066, laut Datenblatt einen KS0076B Controller besitzen. Soll wohl beides identisch sein...????
    Zur Initialisirung habe ich die lcd-routines von Mikrocontroller.net genommen welche für einen HD44780waren und diese modifiziert damit das LCD richtig initialisiert wird.(.h,.c modifizierte Routines im Anhang)

    Anschluss:
    DB0= Databyte4
    DB1= Databyte5
    DB2= Databyte6
    DB3= Databyte7
    DB4= R/S
    DB5= E
    R/W=GND
    Nun will ich in der main.c folgendes zur Ausgabe bringen:

    Code:
    /*
     * main.c
     *
     * Created: 27.07.2012 21:09:46
     *  Author: Natureengener
     */ 
    
    
    #include <avr/io.h>
    #include "lcd-routines.h"
    
    int main(void)
    {
    	// Initialisierung des LCD
    
    	lcd_init();
    	
    
    	lcd_setcursor( 0, 1 );
    	lcd_string("Zeile1");
    
    	lcd_setcursor( 0, 2 );
    	lcd_string("Zeile2");
    
    	lcd_setcursor( 0, 3 );
    	lcd_string("Zeile3");
    
    	lcd_setcursor( 0, 4 );
    	lcd_string("Zeile4");
    
    	while(1)
    	{
    	}
    	
    	return 0;
    }
    Doch leider Zeigt das LCD teilweise falsche Zeichen an.(Siehe Bilder Anhang) Ohne einen 0.1uF Kondensator zwischen VSS und VDD zeigt es noch mehr Müll an.
    Zudem kommt nach jedem Reset am Display etwas anderes raus.

    Was mache ich nur falsch?
    KS0073 war kein Problem aber dieses 0066 verweigert den Dienst strikt.

    Hatte jemand auch schonmal solche Probleme und weiß vielleicht weiter?

    Lieben Dank schonmal.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Nerviges_Display2.jpg   Nerviges_Display1.gif  
    Angehängte Dateien Angehängte Dateien
    Geändert von Natureengeneer (28.07.2012 um 20:13 Uhr) Grund: rsf

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    32
    Beiträge
    1.192
    Hallo,
    an deiner Stelle würde ich mal versuchen, die Verzögerungen zu erhöhen (Konstanten LCD_ENABLE_US , LCD_WRITEDATA_US, LCD_COMMAND_US in lcd-routines.h). So ähnlich hat sich ein Display von mir auch verhalten, als die Zeiten zu kurz waren. Dann verschluckt es schon mal Zeichen oder zeigt Mist an. Den 0,1µF Kondensator würde ich auf jeden Fall drin lassen, man kann auch noch einen Elko mit 10...100µF parallel schalten. Sind die +5V denn "sauber" oder ist da noch Restwelligkeit o.ä. drauf? Welche Verbraucher hängen noch an der 5V Leitung?
    Wie lang sind die Kabel zum Display?
    Die Datenleitungen D0...D3 am Display würde ich an deiner Stelle auch noch auf definiertes Potential hängen (z.B. GND).
    Grüße, Bernhard

    PS: Engineer

  3. #3
    OK ich habe nun die Delays weiter erhöht und D0-D3 auf GND gelegt. Beim Resetten zeigt es nun fast jedesmal identische Zeichen an jedoch teilweise immer noch falsch. Die 5V müssten sauber sein(kommen aus einem Spannungsregler) überprüfen kann ich dies jedoch leider nicht da ich im moment kein OSZI da habe.
    Die Leitungen vom Board zum Display sind ca 30 cm lang.
    Am Spannungsregler hängt außr dem Display sonst nichts mehr. Der Atmel sitzt auf einem AVR kit Board mit eigenem Spannungsregler.
    Statt "Test" gibt es z.b. "Teww" aus.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    32
    Beiträge
    1.192
    Hallo,
    die Leitungen sind ja doch relativ lang. Versuche mal, die Delays sehr lang zu machen, um zu schauen ob man so vielleicht doch weiter kommt. Vor allem die Dauer des Enable-Pulses darf größer werden.
    Du kannst auch vor und nach dem Enable-Puls noch Pausen setzen:
    Code:
    static void lcd_enable( void )
    {
        _delay_us( LCD_ENABLE_US );  // kurze Pause <-- hier
        LCD_PORT |= (1<<LCD_EN);     // Enable auf 1 setzen
        _delay_us( LCD_ENABLE_US );  // kurze Pause
        LCD_PORT &= ~(1<<LCD_EN);    // Enable auf 0 setzen
        _delay_us( LCD_ENABLE_US );  // kurze Pause <-- hier
    }
    Für meine Displays habe ich da jeweils 700µs Pause drin, also relativ viel!
    Und noch eine Frage: Hast du die Pins, die mit dem Display verbunden sind, auch wirklich als Ausgang geschaltet (nur um das als mögl. Ursache auszuschließen)?
    Grüße, Bernhard

  5. #5
    Ich habe versucht die ENABLE_US hochzusetzen und habe auch versucht vor und nach dem Enable ein delay einzubauen. Resultat: Ab höheren Werten als 20 uS zeigt das LCD nichts mehr an. Die zusätzlichen Delays schaffen keine Abhilfe.
    Ja die Pins wurden als Ausgang geschaltet.
    Code:
    // verwendete Pins auf Ausgang schalten
    	uint8_t pins = (0x0F << LCD_DB) |           // 4 Datenleitungen
    	(1<<LCD_RS) |                // R/S Leitung
    	(1<<LCD_EN);                 // Enable Leitung
    	LCD_DDR |= pins;
    HD44780 Controller bestellt... Die werden sich wohl hoffentlich nicht so zickig anstellen.

    Sind deine LCD's die du mit 700us Enablezeit fährst auch mit einem KS0066 Controller bestückt?

    Danke für die Tipps.

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von Natureengeneer Beitrag anzeigen
    HD44780 Controller bestellt... Die werden sich wohl hoffentlich nicht so zickig anstellen.
    Diese Controller sind wesentlich einfacher anzusteuern und meiner Meinung nach nur halb so zickig wie die KSxxx-Serie.
    Grüße
    Thomas

  7. #7
    Diese Controller sind wesentlich einfacher anzusteuern und meiner Meinung nach nur halb so zickig wie die KSxxx-Serie.
    Das freut mich natürlich sehr zu hören bzw. zu lesen

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.301
    Hast du am Display die nicht benötigten/benutzten Datenleitungen auf GND gelegt ?
    Ich programmiere mit AVRCo

  9. #9
    Die Datenleitungen D0...D3 am Display würde ich an deiner Stelle auch noch auf definiertes Potential hängen (z.B. GND).
    Ja habe ich

  10. #10
    Problem gelöst. Widerstände an den Datenleitungen und der Enableleitung hinzugefügt.

    Klicke auf die Grafik für eine größere Ansicht

Name:	LCD_works.jpg
Hits:	9
Größe:	41,7 KB
ID:	22954

    Nun hab ich hier 6 Controller und alle Funktionieren sowohl HD wie auch KS.... Let's start

Ähnliche Themen

  1. Nerviges Init Problem mit LCD (KS0066)
    Von Dr. LCD im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 14.09.2008, 18:33
  2. LCD (KS0066) 4Bit-Mode init brauche hilfe, PIC 18f4550
    Von andi.studi im Forum PIC Controller
    Antworten: 26
    Letzter Beitrag: 15.08.2008, 17:51
  3. KS0066 an ATmega8
    Von pacer_one im Forum Assembler-Programmierung
    Antworten: 0
    Letzter Beitrag: 21.03.2008, 11:15
  4. fehlerhafte kommunikation mit Rp6
    Von amin105 im Forum Robby RP6
    Antworten: 9
    Letzter Beitrag: 05.01.2008, 20:58
  5. Antworten: 9
    Letzter Beitrag: 21.04.2007, 15:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen