- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 38

Thema: LCD an ATmega32

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    JTAG ist aus?

    MfG
    Rone

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    12.08.2010
    Ort
    Zürich
    Alter
    61
    Beiträge
    39
    Zitat Zitat von Rone Beitrag anzeigen
    JTAG ist aus?
    Ja, "1: JTAG disabled"

    @Hannes: Im Anhang findest Du das Hex- und das Sourcefile. Danke für den Test.
    Angehängte Dateien Angehängte Dateien
    Geändert von tuttle64 (15.09.2012 um 11:06 Uhr)

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Hier das Setup für mein 20x4-LCD mit 4-Bit-Ansteuerung:
    Code:
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
    Config Lcd = 20 * 4
    Config Lcdbus = 4
    (Aus https://www.roboternetz.de/community...l=1#post463605)

    Vielleicht hilft's.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Ich werde es testen, es könnte aber sein das du die Frequenz ändern musst, da ich keinen 16Mhz Quarz habe und kein Bascom verwende. Ich programmiere in C mit dem AVR Studio.

    MfG Hannes

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Ich habe es getestet. Funktioniert ohne Probleme. Ich habe es mit dem internen 8Mhz Oszillator und einem 2x16 LCD getestet.

    Ich würde eher auf vertauschte Leitungen, schlechte Leitungsverbindung o.Ä. tippen.

    MfG Hannes
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken DSCN4713.jpg  

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    12.08.2010
    Ort
    Zürich
    Alter
    61
    Beiträge
    39
    Ich werde zum Lötkolben greifen und das LCD mit einer Stiftleiste versehen. Damit sollte die Verbindung zu einem Steckbrett ohne Probleme möglich sein.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    12.08.2010
    Ort
    Zürich
    Alter
    61
    Beiträge
    39
    Mit grosser Freude kann ich endlich aufatmen: Mit der Unterstützung von http://newbiehack.com/MicrocontrollerTutorial.aspx habe ich mein 16x4 LCD zum Laufen gebracht habe. Ein grosses Danke auch an Euch für die Beiträge hier in diesem Strang.

    Zur Zeit läuft noch alles auf einem Steckbrett und im 8-bit Modus, egal, ich kann Strings übermitteln und ausgeben. Da ich keine vernünftige Doku zur Programmierung des LCD gefunden habe, werde ich etwas experimentieren müssen. Bis bald.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    12.08.2010
    Ort
    Zürich
    Alter
    61
    Beiträge
    39
    Zitat Zitat von 021aet04 Beitrag anzeigen
    Ich werde es testen, es könnte aber sein das du die Frequenz ändern musst, da ich keinen 16Mhz Quarz habe und kein Bascom verwende. Ich programmiere in C mit dem AVR Studio.
    Ich habe das LCD mit Bascom programmiert, da ich ausschliessen wollte, dass der Fehler in der Software liegt. Kannst Du mir Dein C Sourcecode rüberbeamen?

    Als Greenhorn habe ich mich mit der Verbindung vom LCD auf Port C vertan. Könnte sein, dass ich den Bug dort entfernen kann. Bin trotzdem dankbar für den Quellecode in C.

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Ich kann dir den Quellcode geben.

    Die eigentliche Routine ist:
    Code:
    #include "HD44780.h"
    
    void LCD_Ctrl (unsigned char data)
    {
    
        PORTB &= ~(1<<RS);
    
    //erstes Nibble
    
        PORTC = ((data & 0xF0)>>4);
        PORTB |= (1<<EN);
        asm volatile ("nop");
        PORTB &= ~(1<<EN);
    
    //zweites Nibble
    
        PORTC = data & 0x0F;
        PORTB |= (1<<EN);
        asm volatile ("nop");
        PORTB &= ~(1<<EN);
    
        _delay_us(100);
    
    }
    
    void LCD_Home (void)
    {
    //Display löschen und auf Homeposition setzen
        LCD_Ctrl (0x01);
        _delay_ms(1);
        LCD_Ctrl (0x02);
        _delay_ms(5);    
    }
    
    void LCD_Data (unsigned char data)
    {
        _delay_us(100);
    
    //erstes Nibble
    
        PORTC = ((data & 0xF0)>>4);
        PORTB |= (1<<RS);
        PORTB |= (1<<EN);
        asm volatile ("nop");
        PORTB &= ~(1<<EN);
    
    //zweites Nibble
    
        PORTC = data & 0x0F;
        PORTB |= (1<<RS);
        PORTB |= (1<<EN);
        asm volatile ("nop");
        PORTB &= ~(1<<EN);
            
        PORTB &= ~(1<<RS);
    
        _delay_us(100);
    }
    
    void LCD_Init(void)
    {
        DDRC |= 0x0F;                    //PC0 - PC3 als Ausgang
        DDRB |= (1<<PB6) | (1<<PB7);    //RS und EN als Ausgang
    
        _delay_ms(15);
        LCD_Ctrl (0x28);
    
        _delay_ms(5);
        LCD_Ctrl (0x28);
    
        _delay_ms(1);
        LCD_Ctrl (0x28);
    
    /*    0b00001DCB
            0        1
    D:         Display
           aus     ein
    C:         Cursor
           aus     ein
    B:         Blinken
           aus     ein
    0x0F: Display ein, Cursor sichtbar, Blinken ein
    0x0E: Display ein, Cursor sichtbar, Blinken aus
    0x0C: Display ein, Cursor unsichtbar, Blinken aus
    
    */
        _delay_ms(1);
        LCD_Ctrl (0x0C);
    
        _delay_ms(1);
        LCD_Ctrl (0x01);
    
        _delay_ms(1);
        LCD_Ctrl (0x02);
    
        _delay_ms(5);
    
    }
    
    void LCD_Pos (unsigned int zeile, unsigned int spalte)
    {
        LCD_Ctrl (0x80 + spalte - 1+ 0x40 * (zeile - 1));
        _delay_us (100);
    }
    
    void LCD_String (char text [20])
    {
        unsigned int i=0;
        
        while ((!(text[i] == 0)) & (i < 20))
        {
            LCD_Data (text[i]);
            i++;
        }
    }
    
    void LCD_Integer (unsigned int data)
    {
        unsigned char a;
    
        a = (data % 10000)/1000;        //Tausender
        LCD_Data (a + 48);
    
        a = (data % 1000)/100;            //Hunderter
        LCD_Data (a + 48);
    
        a = (data % 100)/10;            //Zehner
        LCD_Data (a + 48);
    
        a = data % 10;                    //Einer
        LCD_Data (a + 48);
        
    }
    Ich habe 1:1 vom Buch "Basiskurs R8C/13" von Elektor genommen (nur Ports,... an den AVR angepasst).

    In der HD44780.h sind nur andere Headerdateien, die man benötigt (z.B. damit man "PORTX",... nutzen kann), und es ist noch RS bzw EN definiert.

    Die einzelnen Funktionen sind:
    LCD_Ctrl => wird verwendet um das LCD einzustellen (Kommandos senden), LCD wird gelöscht und Cursorposition wird auf Home gesetzt
    LCD_Data => wird verwendet um Daten an das LCD zu senden, damit etwas angezeigt wird
    LCD_Init => stellt die benötigten Pins auf Ausgang, stellt das LCD ein
    LCD_Home => löscht das Display und setzt den Cursor auf die Grundposition (Zeile 1, Spalte 1)
    LCD_Pos => springe zu Cursorposition
    LCD_String => übergibt einen String an das LCD
    LCD_Integer => übergibt eine Zahl von "0000" bis "9999" an das Display, inkl. auftrennen der einzelnen Stellen

    Das Beispiel von dir würde dann in etwa so aussehen (die Headerdateien,... fehlen noch, die Main funktioniert aber so):

    Code:
    .........
    
    int main (void)
    {
         LCD_Init;
         LCD_String ("16x4 LCD Display");
         LCD_Pos (2, 1);
         LCD_String ("----------------");
    }

Ähnliche Themen

  1. I2C an ATMEGA32
    Von WeiserDruide im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.07.2010, 12:27
  2. ADC mit ATmega32
    Von Jannik im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 12.03.2008, 08:36
  3. datenaustausch von atmega32 zu atmega32 über spi usw...
    Von roboterheld im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.10.2007, 22:39
  4. Speicherplatz des ATmega32 + Display an ATmega32
    Von Rob.Anfänger im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 19.11.2006, 01:59
  5. ATMega32
    Von AceKiller73 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 29.04.2006, 21:51

Berechtigungen

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

LiFePO4 Speicher Test