Forum: Mikrocontroller und Digitale Elektronik Pollin Bausatz BIN-Hourglass


von R. M. (rmax)


Lesenswert?

Gerade sehe ich, daß Pollin unter der Bestellnummer 810399 einen neuen 
Bausatz mit ATtiny2313 anbietet zu dem es hier noch keinen Thread zu 
geben scheint:

http://www.pollin.de/shop/dt/MDA2OTgxOTk-

Die Platine hat die Form einer Sanduhr, auf der mit einer gemultiplexten 
8x3-LED-Matrix die Stunden, Minuten und Sekunden binär angezeigt werden. 
Dazu kommen zwei Tasten zum Einstellen von Stunde und Minute. Die 
(verbesserungswürdige) Standard-Firmware gibt es als Download.

Leider ist kein ISP-Stecker vorhanden, die nötigen Signale lassen sich 
aber nebeneinander an C3, R15, R1, R2 und R3 abgreifen (oder natürlich 
direkt am gesockelten Controller). Am Tiny sind noch zwei Pins frei, bei 
denen es sich praktischerweise um den UART handelt.

Ich bin gespannt auf Eure Modding-Ideen.

Mir sind bisher in den Sinn gekommen:

* Stoppuhr
* Countdown
* Lauflichter in verschiedenen Varianten
* Zufallsgenerator/Würfel
* Reaktionsspiele
* (Debugging-)Input/Output für andere Projekte über die beiden freien
  Pins per UART oder emuliertem Schieberegister, I²C, etc.
* Lichtorgel
* VU-Meter

: Bearbeitet durch User
von R. M. (rmax)


Lesenswert?

Aua, der Beispielcode ist ja grauenhaft und paßt mit gcc 4.8.3 auch 
nicht mehr ins Flash eines Tiny2313 (weder -O2 noch -Os).

Da werden die Tasten unnötigerweise per Interrupt abgefragt und in der 
ISR mit _delay_ms(200) entprellt. Das eigentlich zeitkritische 
Multiplexing der LEDs findet aber in der freilaufenden Hauptschleife 
statt, ohne sicherzustellen, daß die An-Zeiten der drei Spalten jeweils 
etwa gleich lang sind.

Außerdem ist die Ausgabe der Binärzahlen maximal umständlich und 
platzverschwenderisch gelöst: Für jeden auszugebenden Wert (0..59 und 
255) gibt es eine Funktion, die die nötigen Bits im Portregister einzeln 
setzt. Diese Funktionen werden aus drei riesigen Case-Konstrukten (für 
Stunden, Minuten und Sekunden) aufgerufen. Dabei sind die LEDs so an 
PORTB angeschlossen, daß man einfach nur den bitweise invertierten 
Binärwert ausgeben muß. Alleine diese Änderung hat das Compilat auf etwa 
ein drittel der ursprünglichen Größe schrumpfen lassen.

Komplett aufgeräumt dürfte sich das noch auf unter 500 Bytes reduzieren. 
Damit bleibt genug Platz, Stoppuhr und Countdown-Timer gleich noch mit 
einzubauen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.