-         

Ergebnis 1 bis 4 von 4

Thema: LCD-Display mit dspic30f6011a

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2014
    Beiträge
    15

    LCD-Display mit dspic30f6011a

    Anzeige

    Hallo,
    ich habe ein dsPIC30F6011A und möchte damit ein LCD-Display http://www.reichelt.de/Background-gr...r=LCD+162C+LED ansteuern. Allerdings scheitere ich schon an der Initialisierung. Ich möchte zunächst sehen, dass die Initialisierung geklappt hat und den Cursor an der ersten stelle des Displays blinken lassen.
    Code:
    #include <p30fxxxx.h>
    #include <p30F6011A.h>
    #include <xc.h>
    #include <stdio.h>
    #include "system.h"
    #include <libpic30.h>
    
    // Konfigurationbits
    _FOSC(CSW_FSCM_OFF & ECIO_PLL8);  //Run this project using an external crystal routed via the PLL in 8x multiplier mode
    _FWDT(WDT_OFF);                 //Turn off the Watch-Dog Timer.
    _FBORPOR(MCLR_EN & PWRT_OFF);   //Enable MCLR reset pin and turn off the power-up timers.
    _FGS(CODE_PROT_OFF);            //Disable Code Protection
    
    int main (void)
    {
        configure_pin();
        __delay_ms(2000);
        LATBbits.LATB12 = 0;
        lcd_init();
        while (1) {
            __delay_ms(100);
            LATBbits.LATB12 = !LATBbits.LATB12;
       }
        LATBbits.LATB13 = 0;
        return 0;
    }
    
    
    void lcd_init( void )
    {
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_EN = 0;
    
        // LCD Soft Reset
        __delay_ms(15);
        lcd_nibble(0x03);
        __delay_ms(5);
        lcd_nibble(0x03);
        __delay_us(100);
        lcd_nibble(0x03);
        __delay_ms(5);
        lcd_nibble(0x02);
        // Display settings
        lcd_cmd(0x28 ); //
        lcd_cmd(0x08);
        lcd_cmd(0x01);
        lcd_cmd(0x06);
        lcd_cmd(0x0F);
    }
    
    void lcd_cmd( unsigned int data )
    {
        LCD_RS = 0;                 // RS auf 0 setzen
        lcd_nibble(data >> 4);
        lcd_nibble(data & 0x0F);
        __delay_us( 45 );
    }
    
    static void lcd_nibble(unsigned char nibble)
    {
        LATGbits.LATG6 = (nibble>>3)&1;
        LATGbits.LATG7 = (nibble>>2)&1;
        LATGbits.LATG8 = (nibble>>1)&1;
        LATGbits.LATG9 = (nibble>>0)&1;
        lcd_enable();
    }
    
    static void lcd_enable( void )
    {
        LCD_EN = 1;
        __delay_us(50);
        LCD_EN = 0;
    }
    Allerdings zeigt mir das Display nach dem Durchlauf immer noch nur die erste Zeile mit Balken an. Die Verbindungen vom Controller zum Display sind alle vorhanden (auch richtig). Hat das schon einmal jemand gemacht und kann mir da evtl. einen Tip geben, wass ich noch berücksichtigen muss?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    938
    Hallo Chandler.

    Vorweg die Frage: Hast du bereits anderweitige Erfahrung bzw. Erfolge mit diesem Controller?
    Ich bin nämlich irritiert über die CONFIGs:
    a) Startup-Timers deaktivieren: dafür sollte man schon einen guten Grund haben, diese Timer haben fast nur Vorteile
    b) ECIO ist meines Wissens External Clock mit (dann unnützem) Oscillator-Out-Pin als I/O, keinesfalls aber ein Quarzoszillator für externen Quarz
    c) Erfahrung mit PLL? Da gibt es ein, zwei Fallstricke bzgl. des nutzbaren Wertebereichs von Eingangsfrequenz und Multiplikator

    Wenn es unglücklich läuft, arbeitet dein Controller hier mit dem internen Not-Taktgeber im zig-Kilohertz-Bereich und alle deine Zeiten sind rund tausendmal länger als erwartet.

    Das Programm erscheint mir unvollständig, zumindest mangels include-Dateien schwer nachvollziehbar.
    Kannst du uns auch den Schaltplan zeigen?

    Noch ein paar Anmerkungen:
    - welche Funktion hat LATBbits.LATB12 ? Eine Debugging-LED?
    - Die Aktion auf LATBbits.LATB13 wird wegen des davor platzierten while (1) {} wohl niemals ausgeführt werden
    - Warum wird für die Datenbits zum LCD mal ein unsigned char, mal ein unsigned int verwendet? Wenn es vielleicht auch nicht schadet, so hat es doch Fehlerpotential
    - heißer Tipp: (viel) mehr Kommentare im Code !

    Meine Empfehlungen:
    - stelle den korrekten Prozessortakt sicher, z.B. anhand einer Debugging-LED, die im Sekundentakt blinken soll und auch in dieser Frequenz blinkt
    - verlangsame das Timing; das LCD kommt auch mit quasi-stationären Signalen zurecht.
    - notfalls stoppe nach jedem I/O-Vorgang den Programmablauf und prüfe, ob sich tatsächlich die erwarteten Leitungspegel einstellen

    Zum Schluss:
    Nicht böse sein, wenn ich dir Ratschläge unter deinem Niveau gegeben haben sollte. Ich kann nicht herauslesen, ob deine ziemlich unscharfe Anfrage auf Nachlässigkeit oder fehlender Erfahrung beruht.

    Gruß
    Christian.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    22.03.2014
    Beiträge
    15
    Oh, ja,
    das war falsch von mir. ECIO ist für externe clock. das hatte ich falsch. da ich bei einem oszillator keinen multiplier einstellen kann, bin ich auf einen normalen quarz gegangen. jetzt läuft das display, aber kein can.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    938
    Zitat Zitat von Chandler Beitrag anzeigen
    jetzt läuft das display, aber kein can.
    Ja super für das LCD! Aber was ist mit CAN? Ist das was Grundsätzliches wegen des Quarzes? Klappte CAN früher schon mal?

    Edit:
    Hab grade deinen Thread zum CAN auf dsPIC4011/6011 entdeckt.
    Geändert von RoboHolIC (13.06.2015 um 01:40 Uhr)

Ähnliche Themen

  1. Probleme mit 4*20 LCD Display
    Von LDMaster im Forum AVR Hardwarethemen
    Antworten: 12
    Letzter Beitrag: 14.09.2009, 18:12
  2. RN-Minicontrol mit RN-LCD-Adapter und DIP LCD-Display 4x20
    Von Neffez im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 8
    Letzter Beitrag: 23.06.2008, 22:15
  3. Lcd Display mit KS0108
    Von iq250 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 12.04.2007, 00:14
  4. 8*1 LCD Display mit Bascom?
    Von Powell im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 05.10.2006, 17:51
  5. +5V LCD Display an AVR mit 3,5V
    Von Björn im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 08.08.2005, 22:22

Berechtigungen

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