mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage - AVR-Pinbelegung


Autor: n00b (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin grad mehr oder weniger frisch in der Mikrocontrollerprogrammierung 
eingestiegen und hab da mal eine Verständnisfrage.

Ich wollte ein LCD-Display an meinen ATmega128 anschließen und mal 
kucken was passiert. Und bin dabei über folgende Codezeilen gestoßen.
/*
 * Copyright:      Fabian Maximilian Thiele  mailto:me@apetech.de
 * Author:         Fabian Maximilian Thiele
 * Remarks:        this Copyright must be included
 * known Problems: none
 * Version:        1.1
 * Description:    Graphic Library for KS0108- (and compatible) based LCDs
 * 
 */

#include <inttypes.h>
#include <avr/pgmspace.h>

#ifndef  KS0108_H
#define KS0108_H

// Ports
#define LCD_CMD_PORT    PORTA    // Command Output Register
#define LCD_CMD_DIR     DDRA    // Data Direction Register for Command Port

#define LCD_DATA_IN     PINC    // Data Input Register
#define LCD_DATA_OUT    PORTC    // Data Output Register
#define LCD_DATA_DIR    DDRC    // Data Direction Register for Data Port
// Command Port Bits

#define D_I          0x00    // D/I Bit Number
#define R_W          0x01    // R/W Bit Number
#define EN           0x02    // EN Bit Number
#define CSEL1        0x03    // CS1 Bit Number
#define CSEL2        0x04    // CS2 Bit Number

Speziell interessieren mich die letzten fünf Zeilen.
Ich weiß, dass die Pin D/I, R/W, EN, CSEL1 und CSEL2 an die Pins PC0 bis 
PC4 gehören (oder etwa nicht)?
Welche Syntax steckt denn da dahinter?
Ich meine aus den 5 Zeilen lese ich als Anfänger nicht das die zu PortC 
gehören. Hab auch schon das AVR-GCC-Tutorial bemüht aber nix so richtig 
gefunden (es sei denn es hat was mit "Vordefinierte Bitnummern für 
I/O-Register" zu tun).

Würde mich über eine Antwort freuen =)

Autor: Gerry L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind Variablen/Definitionen mit einem vernünftigem Namen.

So siehst du im Code gleich was du gerade setzt.
aus
     DDRC &= ~( 1 << DDC0 );
wird
     DDRC &= ~( 1 << CSEL2 );

Gerry

Autor: n00b (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso ... ist ja der Hammer =)

Nur um jeden Denkfehler meinerseits auszuschließen ...
Mit dem Code von oben ...
aus
DDRC &= ~( 1 << DDC0 );

wird
LCD_DATA_DIR &= ~( 1 << D_I);

Oder nicht?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
n00b schrieb:
> Ich meine aus den 5 Zeilen lese ich als Anfänger nicht das die zu PortC
> gehören.

Sie gehören auch nicht zu Port C:

> #define LCD_CMD_PORT    PORTA    // Command Output Register
...
> // Command Port Bits
> #define D_I          0x00    // D/I Bit Number

Das Command Register ist laut Kommentaren und den dazugehörigen 
Definitionen Port A.

Autor: n00b (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachvollziehbar ... habt Dank.

Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.