-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: LCD an PORTC DB7->PORTC0

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.08.2007
    Alter
    27
    Beiträge
    324

    LCD an PORTC DB7->PORTC0

    Anzeige

    Hi,

    wie ich bereits an anderer Stelle erwähnt habe ist es mir doch tatsächlich gelungen ein LCD nicht zu zerschiessen! Jetzt würde ich gerne das Bascom Testprogramm, das ich geschrieben hatte durch ein C Programm ersetzen. Da ich das Rad nicht neu erfinden möchte, dachte ich mir, ich könnte entweder die LCDLib von Peter Fleury oder die im GCC Tutorial von mikrocontroller.net bereitgestellte LCDlib verwenden. Leider gibt es dabei einige Probleme.

    PfleuryLib möchte, das der AVR mit DB0-3 und nicht mit DB4-7 des LCDs verbunden wird. Ich habe allerdings DB4-7 an ein Flachbandkabel gelötet, wie es im Wiki beschrieben wird.
    Außerdem möchte die Lib, dass man einen Portpin für RW angibt. RW liegt bei mir aber permanent auf Masse (weil ich sowieso nur schreiben möchte).

    Die mikrocontroller.net Variante benötigt zwar keinen RS Pin und möchte auch DB4-7 verwenden, jedoch kann man dort nicht konfigurieren, welcher DB mit welchem PORTC verbunden werden soll. Er macht immer DB4->PC0, usw.
    Mein Aufbau sieht jedoch DB7->PC0, DB6->PC1, DB5->PC2, DB4->PC3, Enable -> PC4, RS->PC5 vor.

    Wie kann ich eine der beiden Libs für meinen Aufbau konfigurieren? In Bascom gings ja ganz einfach ^^, aber C ist halt nicht Bascom.

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.184
    Ich verwende auch die Lib von Fleury, da stellt man in der lcd*.h ein wie man die Pin belegt. Es ist nicht notwendig alle an einen Port zu legen.
    Das R/W ist nicht nur für lesen gedacht, sondern auch für die Abfrage des Busy-Bit. Die Schreibzyklen werden dadurch schneller.
    Ich verwende es allerdings fast immer ohne R/W.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.08.2007
    Alter
    27
    Beiträge
    324
    Danke schonmal

    Wie vermittele, das ich kein BusyBit möchte?
    Wo stelle ich ein, dass ich DB4-7 und nicht DB0-3 verwenden möchte?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    In der lcd.h:

    Code:
    #define LCD_PORT         PORTD        /**< port for the LCD lines   */
    #define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
    #define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
    #define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
    #define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
    #define LCD_DATA0_PIN    3            /**< pin for 4bit data bit 0  */
    #define LCD_DATA1_PIN    2            /**< pin for 4bit data bit 1  */
    #define LCD_DATA2_PIN    1            /**< pin for 4bit data bit 2  */
    #define LCD_DATA3_PIN    0            /**< pin for 4bit data bit 3  */
    #define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
    #define LCD_RS_PIN       7            /**< pin  for RS line         */
    #define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
    #define LCD_RW_PIN       6            /**< pin  for RW line         */
    #define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
    #define LCD_E_PIN        5            /**< pin  for Enable line     */
    Das mit dem Busy-Bit weiß ich gar nicht, ob man das in der Fleury-Bib abstellen kann...
    Du könntest aber einfach die lcd_waitbusy() umschreiben.

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.184
    Hier ist meine lcd-lib. In der lcd_new.h stellst du das Port und die Pin ein und ob du mit oder ohne R/W willst.
    Unter #define lcd_busy_time 1000 kannst du die Wartezeit einstellen. Hier sind 1000µsec eingestellt, es geht meist kürzer, ist jedoch individuell einzustellen wenn man es sehr kurz haben will.
    Angehängte Dateien Angehängte Dateien
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.08.2007
    Alter
    27
    Beiträge
    324
    Code:
    #define LCD_DATA0_PIN    3            /**< pin for 4bit data bit 0  */ 
    #define LCD_DATA1_PIN    2            /**< pin for 4bit data bit 1  */ 
    #define LCD_DATA2_PIN    1            /**< pin for 4bit data bit 2  */ 
    #define LCD_DATA3_PIN    0            /**< pin for 4bit data bit 3  */
    Aber mein LCD wird nicht über DB0-3 sondern über DB4-7 angesteuert. Wo kann ich einstellen, dass ich 4-7 verwenden möchte?

    thx

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Ja genau da!
    Du musst halt nur die zahlen für alle Pins ändern...

    EDIT: oh Moment, ich glaube ich habe dich falsch verstanden!
    Also die aufgelisteten Pins beziehen sich auf DB4-7. Also was dort mit 0 bezeichnet ist, bezieht sich auf DB4, die 1 auf DB5, usw.

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.184
    Das du vom LCD her die Leitungen DB4-7 verwendest ist bei 4bit Steuerung ohnehin klar.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hi, Barthimaeus,

    noch munter? Bei meiner Fleury-lib gibts ne lcd_2x24.h dazu (natürlich auch die lcd_2x24.c). Da steht so etwa ab Zeile 81 für den 4-Bit-Modus ein bemerkenswerter Satz - und danach kommt die Port-/bzw. Pindefinition.

    Zitat Zitat von File: $Id: lcd.h,v 1.13.2.2 2006/01/30 19:51:33 peter Exp $
    * Normally the four data lines should be mapped to bit 0..3 on one port, but it
    * is possible to connect these data lines in different order or even on different
    * ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions....
    ... in different order or even on different ports ...

    Code:
    #define LCD_PORT         PORTA        /**< port for the LCD lines   */
    #define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
    #define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
    #define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
    #define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
    #define LCD_DATA0_PIN    0            /**< pin for 4bit data bit 0  */
    #define LCD_DATA1_PIN    1            /**< pin for 4bit data bit 1  */
    #define LCD_DATA2_PIN    2            /**< pin for 4bit data bit 2  */
    #define LCD_DATA3_PIN    3            /**< pin for 4bit data bit 3  */
    #define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
    #define LCD_RS_PIN       4            /**< pin  for RS line         */
    #define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
    #define LCD_RW_PIN       5            /**< pin  for RW line         */
    #define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
    #define LCD_E_PIN        6            /**< pin  for Enable line     */
    Da hatte ich eingetragen, was für mich sinnig war - und schon liefs.
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.08.2007
    Alter
    27
    Beiträge
    324
    Habe es jetzt mit Hubters Überarbetung von PFleury probiert und folgender Konfiguration:
    #ifndef F_CPU
    #define F_CPU 8000000L /**< clock frequency in Hz, used to calculate delay timer */
    #endif

    /**
    * @name Definition for LCD controller type
    * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.
    */
    #define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */

    /**
    * @name Definitions for Display Size
    * Change these definitions to adapt setting to your display
    */
    #define LCD_LINES 2 /**< number of visible lines of the display */
    #define LCD_DISP_LENGTH 16 /**< visibles characters per line of the display */
    #define LCD_LINE_LENGTH 0x40 /**< internal line length of the display */
    #define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */
    #define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */
    #define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */
    #define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */
    #define LCD_WRAP_LINES 0 /**< 0: no wrap, 1: wrap at end of visibile line */

    #define LCD_READ_REQUIRED 0 /* 1: R/W aktiv, 0: R/W nicht aktiv,
    * alle Funktionen die "lcd_read" benötigen sind inaktiv */
    #if LCD_READ_REQUIRED == 0
    #define lcd_busy_time 1000 /* busy_time 5000µsec */
    #endif

    #define LCD_IO_MODE 1 /**< 0: memory mapped mode, 1: IO port mode */
    #if LCD_IO_MODE
    /**
    * @name Definitions for 4-bit IO mode
    * Change LCD_PORT if you want to use a different port for the LCD pins.
    *
    * The four LCD data lines and the three control lines RS, RW, E can be on the
    * same port or on different ports.
    * Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on
    * different ports.
    *
    * Normally the four data lines should be mapped to bit 0..3 on one port, but it
    * is possible to connect these data lines in different order or even on different
    * ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.
    *
    */
    #define LCD_PORT PORTC /**< port for the LCD lines */
    #define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
    #define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
    #define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
    #define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
    #define LCD_DATA0_PIN 3 /**< pin for 4bit data bit 0 */
    #define LCD_DATA1_PIN 2 /**< pin for 4bit data bit 1 */
    #define LCD_DATA2_PIN 1 /**< pin for 4bit data bit 2 */
    #define LCD_DATA3_PIN 0 /**< pin for 4bit data bit 3 */
    #define LCD_RS_PORT LCD_PORT /**< port for RS line */
    #define LCD_RS_PIN 5 /**< pin for RS line */

    #if LCD_READ_REQUIRED
    #define LCD_RW_PORT LCD_PORT /**< port for RW line */
    #define LCD_RW_PIN 6 /**< pin for RW line */
    #endif

    #define LCD_E_PORT LCD_PORT /**< port for Enable line */
    #define LCD_E_PIN 4 /**< pin for Enable line */
    und diesem Testprogramm:

    ************************************************** ***********************
    Title: testing output to a HD44780 based LCD display.
    Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
    File: $Id: test_lcd.c,v 1.6 2004/12/10 13:53:59 peter Exp $
    Software: AVR-GCC 3.3
    Hardware: HD44780 compatible LCD text display
    ATS90S8515/ATmega if memory-mapped LCD interface is used
    any AVR with 7 free I/O pins if 4-bit IO port mode is used
    ************************************************** ************************/
    #include <stdlib.h>
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include "lcd_new.h"



    int main(void)
    {

    lcd_init(LCD_DISP_ON);

    for (; { /* loop forever */
    lcd_puts("LCD Test Line 1");


    }
    }

    Der Bildschirm bleibt leer...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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