Lighteensy

From wiki.erlangen.ccc.de

lighteensy

lighteensy in Aktion

lighteensy ist ein winzigstes 8-Bitter Projekt. Wir wollen damit interessierte Neulinge an technische Themen wie Löten, Schaltpläne, Hardware und Software heranführen. Im Moment ist alles sicher nur auf dem Stand Ideensammeln und Brainstorming. Ob es zu einem Freizeitprogramm für Schüler in den Ferien wird, hängt von unserem Erfolg und Durchhaltevermögen ab.

was kann lighteensy?

Die Hardware besteht aus einer Batterie, einem Prozessor, 3 Leuchtdioden in rot, grün und blau, und eventuell noch 2 Tastern. Das Ganze soll auf einer Lochrasterplatine aufgebaut werden. Durch geeignete Software, die die 3 LEDs dimmt, sollen sämtliche Mischfarben erzeugt werden können.

Technisches

lighteensy basiert auf dem 8-Bit Prozessor ATtiny15 von Atmel. Er zeichnet sich durch minimalste externe Bestückung aus. So wird bspws. kein externer Quarz benötigt, ein interner RC-Oszillator schwingt mit 1.6 MHz, und lässt sich - wenn man Glück hat (das unterliegt Prozessvariation, oder einfacher Ungenauigkeiten beim Herstellen des Silizium-Chips) - bis auf 2 MHz tunen. Programmieren kann man den ATtiny über SPI, wenn der Prozessor im Reset gehalten wird, das erledigt am einfachsten die Programmiersoftware avrdude.

Hardware

lighteensy komplett

ATtiny15

Der ATtiny15 ist ein vollwertiger Computer. Man kann mit ihm Rechnen, Zählen, Zeit messen, oder Messwerte aufnehmen, also Temperatur oder Helligkeit messen (dazu müsste man natürlich noch einen Temperatur- oder Lichtsensor anschliessen). Töne erzeugen sollte auch gehen, mit einer entsprechenden Beschaltung und Lautsprecher.

Die wichtigsten Merkmale sind: 8 Bit, 32 interne Register (also 32 Bytes Arbeitsspeicher=RAM :), 1kByte Speicher für Programme (sowas wie die Festplatte beim Computer), Harvard Architektur

So ziemlich alles über den ATtiny15 erfährt man im Datenblatt. Das gibt's wie die meisten Elektronik-Datenblätter nur auf Englisch.

Pins

Unser Prozessor, der ATtiny15 hat 8 Pins (Anschlüsse):

ATtiny15 im DIP Gehäuse

damit jeder weiss, wovon man redet, werden die Pins bei Chips fast immer nach dem gleichen Schema nummeriert, wobei Pin 1 irgendwie speziell markiert wird, und dann wird gegen den Uhrzeigersinn gezählt.

Das Dreieck, und die runde Kerbe links markieren Pin 1, somit liegen die Pins beim ATtiny15 bei:

 8 7 6 5
 )      |
 ^      |
 1 2 3 4


Den gleichen Prozessor gibt es auch in einem kleineren Gehäuse, wobei wieder Pin 1 unten links markiert ist:

ATtiny15 im DIP und SOIC Gehäuse


Auch der verwendete Kabelstecker hat eine (leider etwas andere) Nummerierung:

6 Pin Stecker

Die Markierung war auf dem Foto fast nicht zu erkennen, darum hab ich die Pin 1 Markierung in weiss nachgemalt. Die Zählweise ist hier aber anders:

 6  4  2
 5  3  1
       ^

So sieht der Stecker verkabelt aus. Der rote Draht ist mal wieder Pin 1.

6 Pin Stecker mit Kabel


Hier die Pins am lighteensy:

lighteensy mit Pins


Die IC Fassung:

IC Fassung


Und noch der verwendete Parallelport Stecker:

DB25 (Parallelport) vorne

DB25 (Parallelport) hinten



Schaltplan

Auch wenn im Schaltplan ATtiny12 steht, kann ohne Problem der ATtiny15 verwendet werden. Er ist von der Pinbelegung nahezu identisch. VCC steht fuer Plus an der Spannungsversorgung, die lustigen 3 Striche uebereinander fuer Ground, Masse bzw. Minus. Im Schaltplan fehlt der Anschluss fuer die Spannungsversorgung am ATtiny15. Plus muss an Pin 8, Minus an Pin 4.

Version 0.02 Schaltplan Version 0.02

Zur besseren Übersicht hier das Pinout an den Steckern:

              v
  5     3     1
 MOSI  MISO  SCK
 
  6     4     2
 GND   GND  RESET

Das Flachbandkabel muss so aussehen:

  6-pin    25-pin
 Platinen  parallel   Bezeichnung
 Stecker   Port
 --------+-----------+-----------
     1     8          SCK
     2     7          RESET
     3     10         MISO
     4     18-25      GND, ground, Masse, Minus
     5     9          MOSI
     6     18-25      GND, ground, Masse, Minus

Bauteileliste

  • 1 x ATtiny15L im DIP Gehäuse
  • 1 x IC Sockel 8-Pin
  • 1 x LED rot
  • 1 x LED grün
  • 1 x LED blau
  • 2 x Widerstand 220 Ohm
  • 1 x Widerstand 100 kOhm
  • 1 x Lochstreifenplatine, min 2x3 cm^2, besser 5x5 cm^2
  • 1 x Pfostenstecker 6-Pin
  • 1 x Platinenstecker 6-Pin
  • 1 x Sub-D 25-Pin Stecker für Parallelport
  • 1 x Flachbandkabel 8-Pin, 20cm (6 Pin für den Stecker, 2 Pin für die Batterie)
  • 1 x Batteriefassung für 2 x AAA Micro
  • 2 x AAA Micro Alkaline Batterie

Aufbau

Stecker, Pins, Löten und so

Software

Programmier-Software

Erstmal braucht man einen Compiler, der heisst avr-gcc, unter Linux und Artverwandten kommt der mit dem Compiler gcc, unter Windaus braucht man wahrscheinlich WinAVR. Hier mal zwei Tutorials. Für die kleinen Atmel-Steine mit dem minimalen AVR1 Prozessorkern kann man nur in Assembler programmieren, nicht in C - bei 8-Bittern macht das eh mehr Sinn.

Programmiert wird das resultierende Intel-HEX-file dann mit avrdude.

Target-Software

"Hello World" - Beispielprogramm, blinkt mit den 3 LEDs der Reihe nach.

 #include <avr/io.h>
 
 #define L           r16    /* L wie LEDs    */
 #define outerwait   r17    /* ich bin die   */
 #define innerwait   r18    /* warteschleife */
 
 #define  NUR_ROT    0x0A
 #define  NUR_GRN    0x18
 #define  NUR_BLU    0x12
 
 #define  ROT_AUS    0x10
 #define  GRN_AUS    0x02
 #define  BLU_AUS    0x08
 
 #define  ALLE_AUS   0x1A
 #define  ALLE_AN    0x00
 
 .global main
 
 main:
   ldi  L,0xFF    /* PORTB sind alles Ausgänge */
   out  _SFR_IO_ADDR(DDRB),L
 
 schleife:
   ldi  L,NUR_ROT
   out  _SFR_IO_ADDR(PORTB),L
   rcall  waitabit
 
   ldi  L,NUR_BLU
   out  _SFR_IO_ADDR(PORTB),L
   rcall  waitabit
 
   ldi  L,NUR_GRN
   out  _SFR_IO_ADDR(PORTB),L
   rcall  waitabit
 
   rjmp  schleife  /* springe zu schleife: */
 
 waitabit:
   ldi  outerwait,0xff
 waitouterloop:
   ldi  innerwait,0xff
 waitinnerloop:
   subi  innerwait,0x01
   brne  waitinnerloop
   subi  outerwait,0x01
   brne  waitouterloop
   ret

Compilieren kann man es mit:

 avr-gcc -mmcu=attiny15 -I/usr/avr/include -o hello.elf hello.S
 avr-objcopy -j .text -j .data hello.elf -O ihex hello.hex
 avr-objdump -S hello.elf > hello.dis.asm

danach kann das lighteensy programmiert werden:

 avrdude -p t15 -c bsd -P /dev/parport0 -U flash:w:hello.hex

Target Software - Teil 2

"Hello Universe" - Beispielprogramm, zaehlt binaer von null bis sieben

  #include <avr/io.h>

  #define L           r16    /* L wie LEDs    */
  #define outerwait   r17    /* ich bin die   */
  #define innerwait   r18    /* warteschleife */
  #define counter     r19

  #define LED0 PB4
  #define LED1 PB3
  #define LED2 PB1

  #define ddrb _SFR_IO_ADDR(DDRB)
  #define portb _SFR_IO_ADDR(PORTB)

  .global main

  main:
    ldi  L,0xFF    /* PORTB sind alles Ausgänge */
    out  ddrb,L
    ldi counter,0

  schleife:
    cpi counter,0x8
    brne nocounterreset
    ldi counter,0
    nocounterreset:

    ldi L,0x3f
    sbrc counter,0
    andi L,~(1<<LED0)
    sbrc counter,1
    andi L,~(1<<LED1)
    sbrc counter,2
    andi L,~(1<<LED2)

    out  portb,L
    rcall  waitabit

    inc counter    /* hochzaehlen */
    rjmp  schleife  /* springe zu schleife: */

  waitabit:
    ldi  outerwait,0xff
  waitouterloop:
    ldi  innerwait,0xff
  waitinnerloop:
    subi  innerwait,0x01
    brne  waitinnerloop
    subi  outerwait,0x01
    brne  waitouterloop
    ret

Kompilieren und hochladen funktioniert wie beim Hello World programm. Alternativ kann man auch uisp, einen anderen Atmel Programmer, zum Hochladen verwenden, und das geht so:

 uisp -dprog=bsd -dpart=ATtiny15 -dlpt=0x278 -v=3 --erase
 uisp -dprog=bsd -dpart=ATtiny15 -dlpt=0x278 -v=3 --upload if=universe.hex

Die drei LEDs muessten dann von null bis sieben zaehlen, und das sieht dann so aus:

 000, 001, 010, 011, 100, 101, 110, 111

TODO

well, we need more than a Wikipage ;)

  • die SW im ATtiny selbst (derzeit gibt es nur ein "Hello World" und ein "Hello Universe")
  • ein El Torito ISO image, das alles Nötige mitbringt, evtl eine angepasstes Knoppix - Platz kann man ja gewinnen, indem man OOffice, Koffice, CUPS in die Tonne tritt, und Mozilla durch Firefox ersetzt. Am besten packt man dann gleich alle möglichen 8 Bit embedded Utilities drauf, und noch mehr. Statt Koppix neu zu remastern (da gabs doch auch mal extra Tools für?! *FIXME*) kann man vllt. auch Intellibuild verwenden, oder reconstuctor für Ubuntu.
  • Doku zum Befehlssatz
  • Beispielprogramme
  • Lötkolben und Lötmaterial (falls wir das mit Schülern angehen)
  • Ort und Termin
  • Werbung

Kategorie:Projekte