LCD-display des ARM7 über Ports ansteuern

Gast #2631514
Lesenswert?

Hallo

muss in der Schule ein Programm schreiben, welches das LCD-Display des 
ARM7
über die Ports ansteuert.(über jeden Port soll ein halbes Bit gesendet 
werden) Das alles soll in eine Library geschrieben werden.
Da ich mich leider nicht auskenne bitte ich um Hilfe.
mfg Marco :)
#2631535
Lesenswert?

Marco schrieb:
> Hallo
>
> muss in der Schule ein Programm schreiben, welches das LCD-Display des
> ARM7
> über die Ports ansteuert.(über jeden Port soll ein halbes Bit gesendet
> werden) Das alles soll in eine Library geschrieben werden.
> Da ich mich leider nicht auskenne bitte ich um Hilfe.
> mfg Marco :)

Am besten nimmst du dir einen Stuhl und setzt dich an den Portausgang, 
dann wartest du, bis ein Bit vorbeikommt. Sobald ein Bit erscheint, 
haust du es mit der Axt genau in der Mitte durch und verteilst es an den 
anderen Port.

Ganz einfach.
#2631560
Lesenswert?

Marco schrieb:
> hahaha ^^
> mein problem ist dass ich einen fünfer bekomme wenn ich dieses Projekt
> nicht abgebe ...
> Eine ernsthafte Hilfe würde mir mehr helfen

Na und? Die bekommst du dann zurecht.

Wie frech muss man eigentlich sein, wenn man von anderen erwartet deinen 
Job zu machen?! Studier die Grundlagen, arbeite ein Konzept aus, wenn du 
dann noch fragen hast, dann zeigst du uns, was du bisher gemacht hast 
und wir helfen dir vielleicht - falls du höflich bleibst.

Halbe Bits? Sehr lustig!
Gast #2631575
Lesenswert?

int main(void)
{

  #define LCD_PORT      PORTC
  #define LCD_BOOTUP_MS           15
  #define LCD_ENABLE_US           20
  #define LCD_WRITEDATA_US        46
  #define LCD_COMMAND_US          42

  #define LCD_SOFT_RESET_MS1      5
  #define LCD_SOFT_RESET_MS2      1
  #define LCD_SOFT_RESET_MS3      1
  #define LCD_SET_4BITMODE_MS     5

  #define LCD_CLEAR_DISPLAY_MS    2
  #define LCD_CURSOR_HOME_MS      2
  #define LCD_DDADR_LINE1         0x00
  #define LCD_DDADR_LINE2         0x40





  void lcd_init( void );
  void lcd_clear( void );
  void lcd_home( void );
  //void lcd_setcursor( uint8_t spalte, uint8_t zeile );
  void lcd_data( uint8_t data );

   void lcd_data( uint8_t data )
{
    LCD_PORT |= (1<<LCD_RS);    // RS auf 1 setzen

    lcd_out( data );            // zuerst die oberen,
    lcd_out( data<<4 );         // dann die unteren 4 Bit senden

    _delay_us( LCD_WRITEDATA_US );
}
}
Das ist der Programmcode den ich bereits ausprobiert habe.
Allerdings kommt bei dem Befehl unit8_t immer eine Fehlermeldung.
#2631597
Lesenswert?

Marco schrieb:
> Das ist der Programmcode den ich bereits ausprobiert habe.
> Allerdings kommt bei dem Befehl unit8_t immer eine Fehlermeldung.

Bei uint8_t handelt es sich um keinen Befehl, sondern um ein #define, 
d.h., dass hier stellvertretend für den Variablentyp "unsigned char" ein 
"uint8_t" angegeben wird, z.B.:

#define uint8_t  usigned char

Das ist eine sog. Präprozessoranweisung, die vom Präprozessor vor dem 
eigentlichen Übersetzen deines C-Code durch den Compiler ersetzt wird. 
Dazu muss die o.g. #define-Anweisung aber in einem Headerfile deines 
Codes vorhanden sein, damit der Präprozessor das "uint8_t" im Code auch 
durch "unsigned char" ersetzen kann. Ist das nicht der Fall, bricht der 
Vorgang ab und du bekommst eine Fehlermeldung.

Schreibe mal an den Anfang deiner Datei(en) "#include stdint.h", darin 
sollte die Deklarationen enthalten sein. Siehe hier:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial (such mal 
danach)

Dir scheinen die einfachsten Grundlagen der C-Programmierung zu fehlen, 
es schadet also nichts, das AVR-Tutorial hier zum GCC mal zu studieren, 
da lernst du eigentlich das Meiste dessen, was du für deine Aufgabe 
brauchst.

Und noch was: du sendest hier kein halbes Bit, sondern ein halbes Byte 
zweimal hintereinander. Das macht man, wenn man bei dem von dir 
verwendeten Display statt 8 Portpins nur 4 nutzen möchte, um am 
Controller 4 Portpins eben für andere Zwecke nutzen zu können. Da das 
Display dies erlaubt, was nicht selbstverständlich ist, sendest du eben 
statt eines ganzen Bytes 2x 4 Bits, was ergo 8 Bits = 1 Byte ergibt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren