BLIT2008-Board

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Hardware)
(Erweiterungsbaugruppen)
Zeile 76: Zeile 76:
  
 
=Erweiterungsbaugruppen=
 
=Erweiterungsbaugruppen=
 +
==Allgemeines==
 +
  
 
==I2C-LCD==
 
==I2C-LCD==

Version vom 3. September 2008, 07:19 Uhr

Inhaltsverzeichnis

Konzept

Zum 5.Brandenburger Linux-Infotag entstand u.a. die Idee einen Mikrocontroller-Workshop anzubieten. An Hand einer einfachen universellen Mikrocontrollerbaugruppe, welche durch die Teilnehmer selbst aufzubauen ist, soll der Einstieg in die "Mikrocontrollerwelt" ermöglicht werden. Folgende Kriterien waren/sind dabei wünschenswert:

  • einfache, leicht aufzubauende und "sichere" Schaltung (mit "sicher" ist gemeint, dass die Schaltung möglichst auf Anhieb und ohne komplizierte Einstellvorgänge/Messtechnik funktioniert)
  • kostengünstig
  • erweiterungsfähig
  • möglichst viele Aspekte der Mikrokontrollertechnik sollen abgedeckt werden
  • mittels beigelegter Software soll beispielhaft die Programmierung von Mikrocontroller aufgezeigt werden
  • mittels "abgeschlossener" und sinnvoll einsetzbarer Softwarebeispiele sollen mögliche Anwendungsgebiete aufgezeigt werden

Ob das, in der Folge beschriebene, BLIT2008-Board mit seinen Zusatzbaugruppen diese Kriterien erfüllt, muß jeder für sich entscheiden.

Grundlage für die Hardware waren jeweils fast immer die überall zu findenen Grundschaltungen der eingesetzten Baugruppen/Schaltkreise, die nur noch an die speziellen Gegebenheiten angepaßt wurden. Die Zusatzbaugruppen sind so konzipiert, dass sie ohne weitere Modifikationen an das Basisboard anschliessbar sind. Die Mikrocontrollerbasis besteht aus einem ATmega der Firma Atmel. Die Kommunikation mit den Zusatzbaugruppen erfolgt grundsätzlich über TWI (I2C) und steht damit auch im Mittelpunkt der Betrachtungen. Die eventuelle Kommunikation mit einem PC erfolgt via USB.

Auch auf der Softwareseite wurde, wenn möglich, das Rad nicht neu erfunden. Es werden diverse, frei verfügbare Bibliotheken und Code-Schnipsel verwendet. Welche dies sind, ist bei den einzelnen Anwendungsbeispielen vermerkt. Grund dafür ist, dass dadurch die Beispiele leichter zu verstehen sind, da im Internet unzählige weitere Anwendungen auf der gleichen Basis zu finden sind.

Eine grundlegende Einführung in die Welt der Mikrocontroller (MC) im allgemeinen bzw. speziell zur AVR-Mikrocontroller-Reihe der Firma Atmel wird es auf dieser Projektseite nicht geben. Dazu wird auf die unzähligen Seiten im Internet verwiesen. Ein guter Einstieg in die Materie ist zum Beispiel die Webseite www.mikrocontroller.net und dort speziell das AVR-Tutorial sowie das AVR-GCC-Tutorial.

Sehr viele und wertvolle Informationen sind in den Datenblättern zu den jeweiligen Schaltkreisen zu finden. Aus diesem Grund wird hier nicht jede Einzelheit beschrieben, aber dafür immer ein Link zum entsprechenden Datenblatt angeben.

Toolchain (Werkzeugkasten)

Zur Softwareentwicklung für MCs der hier betrachteten AVR-Reihe der Firma Atmel sind natürlich einige Werkzeuge notwendig. Dabei kann durchgängig auf Freie Software zurückgegriffen werden. Folgende Programme benötigt man:

  • für Linux (meist als Installationspakete innerhalb der jeweiligen Distribution verfügbar):
    • gcc-avr
    • avr-libc
    • binutils-avr
    • avrdude (zum Flashen des übersetzten Programmes auf den MC)
  • für Windows (für die, die den Sprung zu Linux noch nicht vollzogen haben ;-)):
    • WinAVR (ein freies Komplettpaket, welche sämtliche notwendigen Komponenten beinhaltet)

Neben diesen freien Softwarepaketen existieren noch eine Reihe von Entwicklungsumgebungen kommerzieller Anbieter, die entweder auch kostenlos angeboten werden bzw. als Demoversion mit Beschränkungen kostenfrei beziehbar sind und in der Regel nur auf Windowsplattformen lauffähig sind. Z.B. sind dies:

Zum Übertragen (flashen) des fertig übersetzten Programmes auf den MC braucht man noch ein Stück Hardware, einen Programmer. Diese Baugruppe gibt es in den verschiedensten Ausführungen für die unterschiedlichsten PC-Schnittstellen. Eine Übersicht ist hier zu finden. Alternativ ist es natürlich auch möglich initial einen sogenannten Bootloader auf dem MC zu installieren, was eigentlich auch das Konzept dieses Projekt vorsieht.

Noch ein Wort zum Debbuging und Simulationsumgebungen: Ja, die gibt es, aber unter Linux leider (noch) nicht ausgereift genug, um sie effektiv einsetzen zu können. Als Debugger kann die AVR-Variante von gdb eingesetzt werden. Aber spätestens wenn es gilt zeitkritische oder ereignisorientierte Dinge zu überprüfen, braucht man einen Mikrocontrollersimulator. Hier haben die oben erwähnten kommerziellen Produkte eindeutig einen Vorsprung. Eigentlich Schade, aber vielleicht ändert sich dies mit der Zeit noch!

Bis dahin muß man sich bei der Fehlersuche anders behelfen:

  • sinnvolle Ausgaben zu bestimmten Ereignissen an die vorhandene Peripherie senden (und sei es nur an eine angeschlossene LED)
  • mittels Logikanalysatoren oder Oszilloskop das erwartete Zeitverhalten an Ein-/Ausgängen des MC oder andere Baugruppen überprüfen

Basis-Board

Hardware

BLIT2008-Basisboard

Diese Baugruppe stellt das "Herzstück" dar und besteht aus folgenden Komponenten:

  • als Mikrocontroller ein ATmega8; alternativ kann auch ein pinkompatibler ATmega168 eingesetzt werden, wenn man mehr Speicher benötigt
  • der ATmega wird mit einem externen 12MHz-Quarz getaktet; 16MHz gehen auch, aber einige USB-Beispiele benötigen zwingend 12MHz
  • ein Infrarot-Empfänger (TSOP1738)
  • eine frei ansteuerbare LED an einem der I/O-Port des MC


Folgende Schnittstellen zur Aussenwelt sind vorgesehen:

  • USB; hierüber erfolgt auch die 5V-Stromversorgung des Boards und aller weiteren Zusatzbaugruppen; nominell können bis zu 500mA aus einem USB-Port gezogen werden
  • TWI (I2C) zum Anschluß weiterer Baugruppen
  • ISP-Anschluß zur Programmierung (flashen) des MC; es wurde die 10-polige Variante gewählt, die auch bei den meisten Programmern verwendet wird


Auf die Herausführung weiterer, nicht benutzter, I/O-Ports des MC wurde verzichtet, um ein einfaches und einseitiges Leiterplattenlayout zu gewährleisten.

Der Aufbau der Schaltung ist bewußt einfach gehalten und sollte auf Anhieb funktionieren. Einzige kritische Stelle könnten die beiden 27pF-Kondensatoren am Quarz sein, die man, bei Nichtanschwingen des selbigen, leicht variieren kann. Dies ist aber bei mehreren aufgebauten Board bisher nicht notwendig gewesen. Wenn keine Bestückungs- bzw. Verdrahtungsfehler gemacht wurden, sollte der MC sofort arbeiten (natürlich erst, nachdem man die Fuses des AVR auf externe Taktquelle eingestellt hat ;-)).

Software

(Quelltexte-Archive zu den Beispielen folgen noch...)

Hier einige Programmbeispiele, die die einzelnen Komponenten und Schnittstellen des Basisbords beispielhaft ansteuern bzw. verwenden. Über die Sinnhaftigkeit der kleinen Programme kann gestritten werden. Sie sollen nur grundlegende Aspekte der MC-Programmierung aufzeigen und als Ausgangsbasis für eigene Programmideen dienen.

  • blink_led und blink_int: sind beides eigentlich das "Hello World" für MCs. In beiden Programmen wird die, auf dem Board befindliche, LED zum Blinken gebracht. Unterschied zwischen beiden Programmen: blink_led steuert die LED innerhalb einer Hauptschleife an; blink_int verwendet einen zyklischen Timer-Interrupt zur Zustandsänderung der LED.
  • rc5_led: innerhalb dieses Programmes wird der IR-Empfänger auf dem Board eingebunden. Dabei wird das empfangene Signal einer RC5-IR-Fersteuerung decodiert und die LED entsprechend des empfangenen Tasten-Codes geschaltet.
  • pwm_led: ein kleines Beispiel wie man die PWM-Hardware des ATmega verwendet. Dabei wird die Helligkeit der LED zyklisch variiert.
  • rc5_usb_mouse: eigentlich schon eine abgeschlossene und sinnvoll einsetzbare Anwendung, die den IR-Empfänger und die USB-Schnittstelle kombiniert. Dabei meldet sich das Basisboard am PC als USB-Maus an. Über eine RC5-IR-Fersteuerung ist es möglich den Mauszeiger in alle Richtungen zu bewegen und natürlich auch die Maustasten zu emulieren. PC-seitig sind keine speziellen USB-Gerätetreiber notwendig, es werden automatisch die normalen Standard-USB-Treiber verwendet.

Erweiterungsbaugruppen

Allgemeines

I2C-LCD

Hardware

BLIT-Board; I2C-LCD

Diese Baugruppe stellt ein LC-Display dar, welches via TWI vom MC angesteuert werden kann. Im Mittelpunkt steht dabei der 8-Bit-I/O-Port-Expander PCF8574, der das serielle TWI-Signal decodiert und an seine 8 Ports entsprechend weiter gibt. Die umgekehrte Richtung, also das Einlesen von Portzuständen und Codierung in ein TWI-Signal, ist ebenfalls mit diesem Schaltkreis möglich.

Als Display wird ein HD44780-kompatibles LC-Display verwendet. Das Display muss softwareseitig im 4-Bit-Modus betrieben werden. Damit ist ein Port des PCF8574 frei, um via MC-Programm eine eventuell vorhandene Display-Hintergrundbeleuchtung zu schalten. Mittels des Jumpers JP1, kann dies entsprechend konfiguriert werden.

Jumper JP3-5 dienen zum Setzen der letzten 3 Stellen der TWI-Device-Adresse (siehe TWI-Tutorial). Via Jumper JP2 kann die Interruptleitung des Port-Expanders an den INT1-Eingang des MC weitergeleitet werden.

Software

Hier 2 kleine Programmbeispiele, die das LCD mit Hilfe des Basisboard ansteuern:

  • twi_lcd: einfaches Programm, in dem beispielhaft Text auf dem Display ausgegeben und die Hintergrundbeleuchtung geschaltet wird.
  • rc5_sniffer: eine kleine Anwendung, die wieder den IR-Empfänger auf dem Basisboard einbindet. Innerhalb des Programmes wird das empfangene RC5-Signal decodiert sowie der darin enthaltene Key-Code, die Device-Adresse und das Toggle-Bit auf dem Display angezeigt.

I2C-Temperaturfühler

Hardware

BLIT-Board; I2C-Temperaturfühler

Diese Baugruppe stellt einen Temperaturfühler, welcher wiederum mittels TWI vom Basisboard angesprochen werden kann, dar. Kernstück ist der Schaltkreis LM75, der, ohne Kalibrierung und linear über den ganzen Bereich, die Umgebungstemperatur ermitteln kann. Diese Einfachheit war auch der Grund, warum, trotz SMD-Ausführung, diesem IC der Vorzug gegeben wurde.

Mittels Jumper JP1 kann wieder der INT-Ausgang des LM75 mit dem MC verbunden werden. Mit Jumper JP2-4 können die letzten 3 Bit der TWI-Device-Adresse eingestellt werden.

Software

  • lm75_lcd: innerhalb dieses kleinen MC-Programmes wird die Temperaturinformation aus dem LM75 via TWI zyklisch ausgelesen, entsprechend decodiert und auf dem ebenfalls angeschlossenen LCD ausgegeben.

I2C-RTC

Hardware

BLIT-Board; I2C-Real-Time-Clock

Der Schaltkreis PCF8583 vereint eine Real-Time-Clock (RTC) und einen frei verwendbaren 240-Byte-Speicher. Für den sekundengenauen Betrieb des RTC-Teiles ist ein Uhrenquarz notwendig, der mittels eines Trimm-Kondensators feinabgestimmt werden kann.

Über Jumper JP1 kann das INT-Signal an den MC auf dem Basisboard weitergeleitet werden, mit Jumper JP2 ist das letzte Bit der TWI-Device-Adresse einstellbar.

Software

rtc_lcd: innerhalb dieses kleinen Beispiels werden via TWI das LCD, der Temperaturfühler und natürlich die RTC-Baugruppe angesprochen. Dabei muss hardwareseitig der INT-Ausgang des RTC-IC via Jumper mit dem INT1-Eingang des MC auf dem Basisboard verbunden sein. Die Logik des RTC-IC erzeugt an diesem Ausgang ein Signal im Sekundentakt, welches im MC dazu genutzt wird einen Interrupt auszulösen. Darauf aufbauend wird die interne Uhr des RTC, der Temperaturwert des Temperaturfühlers ausgelesen, decodiert und letztendlich auf dem LCD ausgeben.

I2C-7-Segment-Anzeige

Hardware

BLIT-Board; I2C-7-Segment-Anzeige

Software

Es gibt noch keine Programmbeispiele, weil die Hardware noch nicht aufgebaut wurde.

I2C-Eingabetaster

Hardware

Da die Idee zu dieser Baugruppe noch relativ "frisch" ist, gibt es noch nicht mal einen Schaltplan....

Software

Es gibt noch keine Programmbeispiele, weil die Hardware noch nicht aufgebaut wurde.

weitere Ideen

  • es gibt noch eine Reihe weiterer interessanter TWI-ICs; hier eine kleine Auswahl
  • DCF77-Uhr, welche via TWI ansprechbar ist; dazu wird wohl ein kleiner AVR-Tiny für die Ansteuerung fällig sein...
  • eine Funk- und/oder Ethernetschnittstelle als TWI-Zusatzmodul?
  • SD-Card-Leser via TWI?

Links


Kontakt

Ich, Uwe, bin an weiteren Ideen zum BLIT-Board interessiert!

'Persönliche Werkzeuge