BLIT2008-Board

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Inbetriebnahme & Fuse-Bits)
(Aktuelles)
 
(29 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 3: Zeile 3:
  
 
=Aktuelles=
 
=Aktuelles=
 +
* '''10.05.2012''': [[BLIT2008-Board ADC]]
 +
* '''12.05.2009''': seit ein paar Tagen experimentiere ich mit [[BLIT-Board-SD-Card|SD-Karten plus BLIT-Board]] rum, hier mal ein Anfang zur Dokumentation...
 +
* '''04.05.2009''': Baugruppe [[BLIT2008-Board-7-Segment-Anzeige|7-Segment-Anzeige]] realisiert
 +
* '''24.04.2009''': um mal wieder etwas über meine Aktivitäten rund ums BLIT-Board zu berichten: ich bin gerade dabei zwei Dinge zu realisieren. Hier schon mal die Links zu den entsprechenden Unterseiten:
 +
** [[BLIT2008-Board kann sprechen|BLIT-Board plappert vor sich hin...]]
 +
** [[BLIT2008-Board spielt Schach|BLIT-Board kann Schach spielen...!]]
 +
* '''30.01.2009''': [[BLIT2008-Board mit 1-Wire|BLIT-Board goes to 1-Wire...]]
 +
* '''08.01.2009''': aus der Beispielapplikation ''rc5_usb_mouse'' für das BLIT-Board ist ein eigenständiges Projekt ([[Infrarot-USB-Maus_im_Eigenbau]]) geworden.
 +
* '''12.12.2008''': [[BLIT2008-Board-DCF77|TWI(I²C)-DCF77]] ist fertig!
 +
* '''01.12.2008''': Seite etwas umgebaut
 
* '''27.11.2008''': Markus hat auf dem BLIT-Board erfolgreich ''i2c-tiny-usb'' ausprobiert und dazu eine [[BLIT2008-Board_mit_i2c-tiny-usb-Firmware|Wiki-Seite]] erstellt
 
* '''27.11.2008''': Markus hat auf dem BLIT-Board erfolgreich ''i2c-tiny-usb'' ausprobiert und dazu eine [[BLIT2008-Board_mit_i2c-tiny-usb-Firmware|Wiki-Seite]] erstellt
* '''17.11.2008''': Schaltung für [[BLIT2008-Board#I2C-DCF77|DCF77-Baugruppe]]
+
* '''17.11.2008''': Schaltung für [[BLIT2008-Board-DCF77|DCF77-Baugruppe]]
 
* '''16.11.2008''': Programm  [http://bralug.de/wiki-common/images/8/84/Tasten_matrix.tar.gz tasten_matrix] zur Ansteuerung einer [[BLIT2008-Board#I2C-Tastatur|4x4-Tasten-Matrix]]
 
* '''16.11.2008''': Programm  [http://bralug.de/wiki-common/images/8/84/Tasten_matrix.tar.gz tasten_matrix] zur Ansteuerung einer [[BLIT2008-Board#I2C-Tastatur|4x4-Tasten-Matrix]]
 
* '''16.11.2008''': Programm  [http://bralug.de/wiki-common/images/3/39/Led_matrix.tar.gz led_matrix] zur Ansteuerung einer [[BLIT2008-Board#I2C-Tastatur |4x4-LED-Matrix]]  
 
* '''16.11.2008''': Programm  [http://bralug.de/wiki-common/images/3/39/Led_matrix.tar.gz led_matrix] zur Ansteuerung einer [[BLIT2008-Board#I2C-Tastatur |4x4-LED-Matrix]]  
Zeile 71: Zeile 81:
 
=Basis-Board=
 
=Basis-Board=
 
==Hardware==
 
==Hardware==
 +
===Schaltplan===
 
[[Bild:Blit2008-board-v6.png|320px|BLIT2008-Basisboard]]
 
[[Bild:Blit2008-board-v6.png|320px|BLIT2008-Basisboard]]
 
[[Bild:Proto blitboard.jpg|320px|BLIT2008-Basisboard-Prototyp hier mit einer zusätzlichen LED und einem Reset-Taster]]
 
[[Bild:Proto blitboard.jpg|320px|BLIT2008-Basisboard-Prototyp hier mit einer zusätzlichen LED und einem Reset-Taster]]
 
[[Bild:Fert blitboard.jpg|320px|BLIT2008-Basisboard; die erste fertig bestückte Leiterplatte]]
 
[[Bild:Fert blitboard.jpg|320px|BLIT2008-Basisboard; die erste fertig bestückte Leiterplatte]]
  
 +
[http://bralug.de/wiki-common/images/a/a9/Blit_board_eagle.tar.gz Eagle-Dateien (Schaltplan und Leiterplatte)]
 +
 +
===Beschreibung===
 
Diese Baugruppe stellt das "Herzstück" dar und besteht aus folgenden Komponenten:
 
Diese Baugruppe stellt das "Herzstück" dar und besteht aus folgenden Komponenten:
 
* als Mikrocontroller ein [http://atmel.com/dyn/resources/prod_documents/doc2486.pdf ATmega8]; alternativ kann auch ein pinkompatibler [http://atmel.com/dyn/resources/prod_documents/doc2545.pdf ATmega168] eingesetzt werden, wenn man mehr Speicher benötigt (wobei dabei aber einige Anpassungen in den Beispielprogrammen notwendig sind, da sich diverse Registerbezeichnungen ändern)
 
* als Mikrocontroller ein [http://atmel.com/dyn/resources/prod_documents/doc2486.pdf ATmega8]; alternativ kann auch ein pinkompatibler [http://atmel.com/dyn/resources/prod_documents/doc2545.pdf ATmega168] eingesetzt werden, wenn man mehr Speicher benötigt (wobei dabei aber einige Anpassungen in den Beispielprogrammen notwendig sind, da sich diverse Registerbezeichnungen ändern)
Zeile 93: Zeile 107:
  
  
'''Stückliste:'''
+
===Stückliste===
 
{| border=1
 
{| border=1
 
  |-
 
  |-
Zeile 300: Zeile 314:
  
 
==Bootloader==
 
==Bootloader==
 
===Allgemeines zu Bootloadern===
 
''Mit (selbstgeflashten) Bootloadern betrete ich Neuland und muss erstmal ein wenig rumexperimentieren, bis ich eine eindeutige Dokumentation dazu schreiben kann. Was also heißen soll, dass dieser Abschnitt noch im Aufbau begriffen ist...''
 
  
 
Prinzipiell ist für das BLIT-Board ein Bootloader vorgesehen, der über die vorhandene USB-Schnittstelle funktionieren soll. Idee ist, dass der Mikrocontroller im "Auslieferungszustand" bereits mit diesem Stück Software initialisiert ist und der Anwender erstmal keine spezielle Hardware zum Flashen der Programme auf den Controller braucht.
 
Prinzipiell ist für das BLIT-Board ein Bootloader vorgesehen, der über die vorhandene USB-Schnittstelle funktionieren soll. Idee ist, dass der Mikrocontroller im "Auslieferungszustand" bereits mit diesem Stück Software initialisiert ist und der Anwender erstmal keine spezielle Hardware zum Flashen der Programme auf den Controller braucht.
 
In der Folge ein paar Erläuterungen zu den ausprobierten Varianten von USB-Bootloadern.
 
  
 
===AVRUSBBoot===
 
===AVRUSBBoot===
Zeile 335: Zeile 344:
 
Nachteil der Variante mit einem installierten Bootloader ist, dass dadurch etwas Programmspeicher auf dem Mikrocontroller "verloren" gehen. Im Fall von avrusbboot sind es 2kByte. Aber es bleiben bei einem ATmega8 noch 6kByte übrig, was für die folgenden Beispiele mehr als genug ist...
 
Nachteil der Variante mit einem installierten Bootloader ist, dass dadurch etwas Programmspeicher auf dem Mikrocontroller "verloren" gehen. Im Fall von avrusbboot sind es 2kByte. Aber es bleiben bei einem ATmega8 noch 6kByte übrig, was für die folgenden Beispiele mehr als genug ist...
  
=Erweiterungsbaugruppen=
 
==Allgemeines zu TWI==
 
Wie schon einleitend erwähnt, kommunizieren die, in der Folge beschriebenen Zusatzbaugruppen via [http://www.roboternetz.de/wissen/index.php/I2C TWI (I2C)] mit dem Basisboard. Großer Vorteil des TWI-Bus ist es, dass theoretisch bis zu 127 Teilnehmer einfach parallel an die TWI-Leitungen angeschlossen werden können. Praktisch sind da natürlich einige elektrische und performancebegründete Grenzen gesetzt.
 
  
Auf dem Basisboard ist eine 10-polige Wannenbuchse vorgesehen, auf der die notwendigen TWI-Leitungen des MC (SDA, SCL, GND) herausführt sind. Zusätzlich liegen an der Buchse noch VCC (zur einfachen Stromversorgung der Zusatzbaugruppen über das Basisboard) und ein Interrupteingang (INT1) des MC an. Viele TWI-ICs haben einen INT-Pin, auf dem bei bestimmten Ereignissen ein Impuls ausgegeben wird. Beispiele für solche Ereignisse innerhalb von TWI-ICs können sein:
+
===USBaspLoader===
* I/O-Port-Expander PCF8574: an einem der acht als Eingang konfigurierten I/O-Pins liegt eine Signal an
+
Möchte man einen ATmega168 auf dem BLIT-Board betreiben, der ja doppelt soviel Flash-Speicher zur Verfügung stellt und Pin-kompatibel zum ATmega8 ist, lässt sich AVRUSBBoot nicht übersetzen. Einige Registerbezeichnungen sind anders als beim kleinen Bruder und dies wurde im Quelltext der Firmware nicht entsprechend ausprogrammiert. Aus diesem Grund sah ich mich nach einem anderen Bootloader um, der ebenfalls via USB-Schnittstelle funktioniert und würde auch fündig: [http://www.obdev.at/products/vusb/usbasploader.html USBaspLoader] von [http://www.obdev.at objective development]. Nebenbei kauft man sich gleich noch einen weiteren Vorteil ein, der Bootloader benötigt kein eigenes spezielles Tool für den PC, sondern funktioniert auch mit avrdude.
* RTC PCF8583: der interne Zeitzähler hat einen bestimmten Wert erreicht (z.B. Sekundentakt, Alarmzeit erreicht)
+
* TWI-ADCs (Analog-Digital-Wandler): die Umwandlung eines Messvorganges ist abgeschlossen und der Wert steht zur Abholung bereit.
+
Auf solche Ereignisse kann gezielt in einem vernünftig strukturierten MC-Programm innerhalb einer entsprechenden Interrupt-Service-Routine (ISR) reagiert werden, was unnötiges zyklisches Abfragen von Werten über den TWI-Bus minimiert. Innerhalb des Beispielprogrammes rtc_lcd zur I2C-RTC-Baugruppe ist ein solches Vorgehen exemplarisch implementiert. Hier löst der Sekundentakt des RTC verschiedene Auslesevorgänge über den TWI-Bus aus. Jede der hier beschrieben Zusatzbaugruppen besitzt einen entsprechenden Jumper, mit dem die Interruptleitung geschlossen bzw. aufgetrennt werden kann.
+
  
Das TWI-Protokoll sieht die gezielte Adressierung der einzelnen TWI-ICs über eine 7-Bit-Kennung vor (siehe auch TWI-Tutorial). Von diesen 7 Bit sind meistens die ersten [http://www.roboternetz.de/wissen/index.php/I2C_Chip-%C3%9Cbersicht#Adressen_g.C3.A4ngiger_I2C_Chips 4 Bit] bereits vom Hersteller auf dem IC fest "eingebrannt", für die verbleibenden Bits gibt es Adress-Eingänge, welche frei konfiguriert werden können. Deshalb sind auf jeder Zusatzbaugruppe entsprechende Jumper-Gruppen zu finden, die diese Adress-Eingänge auf 0 oder 1 ziehen. Damit ist dann auch möglich mehrere gleiche TWI-ICs über ihre individuelle Adresse gezielt anzusteuern. Bei 3 Bit frei konfigurierbaren Adressen (A0-A2) können also bis zu 8 gleiche TWI-ICs an einem Bus unterschieden werden. Ausnahme ist z.B. der weiter unten verwendete RTC-IC (PCF8583): hier ist nur eine Adressleitung (A0) herausgeführt und damit sind nur zwei ICs von diesem Typ am Bus unterscheidbar.
+
Damit dieser Bootloader auf dem BLIT-Board funktioniert, sind ein paar kleiner Anpassungen am Orginal-Quelltext (den man sich von obigen Link besorgt) vorzunehmen:
  
Das letzte verbleibende Bit der 8-Bit-TWI-Adresse kennzeichnet die Art des Zugriffes auf den IC, also Lesen (1) oder Schreiben (0). Weiterhin ist die Adresse 0x00 für TWI-Broadcast reserviert.
+
'''firmware/Makefile''':
 +
<br>
 +
Die korrekte Quarzfrequenz (F_CPU) und Device (DEVICE) sind einzutragen.
 +
<br><br>
 +
'''firmware/bootloaderconfig.h''':
 +
<br>
 +
* die USB-Pins anpassen
 +
<pre>
 +
#define USB_CFG_DMINUS_BIT      0
 +
</pre>
 +
* Pin des Bootloader-Enable-Jumpers anpassen
 +
<pre>
 +
static inline void  bootLoaderInit(void)
 +
{
 +
    PORTC |= (1 << JUMPER_BIT);    /* activate pull-up */avrdude -c usbasp -p m8 -t  -v
 +
    if(!(MCUCSR & (1 << EXTRF)))    /* If this was not an external reset, ignore */
 +
        leaveBootloader();
 +
    MCUCSR = 0;                    /* clear all reset flags for next time */
 +
}
  
Für die Verbindung der Baugruppen untereinander reicht ein einfaches 10-poliges Flachbandkabel auf dem mehrere 10-polige Stecker montiert sind.
+
static inline void  bootLoaderExit(void)
 +
{
 +
    PORTC = 0;                      /* undo bootLoaderInit() changes */
 +
}
  
==I2C-LCD==
+
#define bootLoaderCondition()  ((PINC & (1 << JUMPER_BIT)) == 0)
===Hardware===
+
</pre>
[[Bild:Blit2008-board-lcd.png|320px|BLIT-Board; I2C-LCD]]
+
* ein paar Optionen abwählen, da u.U. die Codegröße >2048 Bytes nach dem Übersetzen wird und das passt dann nicht mehr in den Bootloaderbereich des Mikrocontrollers. Dies wären z.B. die Kandidaten:
[[Bild:Proto lcd.jpg|320px|BLIT-Board; I2C-LCD-Prototyp]]
+
<pre>
 +
#define HAVE_EEPROM_PAGED_ACCESS    0
 +
...
 +
#define HAVE_EEPROM_BYTE_ACCESS    0
 +
</pre>
  
Diese Baugruppe stellt ein LC-Display dar, welches via TWI vom MC angesteuert werden kann. Im Mittelpunkt steht dabei der [http://www.datasheetcatalog.org/datasheet/philips/PCF8574_4.pdf 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 [http://www.sprut.de/electronic/lcd/ 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.
+
Ist dies alles, getan sollte ein mutiges...
 +
<pre>
 +
make
 +
make fuse
 +
make flash
 +
make lock
 +
</pre>
 +
...alles weitere tun, um den Bootloader auf den Mikrocontroller zu bringen und den entsprechenden Speicherbereich vor weiterem Überschreiben zu schützen.
  
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.
 
  
 +
Um nun ein Programm auf den Controller zu übertragen, genügt es den Jumper auf dem Board zu schliessen, BLIT-Board und PC via USB zu verbinden und avrdude entsprechend aufzurufen, z.B.:
 +
<pre>
 +
avrdude -p m168 -c usbasp  -U flash:w:main.hex
 +
</pre>
  
'''Stückliste:'''
+
Das Parameter ''-p m168'' bezeichnet einen ATmega168. Natürlich kann die beschriebene Vorgehensweise auch mit einem ATmega8 durchgeführt werden.
{| border=1
+
|-
+
!Teil
+
!Anzahl
+
!Beschreibung
+
!Hinweis
+
!Preis insgesamt (Reichelt)
+
  
|-
+
Desweiteren funktionieren (teilweise) auch einige andere avrdude-Komandos, wie z.B. der Aufruf des Terminalmodus:
|IC1
+
<pre>
  |1
+
avrdude -c usbasp -p m168 -t -v
|PCF8574P
+
</pre>
|.
+
|1,30€
+
  
|-
+
=Erweiterungsbaugruppen=
|LCD
+
==Allgemeines zu TWI==
|1
+
Wie schon einleitend erwähnt, kommunizieren die, in der Folge beschriebenen Zusatzbaugruppen via [http://www.roboternetz.de/wissen/index.php/I2C TWI (I2C)] mit dem Basisboard. Großer Vorteil des TWI-Bus ist es, dass theoretisch bis zu 127 Teilnehmer einfach parallel an die TWI-Leitungen angeschlossen werden können. Praktisch sind da natürlich einige elektrische und performancebegründete Grenzen gesetzt.
|HD44780-kompatibles LC-Display
+
|16x2 mit Beleuchtung (Preis bei Pollin: 4,95€ (LCD-Modul YL162-90))
+
|7,15€
+
  
|-
+
Auf dem Basisboard ist eine 10-polige Wannenbuchse vorgesehen, auf der die notwendigen TWI-Leitungen des MC (SDA, SCL, GND) herausführt sind. Zusätzlich liegen an der Buchse noch VCC (zur einfachen Stromversorgung der Zusatzbaugruppen über das Basisboard) und ein Interrupteingang (INT1) des MC an. Viele TWI-ICs haben einen INT-Pin, auf dem bei bestimmten Ereignissen ein Impuls ausgegeben wird. Beispiele für solche Ereignisse innerhalb von TWI-ICs können sein:
|Q1
+
* I/O-Port-Expander PCF8574: an einem der acht als Eingang konfigurierten I/O-Pins liegt eine Signal an
|1
+
* RTC PCF8583: der interne Zeitzähler hat einen bestimmten Wert erreicht (z.B. Sekundentakt, Alarmzeit erreicht)
|pnp-Transistor BC560
+
* TWI-ADCs (Analog-Digital-Wandler): die Umwandlung eines Messvorganges ist abgeschlossen und der Wert steht zur Abholung bereit.
|.
+
Auf solche Ereignisse kann gezielt in einem vernünftig strukturierten MC-Programm innerhalb einer entsprechenden Interrupt-Service-Routine (ISR) reagiert werden, was unnötiges zyklisches Abfragen von Werten über den TWI-Bus minimiert. Innerhalb des Beispielprogrammes rtc_lcd zur I2C-RTC-Baugruppe ist ein solches Vorgehen exemplarisch implementiert. Hier löst der Sekundentakt des RTC verschiedene Auslesevorgänge über den TWI-Bus aus. Jede der hier beschrieben Zusatzbaugruppen besitzt einen entsprechenden Jumper, mit dem die Interruptleitung geschlossen bzw. aufgetrennt werden kann.
|0,041€
+
  
|-
+
Das TWI-Protokoll sieht die gezielte Adressierung der einzelnen TWI-ICs über eine 7-Bit-Kennung vor (siehe auch TWI-Tutorial). Von diesen 7 Bit sind meistens die ersten [http://www.roboternetz.de/wissen/index.php/I2C_Chip-%C3%9Cbersicht#Adressen_g.C3.A4ngiger_I2C_Chips 4 Bit] bereits vom Hersteller auf dem IC fest "eingebrannt", für die verbleibenden Bits gibt es Adress-Eingänge, welche frei konfiguriert werden können. Deshalb sind auf jeder Zusatzbaugruppe entsprechende Jumper-Gruppen zu finden, die diese Adress-Eingänge auf 0 oder 1 ziehen. Damit ist dann auch möglich mehrere gleiche TWI-ICs über ihre individuelle Adresse gezielt anzusteuern. Bei 3 Bit frei konfigurierbaren Adressen (A0-A2) können also bis zu 8 gleiche TWI-ICs an einem Bus unterschieden werden. Ausnahme ist z.B. der weiter unten verwendete RTC-IC (PCF8583): hier ist nur eine Adressleitung (A0) herausgeführt und damit sind nur zwei ICs von diesem Typ am Bus unterscheidbar.
|R1
+
|1
+
|Regelwiderstand 10 kOhm
+
|.
+
|0,22€
+
  
|-
+
Das letzte verbleibende Bit der 8-Bit-TWI-Adresse kennzeichnet die Art des Zugriffes auf den IC, also Lesen (1) oder Schreiben (0). Weiterhin ist die Adresse 0x00 für TWI-Broadcast reserviert.
|R2
+
|1
+
|Widerstand 2,2 kOhm
+
|.
+
|0,082€
+
 
+
|-
+
|R3
+
|1
+
|Widerstand 33 Ohm
+
|.
+
|0,082€
+
 
+
|-
+
|C1
+
|1
+
|Kondensator 100nF
+
|.
+
|0,072€
+
 
+
|-
+
|SV1
+
|1
+
|Wannenstecker 10-polig
+
|Reichelt: WSL 10W
+
|0,10€
+
 
+
|-
+
|JP1, JP2, JP3, JP4, JP5
+
|14
+
|Jumperstift
+
|.
+
|0,25€
+
 
+
|-
+
|SL1
+
|.
+
|Steckverbindung aus Jumperstiften/Buchse (16-pol.)
+
|von den Buchsen gibt es unterschiedliche Höhen; Preis mit 7,5mm berechnet
+
|1,00€
+
 
+
|-
+
|.
+
|1
+
|IC-Fassung 14-polig
+
|Reichelt: GS14P
+
|0,17€
+
 
+
|-
+
|Leiterplatte
+
|.
+
|.
+
|Eigenproduktion
+
|???
+
 
+
|-
+
|Gesamtpreis
+
|.
+
|.
+
|ohne Leiterplatte
+
|10,467€
+
|}
+
 
+
===Software===
+
 
+
Hier 2 kleine Programmbeispiele, die das LCD mit Hilfe des Basisboard ansteuern:
+
 
+
*[http://bralug.de/wiki-common/images/c/cb/Twi_lcd.tar.gz twi_lcd]: einfaches Programm, in dem beispielhaft Text auf dem Display ausgegeben und die Hintergrundbeleuchtung geschaltet wird.
+
 
+
*[http://bralug.de/wiki-common/images/9/9c/Rc5_sniffer.tar.gz 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===
+
[[Bild:Blit2008-board-thermo.png|320px|BLIT-Board; I2C-Temperaturfühler]]
+
[[Bild:Proto lm75.jpg|320px|BLIT-Board; I2C-Temperaturfühler-Prototyp]]
+
[[Bild:Fert lm75 s1.jpg|320px|BLIT-Board; I2C-Temperaturfühler; fertig bestückte Leiterplatte; Bestückungsseite]]
+
[[Bild:Fert lm75 s2.jpg|320px|BLIT-Board; I2C-Temperaturfühler; fertig bestückte Leiterplatte; Lötseite mit LM75 als SMD]]
+
 
+
Diese Baugruppe stellt einen Temperaturfühler, welcher wiederum mittels TWI vom Basisboard angesprochen werden kann, dar. Kernstück ist der Schaltkreis [http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS012658.PDF 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.
+
 
+
 
+
'''Stückliste:'''
+
{| border=1
+
|-
+
!Teil
+
!Anzahl
+
!Beschreibung
+
!Hinweis
+
!Preis insgesamt (Reichelt)
+
 
+
|-
+
|IC1
+
|1
+
|LM75A
+
|gibt es nur als SMD
+
|1,35€
+
 
+
|-
+
|C1
+
|1
+
|Kondensator 100nF
+
|.
+
|0,072€
+
 
+
|-
+
|SV1
+
|1
+
|Wannenstecker 10-polig
+
|Reichelt: WSL 10W
+
|0,10€
+
 
+
|-
+
|JP1, JP2, JP3, JP4
+
|11
+
|Jumperstift
+
|.
+
|0,25€
+
 
+
|-
+
|Leiterplatte
+
|.
+
|.
+
|Eigenproduktion
+
|1,00€
+
 
+
|-
+
|Gesamtpreis
+
|.
+
|.
+
|ohne Leiterplatte
+
|1,772€
+
 
+
|}
+
 
+
===Software===
+
 
+
*[http://bralug.de/wiki-common/images/6/60/Lm75_lcd.tar.gz 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.
+
*[http://bralug.de/wiki-common/images/8/8d/Lm75_usb.tar.gz lm75_usb]: ein zweigeteiltes Programm
+
** MC-Programm: ermittelt zyklisch die Temperatur via TWI aus dem Sensor LM75und speichert den Wert in einem Array ab. Dieses Array ist so dimensioniert, dass bei einem Zyklus von 5min für die letzten 24h Werte abgelegt werden können.
+
** Kommandozeilentool (''usb2blitboard''): Auslesen von Werten aus dem BLIT-Board via USB
+
*** <code>usb2blitboard echo</code> USB-Test
+
*** <code>usb2blitboard read_idx</code> Anzeigen des Zeigers auf den letzten Wert der Temperaturhistorie
+
*** <code>usb2blitboard lm75_read</code> aktuellen Temperaturwert auslesen
+
*** <code>usb2blitboard lm75_read_all</code> Auslesen der Temperaturhistorie (288 Temperaturwerte)
+
 
+
==I2C-RTC==
+
===Hardware===
+
[[Bild:BLIT2008-Board-RTC.png|320px|BLIT-Board; I2C-Real-Time-Clock]]
+
[[Bild:Proto rtc.jpg|320px|BLIT-Board; I2C-Real-Time-Clock-Prototyp]]
+
[[Bild:Rtc board.JPG|320px|BLIT-Board; I2C-Real-Time-Clock: fertige Baugruppe]]
+
 
+
Der Schaltkreis [http://www.datasheetcatalog.org/datasheet/philips/PCF8583_5.pdf 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.
+
 
+
 
+
'''Stückliste:'''
+
{| border=1
+
|-
+
!Teil
+
!Anzahl
+
!Beschreibung
+
!Hinweis
+
!Preis insgesamt (Reichelt)
+
 
+
|-
+
|IC1
+
|1
+
|PCF8583P
+
|.
+
|1,50€
+
 
+
|-
+
|Q1
+
|1
+
|Uhrenquarz 32,768 kHz
+
|
+
|0,14€
+
 
+
|-
+
|C1
+
|1
+
|Trimm-Kondensator 30pF
+
|Reichelt: TZ03 30P
+
|0,26€
+
 
+
|-
+
|C2
+
|1
+
|Kondensator 100nF
+
|.
+
|0,072€
+
 
+
|-
+
|SV1
+
|1
+
|Wannenstecker 10-polig
+
|Reichelt: WSL 10W
+
|0,10€
+
 
+
|-
+
|JP1, JP2
+
|5
+
|Jumperstift
+
|
+
|0,10€
+
 
+
|-
+
|.
+
|1
+
|IC-Fassung 8-polig
+
|Reichelt: GS 8P
+
|0,10€
+
 
+
|-
+
|Leiterplatte
+
|.
+
|.
+
|Eigenproduktion
+
|1,00€
+
 
+
|-
+
|Gesamtpreis
+
|.
+
|.
+
|ohne Leiterplatte
+
|2,272€
+
 
+
|}
+
 
+
===Software===
+
 
+
*[http://bralug.de/wiki-common/images/8/85/Rtc_lcd.tar.gz 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.
+
* [http://bralug.de/wiki-common/images/a/a1/Rtc_usb.tar.gz rtc_usb] steuert das Timer-Zusatzboard via USB an. Mit dem Kommandozeilentool kann über die USB-Schnittstelle Datum/Uhrzeit gesetzt/gelesen sowie auch der Rest des SRAMs auf dem Uhrenbaustein beschrieben/ausgelesen werden.
+
 
+
==I2C-7-Segment-Anzeige==
+
===Hardware===
+
[[Bild:BLIT2008-Board-LED.png|320px|BLIT-Board; I2C-7-Segment-Anzeige]]
+
 
+
===Software===
+
 
+
Es gibt noch keine Programmbeispiele, weil die Hardware noch nicht aufgebaut wurde.
+
 
+
==I2C-Tastatur==
+
===Hardware===
+
[[Bild:Blit-board-tastatur.png|320px|BLIT-Board; Tastatur]]
+
[[Bild:Tastatur-matrix.jpg|320px|Tastaturmatrix mit LEDs]]
+
[[Bild:Tastatur board.jpg|320px|Tastatur-Board (Prototyp)]]
+
 
+
Neulich beim Aufräumen einer alten Kiste mit diverser Elektronik fiel mir eine schicke 4x4 Tastatur in die Hände. Dazu kommt noch, dass in jeder Taste eine LED vorhanden ist ''(Bild kommt noch...)''. Also insgesamt voll geeignet, eine kleine Eingabeeinheit für das BLIT-Board zu bauen... Natürlich kann man auch jeden anderen matrixartigen Tastaturkonstrukt aufbauen/verwenden. Ich habe z.B. gesehen, dass es bei Reichelt Taster mit LED (Stückpreis bei ca. 2 Euro) gibt.
+
 
+
Nach einigen [http://www.mikrocontroller.net/topic/116435 Wirrungen] um die Ansteuerschaltung, insbesondere beim LED-Teil, funktioniert jetzt die Geschichte. Natürlich wird diese Baugruppe wieder über TWI an das Basis-Board angeschlossen. Diesmal sind gleich 2 TWI-ICs vorhanden, die auch mit unterschiedlichen Adressen via Jumper konfiguriert werden müssen. Für den Tastaturteil kann wieder die Interruptleitung zum Mikrocontroller genutzt werden (mittels Jumper ein-/ausschaltbar). Wird eine Taste betätigt, liegt ein Interruptsignal an.
+
 
+
===Software===
+
 
+
* [http://bralug.de/wiki-common/images/3/39/Led_matrix.tar.gz led_matrix]: steuert die LEDs der Tastatur innerhalb eines Timer-Overflow-Interruptes an und gibt ein paar, mehr oder minder sinnvolle Animationen auf diesen aus.
+
* [http://bralug.de/wiki-common/images/8/84/Tasten_matrix.tar.gz tasten_matrix]: fragt die 4x4-Tasten-Matrix ab und gibt den ermittelten Tastencode auf dem angeschlossenen [http://bralug.de/wiki/BLIT2008-Board#I2C-LCD LCD] aus.
+
  
 +
Für die Verbindung der Baugruppen untereinander reicht ein einfaches 10-poliges Flachbandkabel auf dem mehrere 10-polige Stecker montiert sind.
  
==I2C-DCF77==
+
In Sachen TWI bzw. I²C sei auch auf diese [[BLIT2008-Board_mit_i2c-tiny-usb-Firmware|Seite]] verwiesen, auf der eine spezielle Firmware beschrieben wird, die die Nutzung des BLIT-Boards mit den I2C-Tools oder lm-sensors ermöglicht.
===Hardware===
+
[[Bild:Blit2008-board-dcf77.png|320px|BLIT-Board; Schaltung DCF77-Board]]
+
[[Bild:Twi_tiny_board.jpg|320px|BLIT-Board; Prototyp des TWI-Tiny-Board (die LED blinkt schon mal...:-)...))]]
+
  
Hier die erste Variante "vom Reissbrett" für ein [http://de.wikipedia.org/wiki/DCF77 DCF77]-Zusatzboard. Kernstück ist ein [http://atmel.com/dyn/resources/prod_documents/doc2586.pdf ATtiny45] (oder ATtiny85), der autonom das DCF77-Signal eines handelsüblichen DCF77-Modules (z.B. von [http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=3663 ELV]) decodieren und bereitstellen soll. Natürlich besteht wieder der Anspruch, dass diese Baugruppe an den TWI-Bus des Basis-Boards angeschlossen werden soll, was allerdings dahingehend schwierig ist, dass es kein Hardware-TWI in dem ATtiny gibt. Aber man soll ja, laut Atmel [http://atmel.com/dyn/resources/prod_documents/doc1235.pdf USI] dafür benutzen. Na mal sehen, ob das was wird....
+
==Baugruppen==
  
===Software===
+
* [[BLIT2008-Board-LCD|LCD]]
* [http://bralug.de/wiki-common/images/c/c1/Tiny_cs_blink.tar.gz tiny_cs_blink]: eigentlich ein sinnloses Programm, aber ganz nützlich, um die Hardware des Tiny-Boards zu testen (dazu muss es via TWI-Bus am BLIT-Board angeschlossen sein). Das Programm besteht aus 2 Teilen:
+
* [[BLIT2008-Board-Thermo|Temperaturfühler]]
** Der Tiny-Board-Teil ist in den ATtiny45-Mikrocontroller zu laden. Innerhalb eines Timer-Overflow-Interruptes werden fortlaufend das LED-Pin und das INT-Pin invertiert. Damit blinkt zum einen die LED im Takt des Interruptes und auf der INT-Leitung des TWI-Busses wird ein Impuls erzeugt.
+
* [[BLIT2008-Board-RTC|RTC]]
** Im Programm für das BLIT-Board wird lediglich der INT1-Interrupt definiert. Innerhalb der zugehörigen ISR schaltet sich die LED auf dem BLIT-Board bei jedem eingehenden Impuls auf der INT-Leitung des TWI-Bus an bzw. aus.
+
* [[BLIT2008-Board-7-Segment-Anzeige|7-Segment-Anzeige]]
 +
* [[BLIT2008-Board-Tastatur|Tastatur-/LED-Matrix]]
 +
* [[BLIT2008-Board-DCF77|DCF77]]
 +
* [[BLIT2008-Board_ADC|ADC (Analog-/Digital-Converter))]]
 +
* [[BLIT-Board-SD-Card|SD-Karten-Modul]]
  
 +
=Diverse Software zum BLIT-Board=
  
Weiteres kommen noch...!
+
* [[BLIT2008-Board-Software_usb2blitboard|usb2blitboard]]
 +
* [[BLIT2008-Board_mit_i2c-tiny-usb-Firmware|BLIT2008-Board mit i2c-tiny-usb-Firmware]]
 +
* [[BLIT2008-Board mit 1-Wire]]
 +
* [[BLIT2008-Board kann sprechen|BLIT-Board plappert vor sich hin...]]
 +
* [[BLIT2008-Board spielt Schach|BLIT-Board kann Schach spielen...!]]
  
=diverse Software zum BLIT-Board=
 
==usb2blitboard==
 
Bei [http://bralug.de/wiki-common/images/7/7f/Usb2blitboard.tar.gz usb2blitboard] handelt es sich um ein Beispiel, welches aufzeigt, wie man über die USB-Schnittstelle des PCs das BLIT-Board mit seinen Komponenten ansteuern kann. Im Paket sind folgende Softwarekomponenten enthalten:
 
* Verzeichnis firmware/: Firmware für den Mikrocontroller: empfängt definierte Befehle über die USB-Schnittstelle und führt die entsprechenden Aktionen aus.
 
* Verzeichnis cmd/: Kommandozeilen-Tool ''usb2blitboard'' für den PC auf Basis der Bibliothek [http://libusb.sourceforge.net/doc/ libusb]: welches mit entsprechenden Parametern gestartet, mit dem BLIT-Board kommuniziert und entsprechende Aktionen auf diesem auslöst. Folgende Dinge sind derzeit implimentiert:
 
** <code>usb2blitboard echo</code>: sendet eine definierte Anzahl von 2-Byte-Zufallszahlen zum BLIT-Board, dieses sendet diese Daten wieder 1:1 zurück, werden auf dem PC mit den gesendeten Daten verglichen und es wird über Erfolg bzw. Mißerfolg informiert.
 
** <code>usb2blitboard led <0|1></code>: Aus- bzw. Einschalten der LED auf dem BLIT-Board.
 
** <code>usb2blitboard lm75_status</code>: prüft, ob das LM75-Zusatzboard am Basisboard angeschlossen ist; Rückgabe-Status=0 bedeutet, dass das Zusatzboard präsent ist.
 
** <code>usb2blitboard lm75_read</code>: ließt die gemessene Temperatur des LM75-Zusatzboards aus, decodiert diese und gibt sie am PC aus.
 
** <code>usb2blitboard rtc_status</code>: prüft, ob das RTC-Zusatzboard am Basisboard angeschlossen ist; Rückgabe-Status=0 bedeutet, dass das Zusatzboard präsent ist.
 
** <code>usb2blitboard rtc_read <adresse></code>: liest die angegebene Speicheradresse des RTC aus und zeigt deren Inhalt auf dem PC an.
 
** <code>usb2blitboard rtc_write <adresse> <wert></code>: setzt den Inhalt der angegeben Speicheradresse des RTC auf den übergebenen Wert.
 
** <code>usb2blitboard rtc_get_time</code>: liest die Speicherzellen des RTC aus, in denen Datum/Uhrzeit enthalten sind und gibt diese formatiert auf dem PC aus.
 
** <code>usb2blitboard rtc_set_time</code>: setzt die entsprechenden Speicherzellen des RTC auf die aktuelle Uhrzeit und Datum des PC.
 
** <code>usb2blitboard lcd_intern <0|1></code>: schaltet zwischen internen (1) und externen (0) Modus um; im internen Modus werden keine LCD-Kommandos über die USB-Schnittstelle akzeptiert; im externen Modus werden Ausgaben des BLIT-Boards selbst auf das Display unterdrückt; beim Umschalten des Modus wird der Inhalt des Display jeweils gelöscht
 
** <code>usb2blitboard lcd_clear</code>: löscht den Display-Inhalt, wenn nicht der interne Modus eingeschaltet ist
 
** <code>usb2blitboard lcd_backlight <0|1></code>: schaltet die Hintergrundbeleuchtung des Display an (1) oder aus (0), wenn nicht der interne Modus eingeschaltet ist
 
** <code>usb2blitboard lcd_out_text <y> <x> <text></code>: gibt den übergebenen Text an der Position yx aus,  wenn nicht der interne Modus eingeschaltet ist
 
* Verzeichnis cmd/: ein Bash-Script ''lcdtest.sh'', welches mit Hilfe des Kommandozeilen-Tools usb2blitboard zyklisch einige Daten (1.Zeile -> absolute I/O-Datenmenge und 2.Zeile-> I/O-Übertragsgeschwindigkeit) der Netzwerkschnittstelle (siehe Script, welche...) ausgibt; desweiteren blinkt die LED auf dem BLIT-Board im Sekundentakt
 
  
 
=weitere Ideen=
 
=weitere Ideen=
  
 
*es gibt noch eine Reihe weiterer interessanter TWI-ICs; hier eine kleine [http://www.roboternetz.de/wissen/index.php/I2C_Chip-%C3%9Cbersicht Auswahl]
 
*es gibt noch eine Reihe weiterer interessanter TWI-ICs; hier eine kleine [http://www.roboternetz.de/wissen/index.php/I2C_Chip-%C3%9Cbersicht Auswahl]
*[http://de.wikipedia.org/wiki/DCF77 DCF77-Uhr], welche via TWI ansprechbar ist; dazu wird wohl ein kleiner AVR-Tiny für die Ansteuerung fällig sein... ([http://www.mikrocontroller.net/topic/31375 TWI via USI])
 
 
*eine Funk- und/oder Ethernetschnittstelle als TWI-Zusatzmodul?
 
*eine Funk- und/oder Ethernetschnittstelle als TWI-Zusatzmodul?
*SD-Card-Leser via TWI?
 
* das BLIT-Board selbst als Programmer einsetzen
 
  
 
=weiterführende Literatur=
 
=weiterführende Literatur=
Zeile 730: Zeile 475:
  
 
Weitere Mikrocontroller-Projekte von mir:
 
Weitere Mikrocontroller-Projekte von mir:
* [http://bralug.de/wiki/3D-LED-Display 3D-LED-Display]
+
* [[3D-LED-Display]]
 +
* [[Infrarot-USB-Maus_im_Eigenbau|Infrarot-USB-Maus]]

Aktuelle Version vom 10. Mai 2012, 22:40 Uhr


Inhaltsverzeichnis

[Bearbeiten] Aktuelles

  • 10.05.2012: BLIT2008-Board ADC
  • 12.05.2009: seit ein paar Tagen experimentiere ich mit SD-Karten plus BLIT-Board rum, hier mal ein Anfang zur Dokumentation...
  • 04.05.2009: Baugruppe 7-Segment-Anzeige realisiert
  • 24.04.2009: um mal wieder etwas über meine Aktivitäten rund ums BLIT-Board zu berichten: ich bin gerade dabei zwei Dinge zu realisieren. Hier schon mal die Links zu den entsprechenden Unterseiten:
  • 30.01.2009: BLIT-Board goes to 1-Wire...
  • 08.01.2009: aus der Beispielapplikation rc5_usb_mouse für das BLIT-Board ist ein eigenständiges Projekt (Infrarot-USB-Maus_im_Eigenbau) geworden.
  • 12.12.2008: TWI(I²C)-DCF77 ist fertig!
  • 01.12.2008: Seite etwas umgebaut
  • 27.11.2008: Markus hat auf dem BLIT-Board erfolgreich i2c-tiny-usb ausprobiert und dazu eine Wiki-Seite erstellt
  • 17.11.2008: Schaltung für DCF77-Baugruppe
  • 16.11.2008: Programm tasten_matrix zur Ansteuerung einer 4x4-Tasten-Matrix
  • 16.11.2008: Programm led_matrix zur Ansteuerung einer 4x4-LED-Matrix
  • 14.11.2008: Zusatzbaugruppe "I2C-Tastatur"; Programmbeispiele folgen demnächst...
  • 02.11.2008: Den Leuten, die gestern auf dem BLIT meinen Workshop besucht haben, bin ich noch ein Programm schuldig, was ich leider im Vorfeld nicht vorbereitet hatte: rtc_usb steuert nur das Timer-Zusatzboard an. Mit dem Kommandozeilentool kann über die USB-Schnittstelle Datum/Uhrzeit gesetzt/gelesen werden sowie auch der Rest des SRAMs auf dem Uhrenbaustein beschrieben/ausgelesen werden. Als "Hausaufgabe" :-) könnte man jetzt beide einzelnen Programme (lm75_usb, rtc_usb) kombinieren, um mal alle Baugruppen zu vereinen. Viel Spaß!

[Bearbeiten] Konzept

Der Prototyp (insgesamt)

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, muss 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.

[Bearbeiten] Vorausgesetzte Kenntnisse/Fähigkeiten

Es soll davor gewarnt sein, vollkommen unbedarft in die Materie einzusteigen. Über gewisse Fertigkeiten und Kenntnisse sollte man schon verfügen. Folgende wären das ungefähr:

  • man sollte einen Lötkolben, der zum Löten von elektronischen Schaltungen geeignet ist, besitzen und ihn auch bedienen können
  • man sollte mindestens ein Multimeter besitzen und bedienen können
  • man sollte schon wissen, was Strom und Spannung sind und wie man diese messen kann
  • man sollte Schaltpläne lesen können und einige Grundkenntnisse der Elektronik und Digitaltechnik besitzen
  • man sollte ungefähr wissen wie ein Computer aufgebaut ist und solche Begriffe wie Prozessor, Speicher, I/O-Ports usw. definieren können
  • man sollte schon mal Programme geschrieben und auch verstanden haben, sowie wissen was ein Kompiler, Bibliotheken, Binder usw. sind
  • die Beispiele sind in C geschrieben, also sollte man diese Programmiersprache kennen. Natürlich kann man Mikrocontroller auch mit anderen Sprachen programmieren.
  • viele Datenblätter zu den verwendeten Schaltkreisen sind in Englisch geschrieben, man sollte also etwas damit anfangen können

Prinzipiell stehe ich natürlich für Fragen und Anregungen zur Verfügung. Ich werde aber nicht unbedingt immer Fragen zu obigen Punkten beantworten!


In diesem Zusammenhang wird auch darauf hingewiesen, dass jegliche Haftung, Gewährleistung u.ä. bei Hardwareschäden, Datenverlusten o.ä., die auf das BLIT-Board, dessen Zusatzbaugruppen oder Software zurückzuführen sind, nicht übernommen wird! Also bitte vorher Überlegen, was passieren könnte und entsprechende Vorkehrungen treffen!

[Bearbeiten] Toolchain (Werkzeugkasten)

Programmer USBasp

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 Programms 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 Debugging 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

[Bearbeiten] Basis-Board

[Bearbeiten] Hardware

[Bearbeiten] Schaltplan

BLIT2008-Basisboard BLIT2008-Basisboard-Prototyp hier mit einer zusätzlichen LED und einem Reset-Taster BLIT2008-Basisboard; die erste fertig bestückte Leiterplatte

Eagle-Dateien (Schaltplan und Leiterplatte)

[Bearbeiten] Beschreibung

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 (wobei dabei aber einige Anpassungen in den Beispielprogrammen notwendig sind, da sich diverse Registerbezeichnungen ändern)
  • 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 Außenwelt 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 ;-)).


[Bearbeiten] Stückliste

Teil Anzahl Beschreibung Hinweis Preis insgesamt (Reichelt)
IC1 1 Mikrocontroller ATmega8 . 1,25€
IR1 1 Infrarot-Empfänger TSOP1738 . 0,66€
Q1 1 Quarz 12MHz . 0,24€
LED1 1 LED (<=20mA) . 0,12€
D1, D2 2 Zener-Diode 3,6V . 0,062€
R1, R2 2 Widerstand 68 Ohm . 0,164€
R3 1 Widerstand 1,5 kOhm . 0,082€
R4 1 Widerstand 100 Ohm . 0,082€
R5 1 Widerstand 220 Ohm . 0,082€
R6, R7, R8, R9 4 Widerstand 10 kOhm . 0,328€
R10 1 Widerstand 1 MOhm . 0,082€
C1, C2 2 Keramikkondensator 27pF . 0,082€
C3 1 Elko 10uF . 0,041€
C4 1 Elko 4,7uF . 0,041€
C5 1 Kondensator 47nF . 0,07€
C6 1 Kondensator 100nF . 0,072€
SV1, SV2 2 Wannenstecker 10-polig Reichelt: 1x WSL 10G; 1x WSL 10W 0,172€
X1 2 USB-Buchse (Serie B) Reichelt: USB BW 0,32€
JP1 2 Jumperstift . 0,04€
. 1 IC-Fassung 28-polig; schmal Reichelt: GS 28P-S 0,36€
. 1 USB-Kabel (A auf B) Reichelt: AK 672/2-1,0 0,50€
Leiterplatte . . Eigenproduktion 2,50€
Gesamtpreis . . ohne Leiterplatte 4,85€

[Bearbeiten] Inbetriebnahme & Fuse-Bits

Nach dem Aufbau der Leiterplatte kommt der spannende Augenblick: funktioniert die Geschichte, die man da zusammengelötet hat? Folgendes sollte man überprüfen, bevor man das erste Mal den USB-Stecker reinsteckt (ein Durchgangsprüfer ist ganz hilfreich):

  • Sichtprüfung auf Kurzschlüsse
  • Kurzschluss zwischen Vcc und GND?
  • kommt Vcc und GND auch am IC an?

Nach Einschalten der Spannungsversorgung (USB-Stecker) sollte es keinen lauten Knall o.ä. geben. Den Mikrocontroller überprüft man am besten mit einem Programmieradapter und avrdude. Dabei ist zu beachten, dass der Mikrocontroller im Auslieferungszustand mit seiner internen Taktquelle arbeitet und der Programmieradapter auf eine niedrige Geschwindigkeit einzustellen ist (USBasp: Jumper SCK). Nach einem mutigen:

avrdude -c usbasp -p m8 -t  -v

sollte eine längere Ausgabe kommen, in der der erkannte Mikrocontroller mit seinen momentanen Parametern etc. aufgelistet wird. (mit Taste "q" kommt man wieder aus dem Terminalmode von avrdude)

Eine gute Ausgangsbasis für weitere Experimente ist folgende Einstellung der Fuse-Bits:

avrdude -c usbasp -p m8 -U hfuse:w:0xc9:m -U lfuse:w:0x9f:m

Danach kann man auch im schnelleren Mode des Programmieradapters arbeiten.

Eine recht nützliche Webadresse zur Ermittlung der jeweils gewünschten Fuse-High- und -Low-Bytes ist der AVR Fuse Calculator.

[Bearbeiten] Software

Hier einige Programmbeispiele, die die einzelnen Komponenten und Schnittstellen des Basisboards 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.


[Bearbeiten] Bootloader

Prinzipiell ist für das BLIT-Board ein Bootloader vorgesehen, der über die vorhandene USB-Schnittstelle funktionieren soll. Idee ist, dass der Mikrocontroller im "Auslieferungszustand" bereits mit diesem Stück Software initialisiert ist und der Anwender erstmal keine spezielle Hardware zum Flashen der Programme auf den Controller braucht.

[Bearbeiten] AVRUSBBoot

Ein Teil des BLIT-Boards basiert auf der vorgeschlagenen Grundschaltung, die unter http://www.fischl.de zu finden ist. Also sollte dieser Bootloader ohne große Probleme sofort funktionieren... Hier die ungefähren Schritte:

  • Das Softwarepaket kann und sollte auch von obiger Quelle bezogen werden. Prinzipiell kann nach der, im Paket vorhanden, Dokumention (README.txt) vorgegangen werden...
  • Die Firmware ist ohne Änderungen sofort auf dem BLIT-Board einsetzbar. Im Makefile ist lediglich der Typ der (initialen) Flash-Hardware anzupassen, mit der der Bootloader einmalig in den Flash des Mikrocontrollers übertragen wird.
  • Im Quelltext des PC-Tools (im Unterverzeichnis software/) ist ein kleiner Fehler in der Datei main.cpp enthalten. In der allerletzten Zeile ist das ";" zu eliminieren. Zum erfolgreichen Übersetzen sind der installierte g++-Compiler sowie die entsprechenden Header-Files von libc und libusb Voraussetzung. Das übersetzte Programm avrusbboot kopiert man als root nach /usr/local/bin. (Was zur erfolgreichen Übersetzung unter Windows notwendig ist, ... keine Ahnung, sollte aber wohl auch möglich sein!)
  • Das Flashen der Firmware in den Mikrocontroller erfolgt so, wie in der Dokumentation beschrieben wird. Auf jeden Fall sind danach die Fuse-Bits nicht zu vergessen, damit der Mikrocontroller nach einem Reset zuerst mit dem Bootloader startet! Die folgende Konstellation der Fuse-Bits realisiert u.a., dass nach einem Reset des Controllers zuerst die Startadresse des Bootloaders im Programmspeicher angesprungen wird.
avrdude -c usbasp -p m8 -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m
  • Zum Abschluß ist der Bootloader-Bereich im Flash des Controllers vor Überschreiben zu schützen. Dazu setzt man die Lock-Bits (siehe auch Datenblatt des Controllers) entsprechend (die Entsperrung des Bootloader-Bereiches erfolgt mit 0x3f):
avrdude -c usbasp -p m8 -U lock:w:0x2f:m
  • ... und das sollte es gewesen sein!


Wenn nun Jumper JP1 auf dem BLIT-Board geschlossen ist, verweilt der Mikrocontroller nach einem Reset (USB-Stecker raus/rein) im Bootloader-Modus. Mit dem Tool avrusbboot kann nun das Mikrocontroller-Programm, ohne spezielle Hardware, direkt über die USB-Schnittstelle des PC in den Flash-Speicher geladen werden.

avrusbboot xyz.hex

(Natürlich kann auch das jeweilige Makefile entsprechend um eine Sektion erweitert werden.)

Öffnet man den Jumper JP1 und resetet das Board, springt der Mikrocontroller zuerst in den Bootloader-Bereich, erkennt, dass der Jumper nicht geschlossen ist (PIN PC2 des Controllers nicht Low) und startet sofort das Anwendungsprogramm am Anfang des Programmspeichers.

Nachteil der Variante mit einem installierten Bootloader ist, dass dadurch etwas Programmspeicher auf dem Mikrocontroller "verloren" gehen. Im Fall von avrusbboot sind es 2kByte. Aber es bleiben bei einem ATmega8 noch 6kByte übrig, was für die folgenden Beispiele mehr als genug ist...


[Bearbeiten] USBaspLoader

Möchte man einen ATmega168 auf dem BLIT-Board betreiben, der ja doppelt soviel Flash-Speicher zur Verfügung stellt und Pin-kompatibel zum ATmega8 ist, lässt sich AVRUSBBoot nicht übersetzen. Einige Registerbezeichnungen sind anders als beim kleinen Bruder und dies wurde im Quelltext der Firmware nicht entsprechend ausprogrammiert. Aus diesem Grund sah ich mich nach einem anderen Bootloader um, der ebenfalls via USB-Schnittstelle funktioniert und würde auch fündig: USBaspLoader von objective development. Nebenbei kauft man sich gleich noch einen weiteren Vorteil ein, der Bootloader benötigt kein eigenes spezielles Tool für den PC, sondern funktioniert auch mit avrdude.

Damit dieser Bootloader auf dem BLIT-Board funktioniert, sind ein paar kleiner Anpassungen am Orginal-Quelltext (den man sich von obigen Link besorgt) vorzunehmen:

firmware/Makefile:
Die korrekte Quarzfrequenz (F_CPU) und Device (DEVICE) sind einzutragen.

firmware/bootloaderconfig.h:

  • die USB-Pins anpassen
 #define USB_CFG_DMINUS_BIT      0
  • Pin des Bootloader-Enable-Jumpers anpassen
static inline void  bootLoaderInit(void)
{
    PORTC |= (1 << JUMPER_BIT);     /* activate pull-up */avrdude -c usbasp -p m8 -t  -v
    if(!(MCUCSR & (1 << EXTRF)))    /* If this was not an external reset, ignore */
        leaveBootloader();
    MCUCSR = 0;                     /* clear all reset flags for next time */
}

static inline void  bootLoaderExit(void)
{
    PORTC = 0;                      /* undo bootLoaderInit() changes */
}

#define bootLoaderCondition()   ((PINC & (1 << JUMPER_BIT)) == 0)
  • ein paar Optionen abwählen, da u.U. die Codegröße >2048 Bytes nach dem Übersetzen wird und das passt dann nicht mehr in den Bootloaderbereich des Mikrocontrollers. Dies wären z.B. die Kandidaten:
#define HAVE_EEPROM_PAGED_ACCESS    0
...
#define HAVE_EEPROM_BYTE_ACCESS     0


Ist dies alles, getan sollte ein mutiges...

make
make fuse
make flash
make lock

...alles weitere tun, um den Bootloader auf den Mikrocontroller zu bringen und den entsprechenden Speicherbereich vor weiterem Überschreiben zu schützen.


Um nun ein Programm auf den Controller zu übertragen, genügt es den Jumper auf dem Board zu schliessen, BLIT-Board und PC via USB zu verbinden und avrdude entsprechend aufzurufen, z.B.:

avrdude -p m168 -c usbasp  -U flash:w:main.hex

Das Parameter -p m168 bezeichnet einen ATmega168. Natürlich kann die beschriebene Vorgehensweise auch mit einem ATmega8 durchgeführt werden.

Desweiteren funktionieren (teilweise) auch einige andere avrdude-Komandos, wie z.B. der Aufruf des Terminalmodus:

avrdude -c usbasp -p m168 -t  -v

[Bearbeiten] Erweiterungsbaugruppen

[Bearbeiten] Allgemeines zu TWI

Wie schon einleitend erwähnt, kommunizieren die, in der Folge beschriebenen Zusatzbaugruppen via TWI (I2C) mit dem Basisboard. Großer Vorteil des TWI-Bus ist es, dass theoretisch bis zu 127 Teilnehmer einfach parallel an die TWI-Leitungen angeschlossen werden können. Praktisch sind da natürlich einige elektrische und performancebegründete Grenzen gesetzt.

Auf dem Basisboard ist eine 10-polige Wannenbuchse vorgesehen, auf der die notwendigen TWI-Leitungen des MC (SDA, SCL, GND) herausführt sind. Zusätzlich liegen an der Buchse noch VCC (zur einfachen Stromversorgung der Zusatzbaugruppen über das Basisboard) und ein Interrupteingang (INT1) des MC an. Viele TWI-ICs haben einen INT-Pin, auf dem bei bestimmten Ereignissen ein Impuls ausgegeben wird. Beispiele für solche Ereignisse innerhalb von TWI-ICs können sein:

  • I/O-Port-Expander PCF8574: an einem der acht als Eingang konfigurierten I/O-Pins liegt eine Signal an
  • RTC PCF8583: der interne Zeitzähler hat einen bestimmten Wert erreicht (z.B. Sekundentakt, Alarmzeit erreicht)
  • TWI-ADCs (Analog-Digital-Wandler): die Umwandlung eines Messvorganges ist abgeschlossen und der Wert steht zur Abholung bereit.

Auf solche Ereignisse kann gezielt in einem vernünftig strukturierten MC-Programm innerhalb einer entsprechenden Interrupt-Service-Routine (ISR) reagiert werden, was unnötiges zyklisches Abfragen von Werten über den TWI-Bus minimiert. Innerhalb des Beispielprogrammes rtc_lcd zur I2C-RTC-Baugruppe ist ein solches Vorgehen exemplarisch implementiert. Hier löst der Sekundentakt des RTC verschiedene Auslesevorgänge über den TWI-Bus aus. Jede der hier beschrieben Zusatzbaugruppen besitzt einen entsprechenden Jumper, mit dem die Interruptleitung geschlossen bzw. aufgetrennt werden kann.

Das TWI-Protokoll sieht die gezielte Adressierung der einzelnen TWI-ICs über eine 7-Bit-Kennung vor (siehe auch TWI-Tutorial). Von diesen 7 Bit sind meistens die ersten 4 Bit bereits vom Hersteller auf dem IC fest "eingebrannt", für die verbleibenden Bits gibt es Adress-Eingänge, welche frei konfiguriert werden können. Deshalb sind auf jeder Zusatzbaugruppe entsprechende Jumper-Gruppen zu finden, die diese Adress-Eingänge auf 0 oder 1 ziehen. Damit ist dann auch möglich mehrere gleiche TWI-ICs über ihre individuelle Adresse gezielt anzusteuern. Bei 3 Bit frei konfigurierbaren Adressen (A0-A2) können also bis zu 8 gleiche TWI-ICs an einem Bus unterschieden werden. Ausnahme ist z.B. der weiter unten verwendete RTC-IC (PCF8583): hier ist nur eine Adressleitung (A0) herausgeführt und damit sind nur zwei ICs von diesem Typ am Bus unterscheidbar.

Das letzte verbleibende Bit der 8-Bit-TWI-Adresse kennzeichnet die Art des Zugriffes auf den IC, also Lesen (1) oder Schreiben (0). Weiterhin ist die Adresse 0x00 für TWI-Broadcast reserviert.

Für die Verbindung der Baugruppen untereinander reicht ein einfaches 10-poliges Flachbandkabel auf dem mehrere 10-polige Stecker montiert sind.

In Sachen TWI bzw. I²C sei auch auf diese Seite verwiesen, auf der eine spezielle Firmware beschrieben wird, die die Nutzung des BLIT-Boards mit den I2C-Tools oder lm-sensors ermöglicht.

[Bearbeiten] Baugruppen

[Bearbeiten] Diverse Software zum BLIT-Board


[Bearbeiten] weitere Ideen

  • es gibt noch eine Reihe weiterer interessanter TWI-ICs; hier eine kleine Auswahl
  • eine Funk- und/oder Ethernetschnittstelle als TWI-Zusatzmodul?

[Bearbeiten] weiterführende Literatur

  • "Linux Hardware Hackz"; Jürgen Plate; Hanser-Verlag; 2007 (ISBN 3-446-40783-1)
  • "Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie"; Günter Schmitt; Oldenbourg Verlag; 2006 (ISBN 3-486-58016-7)
  • "Messen, Steuern und Regeln mit AVR-Mikrocontrollern"; Wolfgang Trampert; Franzis-Verlag; 2004 (ISBN 3-7723-4298-1)

[Bearbeiten] Links

[Bearbeiten] Kontakt

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

Weitere Mikrocontroller-Projekte von mir:

'Persönliche Werkzeuge