Einträge der Kategorie 'Mikrocontroller'

Generische Portzuweisungen

Schreibt man einen Treiber für eine Mikrocontrollerapplikation (z. B. für ein USB-Device oder LCD-Display), so will man diesen meist in späteren Projekten wiederverwenden wollen. Deshalb werden insbesondere Port- und Pinzuweisungen an einer zentralen Stelle definiert. Da hierfür bei AVR/Atmel-Prozessoren gleich drei Register (Richtung, Eingang, Ausgang bzw. DDR, PORT, PIN) nötig sind, muss man hierfür auch drei “später anzupassende” Zeilen vorsehen:

#define USB_OUT   PORTD
#define USB_IN    PIND
#define USB_DDR   DDRD

Dank reverse-Engineering eines anderen Problems bin ich heute auf folgende (meines Erachtens geniale) Codestelle gestoßen, wie dieses Problem möglichst generisch und kurz gelöst wird:

// 1. concatenation-macro:
#define CONCAT(a, b)            a ## b
// 2. generic macros for PORT, PIN and DDR (AVR/Atmel):
#define OUTPORT(name)           CONCAT(PORT, name)
#define INPORT(name)            CONCAT(PIN, name)
#define DDRPORT(name)           CONCAT(DDR, name)
// 3. spezific macros for USB-module:
#define USB_OUT          OUTPORT(USB_CFG_IOPORTNAME)
#define USB_IN           INPORT(USB_CFG_IOPORTNAME)
#define USB_DDR          DDRPORT(USB_CFG_IOPORTNAME)

Somit ist statt obigem Dreizeiler nur noch folgendes nötig:

#define USB_CFG_IOPORTNAME      B

Auf den ersten Blick sieht dies jetzt viel komplexer als obere Variante aus. Um aber in einem späteren Projekt einen anderen Port zu verwenden, ist nur eine statt drei Zeilen anzupassen – somit besteht auch nicht die Gefahr, eine dieser Zeilen zu “vergessen”.

Außerdem sind Block #1 und #2 wiederverwendbar, Beispiel:

#define LCD_PORTNAME  B
#define LCD_PORT      OUTPORT (LCD_PORTNAME)
#define LCD_DDR       DDRPORT (LCD_PORTNAME)

Implementierung einer LIN-Kommunikation

am Beispiel eines Infineon xc161-Mikrocontrollers

Download des pdf-Dokuments

Update (2.7.10): Link fixed, pdf müsste jetzt erreichbar sein.

Inhalt:

  1. Einleitung
  2. Grundlagen des LIN-Busses
    2.1 LIN – Local Interconnect Network
    2.2 Physikalische Schicht (Physical Layer)
    2.3 Sicherungsschicht (Data Link Layer)
  3. Konfiguration des ASC-Moduls
    3.1 Konfigurationsregister ASC1_CON
    3.2 Konfiguration der Portpins
    3.3 Generierung der Baudrate
    3.4 Interrupts
    3.5 Initialisierung des LIN-Transceivers
  4. Implementierung
    4.1 Datenstrukturen und Konstanten
    4.2 Bereitstellen der Daten
    4.3 Erkennung des Rahmen-Anfangs
    4.4 Empfangen des Headers
    4.5 Senden der Daten
    4.6 Berechnung der Checksumme
  5. Ergebnis


Lizenz / Copyright:

Creative Commons (by-nc-sa)

MSP430-Board für $4,30

Texas Instruments bietet ein neues MSP430-Board mit dem Namen “MSP-EXP430G2 LaunchPad” zum Preis von nur 4,30 USD an. Der Versand nach Deutschland ist kostenlos.

(via mikrocontroller.net)