-         

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

Thema: LCD: Wo muss der R/W hin?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311

    LCD: Wo muss der R/W hin?

    Anzeige

    Hi,
    ich habe folgendes ausprobiert: Das LCD ist an meinen Mega8 wie im Wiki nach dem Anschlussschema OHNE BUSY LEITUNG angeschlossen. Mit der fleury-Bibliothek kann ich das gerät "richtig" nur betrieben, wenn ich die R/W-Leitung ebenfalls verwende. Bei meinem Mega8 sind jetzt die Ports PC0-5 belegt, die R/W Leitung könnte ich jetzt nur noch an PC6 (RESET) anschließen. Frage: darf ich das überhaupt? PC6?
    Viele Grüße,
    Simon

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Wenn du den als Ausgang verwendest eigentlich schon. Als Eingang aber auf keinen Fall. Du kannst auch bei den Fusebits einen anderen Pin als Reset-Pin auswählen.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von Jon
    Wenn du den als Ausgang verwendest eigentlich schon. Als Eingang aber auf keinen Fall. Du kannst auch bei den Fusebits einen anderen Pin als Reset-Pin auswählen.
    Grundlegend falsch.

    1. kann man den Resetpin des ATMega 8 nur dann verwenden, wenn man den Reset "wegfust"
    2. kann man ihn anschließend nur noch parallel programmieren
    3. kann man keinen anderen Pin als Reset definieren.

    Das steht übrigens alles im Datenblatt.

    Grüße,
    Hanni
    Grundregeln des Forenpostings:
    1. Nutze niemals die Suchfunktion!
    2. Überprüfe niemals die Topics nach Ähnlichkeiten!
    3. Schreibe alles in hellgelb!

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Zitat Zitat von Hanni
    Grundlegend falsch.
    Bei mir funzt es. Oder sieht es nur so aus, als würde es gehen?
    Ich hatte noch keine Probleme. Verwende aber auch kein Reset.

    sorry, dass ich so einen Mist erzählt habe

    jon
    Nice to be back after two years
    www.roboterfreak.de

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Okay, dann gegenfrage: kann ich einen anderen Port verwenden außer PrtC, wenn alle anderen schon belegt sind?

    vg Simon

    P.S.: bei mir funktioniert das Anlöten von R/W an PC6 mit Standradrfusebits auch nicht
    P.S.: Sorry für schlechtes Deutschm, muss geschwind aus dem Haus

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    @PCMan:
    Erstmal eine blöde Frage: Was für ein Display hast du?! Meine HD44780 Displays haben nur ein Busy-Flag... keine Busy-Leitung.
    Dann ist es ganz logisch, daß du das Display nur mit R/W betreiben kannst:
    Die Fleury-Lib testet nämlich das Busy-Flag und dafür wird gerade die R/W-Leitung benötigt (lesender Zugriff aufs Display!).
    Bei der LIB kannst du die Datenleitungen und die einzelnen Kontroll-Leitungen auf verschiedenen PORTS verteilen... dafür musst du aber ein paar Parameter in einer Header-Datei ändern..... steht aber alles in der Online-Dokumentation von P.Fleury!!!

    @Jon:
    Es geht sich nicht darum, ob du RESET verwendest oder nicht:
    Wenn RESET weggefuset wurde kannst du den AVR nur noch im High-Voltage-Modus programmieren... ISP und Low-Voltage-Programming funktionieren dann nicht mehr. Für die meisten Hobbybastler ist dieser Chip erstmal unbrauchbar... bis man sich ein richtiges Programmiergerät bastelt.
    Eine Möglichkeit gibts aber: Man kann vorher einen Bootloader im AVR ablegen, dann kann man RESET ohne bedenken wegfusen... Programme bekommt man dann ja per Bootloader ins Flash.

    Gruß,
    SIGINT

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    @Sigint:
    Sorry für die mangelnde Beschreibung: ja es handelt sich dabei um ein HD44780 Display (PLED aus Robotikhardware um genau zu sein). Den Source von P. Fleury habe ich schon etwas durchgearbeitet und diese Header-Definitionen habe ich auch verstanden. Mir ginge es prinzipiell nur darum zu wissen, ob sich die Ansteuerung auf EINEN Port beschränkt. Ich werde es jetzt aber mal einfach testen
    Btw: Ich habe auch versucht das Display im "nur schreiben" Modus zu betreiben, d.h. R/W auf Masse zu legen. Dann hatte ich in der lcd.c die Routinen, die Leseabfragen verwenden mit delay() ersetzt. Das Display ließ sich aber auf diesen Weg nicht schön ansteuern, gab immer wieder Fehler. Und das ganze rumgefiesele isses mir jetzt dann doch nicht wert...
    Vg und danke,
    Simon

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Hm also irgendwo muss ich noch einen Denkfehler haben.
    Folgendes Anschlussschemata (am mega8, keinen externen Oszillator oder ähnliches; Intern 1MHz)

    LCD-PIN........Bezeichnung..........Anschluss
    1..................Gnd.......................Gnd
    2..................Vcc........................Vcc
    3..................Vee.......................Vee (am Poti)
    4..................RS.........................PC4
    5..................R/W.......................PD0 (RXD)
    6..................Enable....................PC5
    7.
    8.
    9.
    10.
    11................DB4.......................PC0
    12................DB5.......................PC1
    13................DB6.......................PC2
    14................DB7.......................PC4

    main.c

    Code:
    #include <stdlib.h>
    #include <avr/io.h>
    
    #include "lcd.c"
    
    
    
    int main(void)
    {
        lcd_init(LCD_DISP_ON);
        lcd_clrscr();
        for (;;){
         lcd_puts("Test");
        }
    return 0;
    }
    lcd.h
    Code:
    #ifndef LCD_H
    #define LCD_H
    /*************************************************************************
     Title	:   C include file for the HD44780U LCD library (lcd.c)
     Author:    Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
     File:	    $Id: lcd.h,v 1.13.2.2 2006/01/30 19:51:33 peter Exp $
     Software:  AVR-GCC 3.3
     Hardware:  any AVR device, memory mapped mode only for AT90S4414/8515/Mega
    ***************************************************************************/
    
    /**
     @defgroup pfleury_lcd LCD library
     @code #include <lcd.h> @endcode
     
     @brief Basic routines for interfacing a HD44780U-based text LCD display
    
     Originally based on Volker Oth's LCD library,
     changed lcd_init(), added additional constants for lcd_command(), 
     added 4-bit I/O mode, improved and optimized code.
           
     Library can be operated in memory mapped mode (LCD_IO_MODE=0) or in 
     4-bit IO port mode (LCD_IO_MODE=1). 8-bit IO port mode not supported.
    
     Memory mapped mode compatible with Kanda STK200, but supports also 
     generation of R/W signal through A8 address line.
           
     @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury
     
     @see The chapter Interfacing a HD44780 Based LCD to an AVR
          on my home page.
    
    */
    
    /*@{*/
    
    #if (__GNUC__ * 100 + __GNUC_MINOR__) < 303
    #error "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !"
    #endif
    
    #include <inttypes.h>
    #include <avr/pgmspace.h>
    
    /** 
     *  @name  Definitions for MCU Clock Frequency
     *  Adapt the MCU clock frequency in Hz to your target. 
     */
    #define XTAL 8000000              /**< clock frequency in Hz, used to calculate delay timer */
    
    /**
     * @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_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    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      PORTD     /**< port for RW line         */
    #define LCD_RW_PIN       0            /**< pin  for RW line         */
    #define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
    #define LCD_E_PIN        5            /**< pin  for Enable line     */
    
    #elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \
          defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \
          defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)
    /*
     *  memory mapped mode is only supported when the device has an external data memory interface
     */
    #define LCD_IO_DATA      0xC000    /* A15=E=1, A14=RS=1                 */
    #define LCD_IO_FUNCTION  0x8000    /* A15=E=1, A14=RS=0                 */
    #define LCD_IO_READ      0x0100    /* A8 =R/W=1 (R/W: 1=Read, 0=Write   */
    #else
    #error "external data memory interface not available for this device, use 4-bit IO port mode"
    
    #endif
    ...
    REST Unverändert gelassen
    Müsste doch so eigentlich funktionieren oder? Ich habe selbst in der Makefile einmal F_CPU auf 1000000 und auch XTAL auf 1000000 (aus der lcd.h) gesetzt (müsste es eigentlich nicht 1000000UL heißen?), hat aber keinen Effekt - das Display bleibt schwarz.
    Viele Grüße,
    Simon

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Noch eine andere Frage: Das Fusebit JTAG wird mir weder im Pony-Prog noch in Bascom angezeigt. Wie kommt das?

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von PCMan
    Noch eine andere Frage: Das Fusebit JTAG wird mir weder im Pony-Prog noch in Bascom angezeigt. Wie kommt das?
    daher, das der ATmega 8 kein JTAG unterstützt ....
    Grundregeln des Forenpostings:
    1. Nutze niemals die Suchfunktion!
    2. Überprüfe niemals die Topics nach Ähnlichkeiten!
    3. Schreibe alles in hellgelb!

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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