-         
Ergebnis 1 bis 4 von 4

Thema: EA DIP162-DNLED lässt sich nicht initialsieren

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74

    EA DIP162-DNLED lässt sich nicht initialsieren

    Anzeige

    Hallo Forum!

    Ich beschäftige mich seit dieser Woche wieder mit der Programmierung von Microcontrollern. Ich verwende zurzeit einen ATmega 16. Dieser läuft mit 8Mhz Takt. Da ich gerne Ausgaben des Controllers sehen möchte, wollte ich ein Display anschließen. Dieses hatte ich bereits beim RP6 und dort hat es einwandfrei funktioniert.
    Ich hab die D0-D7 an PA0 - PA7 angeschlossen. Ich möchte es im 8Bit-Modus steuern. RS an PC4 und E an PC5. Die Hintergrundbeleuchtung ist nicht angeschlossen und auch nicht notwendig.
    Ich habe ein ganz einfaches Programm geschrieben, wo das Display nur initialisiert wird und der Cursor blinken soll. Die Initialisierung habe ich nach Datenblatt gemacht. http://www.lcd-module.de/pdf/doma/dip162-d.pdf (Seite 3 unten).

    Das ist der Programmcode:

    Code:
    #include <avr/io.h>
    #include <util/delay.h>  
    #include <stdint.h> 
    
    void delay_ms(uint16_t ms)
    {
      for(uint16_t t=0; t<=ms; t++)
        _delay_ms(1); 
    }
    
    void lcd_flash_e(void)
    {
        PORTC = 0b00100000 ;        // Enable = HIGH
        delay_ms(100);                        // kurz warten, damit Flanke entsteht
        PORTC = 0b00000000 ;        // Enable = LOW
        delay_ms(100);                            // Warten, bis der durch Enable angelegte Befehl hoffentlich verarbeitet wurde
    }
    
    
    int main()
    {
        DDRA = 0xFF;            //D0-D7
        DDRD = 0xFF;            //Bestätigungsled
        DDRC = 0xFF;            // setze Portrichtung (1 = Ausgang): 1111 1111 
        
    
        delay_ms(200);            // 200ms warten bis LCD wirklich bereit! Wir können nicht BUSY auswerten. 
                                   
        PORTA = 0b00110100;        
        lcd_flash_e ();    
        delay_ms(800);
        
        PORTA = 0b00111000;        
        lcd_flash_e ();    
        delay_ms(800);
        
        PORTA = 0b00111000;        
        lcd_flash_e ();    
        delay_ms(800);
        
        PORTA = 0b00001111;        
        lcd_flash_e ();    
        delay_ms(500);
        
        PORTA = 0b00000001;        
        lcd_flash_e ();    
        delay_ms(500);
        
        PORTA = 0b00110010;        
        lcd_flash_e ();    
        delay_ms(500);
    
        PORTD = 2;
        while(1);
        return 0;
    }
    Das Problem ist, dass das Display nur die erste Zeile mit Balken anzeigt. Ich habe in verschiedenen Foren nachgelesen und das deutet hin, dass die Initialisierung für 2 Zeilen nicht geklappt hat. Kontrast lässt sich regeln über Potentiometer. Ändert auch nix.
    Hat jemand eine Idee, was das Problem sein könnte?
    Die Belegung des Steckers (vom Display) entspricht der Pinbelegung auf der Erweiterung des RP6, dem RP6 CONTROL M32. Also:
    Pin1: GND
    Pin2: VDD
    Pin3: VEE an Abgriff Poti(10K)
    Pin4: RS an PC4
    Pin5: RW auf Masse gelegt
    Pin6: E an PC5
    Pin7: D0 an A0
    Pin8: D1 an A1
    Pin9: D2 an A2
    Pin10: D3 an A3
    Pin11: D4 an A4
    Pin12: D5 an A5
    Pin13: D6 an A6
    Pin14: D7 an A7

    Vielen Dank schon im voraus. Für weitere Details fragt einfach. Sollte es bereits ein Thema hier im Roboternetz geben, was dieses Problem behandelt, dann freue ich mich über einen Link, da ich selbst nichts gefunden habe.
    Schönes Wochenende
    MFG
    RP6fahrer

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    27
    Beiträge
    1.192
    Hallo,
    die erste Frage wäre gleich: Hast du die JTAG-Fuse deaktiviert?
    Beim ATmega16 / 32 ist diese standardmäßig aktiviert und dann funktionieren gewisse Pins von PORTC nicht richtig
    Am Code habe ich nichts Auffälliges gefunden, lediglich die Delays kannst du um einiges verkürzen.
    Falls es nicht an der JTAG-Fuse liegt, verweise ich mal auf diese Liste hier: http://rn-wissen.de/index.php/Textdisplay_Fehlersuche
    Grüße, Bernhard

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Guten Abend Bernhard!
    Vielen Dank erstmal. Ich werde das überprüfen. Schaff es leider heute nicht mehr. Vielen Dank auch für den Link.
    Ich melde mich wieder, wenn ich mehr weiß.
    MFG
    RP6fahrer

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Hallo!
    Ich hab jetzt die Fuse-Bits überprüft. Die JTAG-Funktion war aktiviert. Ich habe diese deaktiviert und es ging einwandfrei. Nochmals Dankeschön. Jetzt kann ich da ein bisschen ausprobieren. Mir schwebt auch schon vor, das LCD im 4 Bit-Betrieb komplett über PCF8574 ansteuern. Aber dazu später. Wenn ich wieder Fragen hab, dann stelle ich sie hier.
    Schöne Pfingsten
    MFG
    RP6fahrer

Ähnliche Themen

  1. ASURO lässt sich nicht flashen
    Von wildtobias im Forum Asuro
    Antworten: 11
    Letzter Beitrag: 18.01.2011, 14:22
  2. AVR lässt sich nicht programmieren
    Von Janigut im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 20.11.2009, 17:50
  3. MCS Bootloader lässt sich nicht kompilieren...
    Von 8-[ im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 26.09.2009, 09:29
  4. ATMEGA32 Lässt sich nicht Programmieren
    Von Borki90 im Forum AVR Hardwarethemen
    Antworten: 11
    Letzter Beitrag: 12.04.2008, 09:46
  5. Atmega lässt sich nicht beschreiben
    Von Lordcyber im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 09.03.2008, 21:47

Stichworte

Berechtigungen

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