-         

Ergebnis 1 bis 4 von 4

Thema: Kleines Problem bei Ansteuerung eines KS0108

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    29
    Beiträge
    235

    Kleines Problem bei Ansteuerung eines KS0108

    Anzeige

    Hallo zusammen,

    Habe mal meine erste eigene Ansteuerung für einen KS0108 Controller geschrieben.
    Die tut auch soweit das was sie soll. Das einzige Problem was ich habe ist aber folgendes:

    Wenn ich ein Zeichen an der Stelle 0,0 ausgebe wird diese korrenkt ausgegeben und dargestellt, sobald ich dann aber an eine andere Stelle x,y wechsel, wird das Zeichen was
    vorher an 0,0 stand an die Stelle x,y übertragen. Es soll aber da bleiben wo es ist und an der Stelle x,y möchte ich gerne was neues ausgeben.

    Ich häng mal meinen Code dran, vllt findet ja jemand den Fehler?

    MAIN:
    Code:
    char a[6] = {0x00, 0x7C, 0x12, 0x12, 0x7C, 0x00};
    
    
    int main(void)
    {
    
        Init_UART();
        Init_LCD();
    
        GotoXY(0,0);
        Write_data(a[0]);
        Write_data(a[1]);
        Write_data(a[2]);
        Write_data(a[3]);
        Write_data(a[4]);
        Write_data(a[5]);
        _delay_ms(3000);
        GotoXY(0,8);
    
        while(1);
    
        return 0;
    }
    Benötigte Funktionen:
    Code:
    void GotoXY(unsigned char x, unsigned char y) //DONE
    {
        if(x>123)
            x = 0;
        if(x>63)
        {
            x = x -64;
            Select_chip(CS2);
            Write_cmd((SET_ADD | x), CS2);
            Write_cmd((START_LINE | (64-y)), CS2);
        }
    
        else if(x<=63)
        {
            Select_chip(CS1);
            Write_cmd((SET_ADD | x), CS1);
            Write_cmd((START_LINE | (64-y)), CS1);
        }
    }
    
    
    
    
    void Write_cmd(unsigned char cmd, unsigned char CHIP) //DONE
    {
        CMD_PORT &= ~((1<<DI) | (1<<RW) | (1<<EN));
        Select_chip(CHIP);
        
        DDR_DATA_PORT = 0xFF;
    
        DATA_PORT = cmd;
        Enable();
        DATA_PORT = 0x00;
    }
    
    
    
    void Write_data(unsigned char Data) //DONE
    {
        CMD_PORT |= (1<<DI);
        CMD_PORT &= ~(1<<RW);
    
        DATA_PORT = Data;
    
        Enable();
        DATA_PORT = 0x00;
    
    }
    
    
    
    
    void Enable(void) //DONE
    {
        for(i=0;i<10;i++);
        CMD_PORT |= (1<<EN);
        for(i=0;i<10;i++);
        CMD_PORT &= ~(1<<EN);
        for(i=0;i<10;i++);
    }
    Such schon länger aber find den Fehler nicht, vllt liegt es ja auch dadran dass ich irgendwas im Datenblatt übersehen hab

    Also wenn jemand nen Tip hat immer her damit

    LG




    EDIT: Was mir grad eingefallen ist, hast das vllt. was mit dem SetPage des KS0108 zu tun? Denn das hab ich bis jetzt noch gar nicht verwendet weil ich die y-Werte immer nur über Display Start Line verändert hab.
    Was mir nämlich grad aufgefallen ist - das Problem tritt nur auf wenn ich die y-Zeile verändere. Wenn ich also mehrere Zeichen in der gleichen Zeile ausgeben will ist das kein Problem
    Geändert von MelMan (02.06.2011 um 17:39 Uhr)
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    29
    Beiträge
    235
    Ok hab folgendes mal probiert:
    Code:
    void GotoXY(unsigned char x, unsigned char y) //DONE
    {
        if(x>123)
            x = 0;
        if(x>63)
        {
            x = x -64;
            //Select_chip(CS2);
            Write_cmd((SET_ADD | x), CS2);
            
            Write_cmd((SET_PAGE | (y/8)), CS2);
            //Write_cmd((START_LINE | (64-y)), CS2);
        }
    
        else if(x<=63)
        {
            //Select_chip(CS1);
            Write_cmd((SET_ADD | x), CS1);
            
            Write_cmd((SET_PAGE | (y/8)), CS1);
            //Write_cmd((START_LINE | (64-y)), CS1);
        }
    }
    Jetzt kann ich auch mehrere Zeichen anzeigen, unabhängig von der Zeile. Aaaaaaber ich kann ja jetzt nur zwischen 8 Zeilen wählen.
    Was mach ich aber wenn ich ein Zeichen auf z.B. die Position x=0, y=5 setzen will? Denn durch das in meiner Funktion verwendete
    Code:
    Write_cmd((SET_PAGE | (y/8)), CS2);
    kann ich ja nur zwischen 8 Zeilen wählen.
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    29
    Beiträge
    235
    Hat keiner ne Idee oder weiß wie man das machen muss
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Ich habe mich mit dem KS0108 noch nicht beschäftigt.
    Wenn du aber im Mikrocontroller.net bei der Suche KS0108 eingibst, erhälts du 335 Threads als Antwort.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Ähnliche Themen

  1. Problem: Ansteuerung eines LCD über I2C
    Von Olli08 im Forum Asuro
    Antworten: 21
    Letzter Beitrag: 10.06.2010, 23:42
  2. PIC16F877 und GLCD (KS0108) - Problem
    Von Eigo im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 10.11.2009, 16:27
  3. KS0108 und Bascom Demo Problem
    Von Marten83 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 23
    Letzter Beitrag: 08.04.2007, 10:53
  4. "Kleines" Problem, Ansteuerung DC-Motor/0,55KW
    Von sonic im Forum Elektronik
    Antworten: 17
    Letzter Beitrag: 26.02.2005, 00:53
  5. Problem mit ansteuerung eines I²C LCDs.
    Von tobimc im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 12.10.2004, 16:11

Berechtigungen

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