- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: LCD intialisierung

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Anzeige

    E-Bike
    Hallo,

    als erstes musst du die lcdportdef.h anpassen. Du musst halt die Ports, Pins usw so eintragen wie es bei dir der Fall ist. Wenn du also Bit 0 (Datenleitung4)an PB0 angeschlossen hast,

    #define LCD_DATA0_PORT PORTB /**< port for 4bit data bit 0 */
    #define LCD_DATA0_DDR DDRB /**< port direction for 4bit data bit 0 */
    #define LCD_DATA0_PINS PINB /**< port for 4bit data bit 0 */

    #define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */


    Wobei ich gerade sehe das du diesen Teil
    Code:
    #define LCD_BRIGHTNESS_PORT	PORTB	/**< port for Brightness         */
    #define LCD_BRIGHTNESS_DDR	DDRB	/**< port direction for Brightness     */
    #define LCD_BRIGHTNESS_PIN	PB4		 /**< pin  for Brightness     */
    #define LCD_CONTRAST_PORT	PORTB	/**< port for CONTRAST         */
    #define LCD_CONTRAST_DDR	DDRB	/**< port direction for CONTRAST     */
    #define LCD_CONTRAST_PIN	PB5		/**< Pin for CONTRAST     */
    #define LCD_ON_PORT PORTC
    #define LCD_ON_DDR DDRC
    #define LCD_ON_PIN 6
    aus der Datei löschen kannst.

    Am besten du erzeugst dir dann noch eine lcd.h in der die benötigten Funktionen deklariert werden.

    Code:
    void InitLCD ();
    void WriteData (uint8_t , uint8_t);
    Jetzt schreibst du ein kleines Programm
    Code:
    ...
    #include "lcd.h"
    #include "global.h"
    
    int main (void){
    
    InitLCD ();
    while (1) {}
    
    return 0;
    }
    Jetzt muss das Display nach dem Einschalten leer sein.
    Es dürfen nicht mehr die Balken da sein! Vorher brauchst du nichts weiter probieren.
    Wenn das soweit geht, fügst du ein
    WriteData (0,65);
    hinter InitLCD(); ein. Dann sollte nach dem Einschalten ein A zu erkennen sein.
    Funktionen wie z.B. PrintString, PrintChar, werden hierfür nicht benötigt. Die kannst du dann ja später ergründen.

    Noch etwas, wenn du den Controller geflasht hast, ziehe für die ersten Versuche den ISP ab und schalte die Versorgung aus und wieder ein.
    Nicht das es da zu Konflikten kommt.

    Gruß

    Jens

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.07.2006
    Ort
    bei Karlsruhe
    Alter
    32
    Beiträge
    106
    Hallo Jens,
    vielen Dank für die ganze Hilfe, das "A" wird angezeigt, nur habe ich jetzt ein anderes Problem, wie bekomme ich jetzt z.B. die Funktion PrintString in die Headerdatei, ich habe schon versucht die Variablennamen (also x und y) wegzulassen und dann einige Teile nach des Kommas, aber immer kommen Fehlermeldungen.

    Gruss Josef

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Hallo,

    void PrintString (uint8_t,uint8_t,char *);

    Bitte beachte, dass der String nullterminiert sein muss. Das heißt das letzte Zeichen des Strings muss eine Null sein. Die Funktion gibt sonst lustige Dinge aus.

    Gruß

    Jens

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Und mit "Null" meint er nicht '0' (das lesbare Ascii-zeichen), sondern das nullte Zeichen der Ascii-Tabelle: char Nullzeichen = 0x00.

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.07.2006
    Ort
    bei Karlsruhe
    Alter
    32
    Beiträge
    106
    Hallo zusammen,
    entschuldigung, dass ich jetzt erst wieder antworte, ich hatte aber in den letzten Tagen so viel um die Ohren, dass ich einfach keine Zeit zum basteln hatte.
    Wie "nullterminiere" ich einen String?

    Gruss
    Josef

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    15.02.2008
    Ort
    Fürth
    Alter
    40
    Beiträge
    46
    Häng '\0' an den string an.

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Hallo,

    wichtig ist erst einmal das dein Puffer groß genug ist.

    char buffer[5] = "Hallo";
    ist ganz böse und falsch, immer. Hallo hat zwar nur 5 Buchstaben, aber für die Null ist kein Platz mehr.

    char *Buchstabe = 'a';
    nicht falsch, für PrintString aber auch böse.

    char buffer[15] = "Hallo";
    ist okay, in Anführungszeichen wird \0 automatisch angefügt.

    Aufpassen musst du auch, wenn du dir aus Zeichen Strings zusammenbasteles oder z.B. bei strncpy.

    char buffer[6] = "Hallo";
    char test [15] = "ABCDEFGHIJ";

    strncpy(test,buffer,3);
    test[3] = 0;

    ohne test [3] = 0; würde der Ausgabestring HalDEFGHIJ sein.

    okay?

    Ich benutze die Null, um das Ende des Strings zu erkennen. In der Annahme das ich weiß was ich tue, ist das für mich auch okay. Der Quellcode war nicht zur Veröffentlichung gedacht und auf meine Anwendung zurecht geschnitten. Bisher nicht einmal optimiert*. Darum musst du selber darauf achten, dass eine Null da ist. Denkbar ist, dass man die Funktion spätestens nach erreichen der Zeichen pro Zeile abbricht. Damit kann man zwar keinen Mist bei der Ausgabe vermeiden, zumindest wird die Funktion aber definiert abgebrochen.


    Gruß

    Jens


    * ohne Leidensdruck kann das auch noch seeehr lange dauern

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.07.2006
    Ort
    bei Karlsruhe
    Alter
    32
    Beiträge
    106
    Hi,
    also den Sinn hab ich jetzt verstanden, nur die Umsetzung nicht :X
    So'n klitze kleiner Beispielcode hilft mir weiter =)

    Gruß Josef

  9. #19
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Oder nutze einfach einen Buffer, der größer ist, als Dein geschriebenes und mach eine Schleife, die jedem Zeichen 0x00 zuweist. Dann kannst Du bequem Deinen String hineinschreiben und hinten ist garantiert ne null.

    Die Ausgabe von itoa macht die null selber.

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Hallo,

    ich befürchte fast, du siehst das zu kompliziert.

    Wenn du z.B. den String so initalisierst
    char MyString [10] = "Hallo";
    ist der automatisch Nullterminiert. Du musst mindestens immer ein Byte mehr Platz haben als Zeichen.
    sprich
    char MyString [5] = "Hallo"; //falsch
    char MyString [6] = "Hallo"; //richtig
    Zum echten Problem wird das ganze, wenn du dir deine Strings aus Zeichen oder Teilstrings zusammensetzt. Da können wir dir aber kein Beispiel geben, weil wir nicht wissen, wie du das machst. Nach dem letzten 'Nutz'-Zeichen musst du gegeben falls noch eine Null schreiben.
    z.B.
    MyString [0] = 'H';
    MyString [1] = 'a';
    ...
    MyString [5] = 0;
    oder
    MyString [5] = '\0';

    Gruß

    Jens

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test