MezData-Logo

Zylonenauge-Lauflicht 2.0

Synopsis: [Zylonen]

Durch eine LED-Spende an die Schule motiviert, entwickelte ich eine kostengünstige Platine für meine Schüler.

Die Platine

Zylonenauge

Schematische Darstellung

Schema
Schema der Platine
Matrixanordnung
Matrixanordnung der LED

Um mit den 8 Port-Pins von PORTB die 16 LED ansteuern zu können sind die LED als Matrix verschaltet. Um beispielsweise L0 leuchten zu lassen muss PB4 auf 0 und PB0 auf 1 geschaltet werden. An PORTB muss dazu 0b11100001 = 0xe1 ausgegeben werden.

Die Taster T2..T0 sind gegen GND (0V) verschaltet, bei Betätigung liegt Low-Signal am Eingang vor. Die internen PullUps müssen eingeschaltet werden, damit bei offenem Taster ein High-Pegel am Eingang anliegt: PORTD = 0b01110000.

Vorwiderstände für die Leuchtdioden berechnen

Farbe LED Vorwiderstand I gemessen
Rot (5V-1,8V)/10mA =320Ω => 330Ω 9,3mA
Grün (5V-3,2V)/10mA =180Ω 9,1mA
Blau (5V-3,2V)/10mA =180Ω 9,7mA

Die Spannung an der Leuchtdiode hängt von ihrer Farbe ab. Um den Stromfluss auf 10 mA zu begrenzen werden Vorwiderstände für die verwendeten Farben ermittelt.

Details zur Berechnung

Laut [Datenblatt ATtiny2313] liefert ein Portpin maximal 40 mA, der maximale Strom in VCC und aus GND darf 200mA nicht überschreiten. Der maximale Strom in eine LED darf bei kontinuierlichem Betrieb 20mA nicht überschreiten. Die Kathoden von jeweils 4 LED münden in einen Portpin (siehe Schaltplan). Die Schaltung wird mit 5 V betrieben, die Ausgangsspannung eines Portpins sei bei Low 0V und bei High 5V, das ist idealisiert, tatsächlich liegt sie laut Datenblatt bei 20mA Strom bei Low <0,7V und bei High >4,2V.
Eine erste einfache Annahme für die Berechnung ist, dass der maximale Strom an einem Portpin dann auftritt, wenn die Anoden von 4 LED Strom über 4 Widerstände ziehen.
Seien PB7..PB4 Low und PB3 High, es leuchten LED1, LED5, LED9, LED13. PB3 liefert den Strom für die 4 LED. Der Strom durch eine LED darf durch die 40mA Grenze eines Portpins nicht grösser als 10mA sein. Sollten alle LED gleichzeitig leuchten wäre der Strom in und aus dem µC <160mA, was im erlaubten Bereich liegt.
Die Berechnungen in der Tabelle wurden mit Schätzwerten für die Spannung an der LED bei 10mA und mit einem Sollstrom von 10mA durchgeführt. Zur Kontrolle wurden die tatsächlichen Ströme mit den ermittelten Vorwiderständen gemessen.

Messungen des Gesamtstrombedarfs mit blauen LED: Ruhestrom ohne LED 2,68mA; 4LED 1..4 leuchten 11,7mA; 4LED 1,5,9,13 leuchten 24,8mA; alle LED leuchten 38mA. Vcc-UPB0 = 0,5V bei 25mA.

Die Bauanleitung

Bausatz blau

Entscheiden: Welche LED-Farbe ist gewünscht? Dann die 4 passenden Widerstände für Rot: 330Ω oder Blau, Grün: 180Ω verwenden.

Selber mitbringen: Alter kleiner Kopfhörer als Lautsprecher, ggfs. 5V-Netzteil für Stand-Alone-Betrieb.

Bauanleitung als PDF

Stückliste und Kalkulation

Preise Stand 25.11.2019

Pos Anzahl Bauteil BestNr Preis Ges
1 1 Platine   7,60 € 7,60 €
2 1 100nF X7R-5 100N 0,05 € 0,05 €
3 4 180 Ohm   0,05 € 0,20 €
4 1 220 Ohm   0,05 € 0,05 €
5 16 LED     0,00 €
6 1 IC Sockel 20 pin GS 20 0,07 € 0,07 €
7 1 Pfostenwanne 6 pin WSL 6G 0,20 € 0,20 €
8 1 Pfostenwanne 10 pin WSL 10G 0,10 € 0,10 €
9 1 Buchsenleiste 8 pin MPE 094-1-008 0,23 € 0,23 €
10 1 Buchsenleiste 3 pin SPL 64 0,10 € 0,10 €
11 3 Digitaster TASTER 9302 0,14 € 0,42 €
12 1 Pfostenstecker 2 pin     0,00 €
13 1 Jumper JUMPER 2,54 BL 0,05 € 0,05 €
14 1 ATtiny2313 ATTINY 2313A-PU 1,05 € 1,05 €
15 1 Keramikschwinger CST 4,00 0,18 € 0,18 €
17 1 Lautsprecher     0,00 €
18 1 USBasp Programmer   2,71 € 2,71 €
          13,01 €
Testen mit Testsoftware [Zylonenauge.c]
// Zylonenauge V1.1 (c) Oliver Mezger 25.06.2017
 
#include <avr/io.h>
#include <util/delay.h>
 
unsigned char ledausgabe[]={0xe1,0xe2,0xe4,0xe8,0xd1,0xd2,0xd4,0xd8,0xb1,0xb2,0xb4,0xb8,0x71,0x72,0x74,0x78};
int main(){
  DDRB=0xff;      // PORTB auf Ausgang
  char musterz=0; // Position 0
  while(1){
    for(musterz=0;musterz<sizeof(ledausgabe);musterz++){
      PORTB=ledausgabe[musterz];
      _delay_ms(30);
      PORTB=0;
    }
    for(musterz=sizeof(ledausgabe)-2;musterz>0;musterz--){
      PORTB=ledausgabe[musterz];
      _delay_ms(30);
      PORTB=0;
    }
  }
}
Bonus: Simulierte Schneeflocken
Bonus [Schneefall.c]
// Schneefall V1.0 (c) Oliver Mezger 5.01.2015
 
#include <avr/io.h>
#include <util/delay.h>
 
unsigned char muster[]={0x78,0x74,0x72,0x71,0xb8,0xb4,0xb2,0xb1,0xd8,0xd4,0xd2,0xd1,0xe8,0xe4,0xe2,0xe1};
int main(){
  DDRB=0xff;
  signed char musterz=0;
  char z=0,i;
  while(1){
    musterz=8+rand()%8;
    z=2+(rand()%32);
    for(i=0;i<=z;i++){
      _delay_ms(30);
    }
    z=2+(rand()%16);
    while (musterz>=0){
      PORTB=muster[musterz--];
      for(i=0;i<=z;i++){
        _delay_ms(20);
      }
    }
    PORTB=0;
  }
}

Der Schaltplan

Schaltplan

Plan wurde mit [KiCad] erstellt. Schaltplan: [Zylonenauge2-Schaltplan.pdf]

Frequenz ändern mit Keramikschwinger

Im Auslieferungszustand ist der ATtiny2313 auf den internen RC-Oszillator mit 1MHz eingestellt. Der RC-Oszillator ist nicht besonders genau, die Frequenz weicht von 1MHz ab und schwankt zudem in Abhängikeit der Versorgungsspannung. Für viele Anwendungen ist dies jedoch trotzdem völlig ausreichend. Bei Anwendungen, die eine bessere Zeitbasis erfordern, z.B. Binäruhr ist die Möglichkeit vorgesehen einen Keramikschwinger zu stecken. Beim Bausatz wird ein Resonator mit 4MHz mitgegeben. In der Arduino-Software kann zwischen dem Internen RC und externen Oszillator umgeschaltet werden.

Port- und Verbinder J2 Belegung

PORTB wird für die 16 Leuchdioden und den Lautsprecher verwendet. An PORTD sind die Taster gegen GND angeschlossen.

PORTB PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
Belegung - Led 15,14,13,12 - Led 11,10,9,8 - Led 7,6,5,4 - Led 3,2,1,0 & Lautsprecher + Led 15,11,7,3 + Led 14,10,6,2 + Led 13,9,5,1 + Led 12,8,4,0
PORTD PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0
Belegung NC Taster S2 Taster S1 Taster S0 J7 1 J7 2 J7 5 J7 6

Am Verbinder J2 sind die freien Pins herausgeführt, dort kann z.B. ein Keramikschwinger angeschlossen werden.