Hallo erstmal,

schön wie dieser Thread besucht wird, auch wenn hilfreiche Antworten bisher ausblieben. Toll ist auch, dass der Ansichtszähler trotzdem steigt.... entweder hat keiner eine Lösung, jeder sucht danach oder ich bin in Forums-Ungnade gefallen?!?

OK, auch wenn in mehreren anderen Threads dieses Thema schon angesprochen wurde und anscheinend einige Leute ihre Displays mit AVR-GCC auch zum laufen gebracht haben, warte ich momentan noch auf die göttliche Eingebung.

Das schlimmste ist allerdings, dass die Einträge hier völlig ignoriert werden. Kann mich nicht wenigstens ein Moderator beschimpfen, dass ich schon wieder einen neuen Thread aufgemacht habe?

Es würde aber auch schon ein funktionierender Code reichen. Die ganzen Tipps aus diesem Forum, von www.mikrocontroller.net und AVR Freaks und was weiss ich, haben mir aufgrund vieler Wissenslücken meinerseits auch nicht viel geholfen. Trotzdem danke dafür, da ich jetzt (glaube) zumindest schon teilweise zu verstehen, wie die grobe Vorgehensweise ist.

Also, eine letzte Bitte um Unterstützung:

Hat bitte jemand einen funktionierenden C-Code für RN-Control 1.4, KS0073 Display und Adapter von robotikhardware????

Mein Hauptproblem ist (so denke ich ) die Initialisierung, welcher Schritt wann, wieoft, welche Pausen usw.. Das Beispiel im Datenblatt (das von Samsung und das von robotikhardware) brachte mich auch nicht weiter, weder im < 4 Zeilen Modus noch mit 4 Zeilen.

Jetzt habe ich (nachdem ich vorher das umgeschriebene BASCOM-Beispiel eingespielt habe, danach meinen Code ), zumindest einen blinkenden Cursor in der 3. Zeile gehabt, auch wenn das Display die Return Home und Clear Display mal fein ignoriert hat. Dann einen &-Fehler im Code geändert, der für das senden der Zeichendaten zuständig ist und schon wars wieder nix. Display leer und an, ohne Cursor..... ich flipp noch aus.
Code:
#include <avr/io.h>

#include <util/delay.h>

/* Port Definition */
#define LCD_PORT    PORTB
#define LCD_DB0     0
#define LCD_DB1     1
#define LCD_DB2     2
#define LCD_DB3     3
#define LCD_DB4     0
#define LCD_DB5     1
#define LCD_DB6     2
#define LCD_DB7     3
#define LCD_LIGHT   4
#define LCD_EN      5
#define LCD_RW      6
#define LCD_RS      7

#define LCD_DDR     DDRB
#define LCD_BUSY    PINB.7

unsigned char lcd_is_busy()
{
    _delay_ms( 50 );

    return 0;
}

void lcd_enable()
{
    LCD_PORT |=  ( 1 << LCD_EN );
    _delay_us( 10 );
    LCD_PORT &=  ~( 1 << LCD_EN );
}

void lcd_cmd( unsigned char command )
{
    unsigned char tmp = ( command >> 4 ) & 0x0F; // High-Nibble nach unten schieben
   
    LCD_PORT |= tmp; // senden

    lcd_enable(); // EN umschalten

    tmp = command & 0x0F; // Low-Nibble nehmen

    LCD_PORT |= tmp; // senden

    lcd_enable(); // EN umschalten
    
    while( lcd_is_busy() );
}

void lcd_data( unsigned char data )
{
    unsigned char tmp = ( data >> 4 ) & 0x0F; // High-Nibble nach unten schieben

    tmp |= ( 1 << LCD_RS );    // Daten senden vorbereiten

    LCD_PORT |= tmp; // senden

    lcd_enable(); // EN umschalten

    tmp = data & 0x0F; // Low-Nibble nehmen

    tmp |= ( 1 << LCD_RS );    // Daten senden vorbereiten

    LCD_PORT |= tmp; // senden

    lcd_enable(); // EN umschalten
    
    while( lcd_is_busy() );
}

void init_display()
{
    _delay_ms( 50 ); // power up wait

    LCD_PORT = ( 1 << LCD_DB5 );   // Init
    lcd_enable();
    _delay_ms( 10 );
    lcd_enable();
    _delay_ms( 10 );
    lcd_enable();
    _delay_ms( 10 );
        
    LCD_PORT = ( 1 << LCD_DB5 );    // 4-Bit Modus
    lcd_enable();
    LCD_PORT = 0;                   // RE = 0
    lcd_enable();
    _delay_ms( 10 );

    // Extension Function Setting
    LCD_PORT = ( 1 << LCD_DB5 );    // 4-Bit Modus
    lcd_enable();
    LCD_PORT = ( 1 << LCD_DB2 );    // RE = 1
    lcd_enable();
    _delay_ms( 10 );
    
    LCD_PORT = 0;    // Extension Function Set
    lcd_enable();
    LCD_PORT = ( 1 << LCD_DB0 );    // 4-Zeilen-Modus
    lcd_enable();
    _delay_ms( 10 );
    
    LCD_PORT = ( 1 << LCD_DB5 );    // 4-Bit Modus
    lcd_enable();
    LCD_PORT = 0;                   // RE = 0
    lcd_enable();
    _delay_ms( 20 );
    
    // Display On
    LCD_PORT = 0;
    lcd_enable();
    LCD_PORT = ( 1 << LCD_DB3 ) | ( 1 << LCD_DB2 ) | ( 1 << LCD_DB1 ) | ( 1 << LCD_DB0 );
    lcd_enable();
    _delay_ms( 10 );
    
    // Clear Display
    LCD_PORT = 0;
    lcd_enable();
    LCD_PORT = ( 1 << LCD_DB0 );
    lcd_enable();
    _delay_ms( 10 );
    
    // Entry Mode Set
    LCD_PORT = 0;
    lcd_enable();
    LCD_PORT = ( 1 << LCD_DB2 ) | ( 1 << LCD_DB1 );
    lcd_enable();
    _delay_ms( 10 );

    // Return Home
    LCD_PORT = 0;
    lcd_enable();
    LCD_PORT = ( 1 << LCD_DB1 );
    lcd_enable();
    _delay_ms( 10 );
    
    // Licht an
    LCD_PORT = ( 1 << LCD_LIGHT );
}

int main( void )
{

    DDRB = 0xff;        /* Port als Ausgang deklarieren */ 
    PORTB = 0x00;       /* alles aus */

    init_display();
    
    _delay_ms( 10 );

    lcd_data( 0b01010011 );
    lcd_data( 0b01010011 );
    lcd_data( 0b01010011 );
    lcd_data( 0b01010011 );
    lcd_data( 0b01010011 );
    lcd_data( 0b01010011 );

    return 0;
}
Man riecht sich

Banzai