nachdem ich mich jetzt schon eine Weile mit der Codesammlung / Framework
für einen ATtiny44 beschäftigt habe, habe ich nach dem UKW Radio eine
zweite Software geschrieben die auch wirklich aufgebaut (auf Platine)
werden wird (sie wird als Lötübung für SMD Bausteine Verwendung finden)
Die Platine wird als extrem preiswerte Übungsplatine fungieren, die aber
schon minimale I/O Komponenten hat:
- zweistellige 7-Segmentanzeige (LED)
- 4 externe LED
- 4 Taster
- Lautsprecheranschluss
Die Ansteuerung des 7-Segmentanzeige sowie der externen LEDs erfolgen
über das extrem preiswerte (altbekannte) Schieberegister SN74HC595, die
Anzeigen selbst werden von Controllerpins gemultiplext.
Mittels Timerinterrupt ist ein einfacher (Rechteck)Tongenerator
implementiert. Weil ein Interrupt eines AVR nicht von einem anderen
Interrupt unterbrochen werden kann, hab ich mich entschlossen, das
multiplexen der Anzeige und die Tongenerierung mit einem Interrupt zu
realisieren (was zur Folge hat, dass die Anzeige mit unterschiedlichen
Frequenzen gemultiplext wird).
Damit der Umgang und Einstieg sehr einfach bleibt, habe ich die
Ansteuerung in eine einzige .c / .h Kombination gepackt (mini_io).
------------------------------------------------------
Mit dieser gegebenen Hardware wurde das bekannte Spiel "Simon sagt"
realisiert: Computer gibt eine Abfolge von 4 verschiedenen Tönen vor,
die der Spieler nachspielen muss. Die 7-Segmentanzeige zeigt an,
wieviele Abfolgen man erreicht hat.
Ein Video kann man hier sehen:
https://www.youtube.com/watch?v=iyRL2CKWwao
-------------------------------------------------------
Weil mir die Standardanzeigen zu groß waren, habe ich mich in EBAY auf
die Suche begeben und deshalb ist es eine Anzeige mit gemeinsamer
Kathode geworden (obwohl ich aus bestimmten Gründen gemeinsame Anode
ansonsten bevorzuge).
Ebayquellen waren / sind:
(10 Stück zweistellige Anzeige 0,28" Anzeigenhöhe)
Ebay-Artikel Nr. 253836689791
(Schieberegister SN74HC595: Wahnsinn, 5 Cent per Stück)
Ebay-Artikel Nr. 202464991525
(ATtiny44)
Ebay-Artikel Nr. 201539508026
--------------------------------------------------------
(ich weiß: würde es nur um das Spiel gehen, würde man einen ATmega8 oder
einen STM8 verwenden ohne ein externes Schieberegister verwenden zu
müssen).
Ralph S. schrieb:> Weil ein Interrupt eines AVR nicht von einem anderen Interrupt> unterbrochen werden kann,
Wer sagt das?
Abgesehen davon, dass man natürlich auch in einer Interrupt routine die
Interrupts wieder freigeben kann ist es eigentlich ausreichend einen
einzigen Interrupt zu verwenden von dem dann die nötigen Frequenzen für
Multiplexing, Tongenerator, Tastenabfrage und -entprellung usw.
abgeleitet werden.
Ralph S. schrieb:> Die Platine wird als extrem preiswerte Übungsplatine fungieren, die aber> schon minimale I/O Komponenten hat:
Es ehrt dich das du im Schatplan nicht die Abblock-Kondensatoren
unterlassen hast vorzusehen (viele argumentieren: wieso? geht
doch auch ohne), jedoch sehe ich auf dem Aufbau nur einen.
Und dieser eine ist auch noch völlig de-platziert.
Abblock-Kondensatoren gehören -->direkt<-- an die Pins von Vcc und GND.
Du könntest jetzt argumentieren: wieso? geht doch auch so? ....
Und wenn "seltsame" Effekte im Ablauf der Software auftreten,
sagst du dann: an der Hardware kann's nicht liegen, da ist
alles super .... ?
Ich kenne deinen Schallwandler nicht, aber bist du sicher dass
der ohne weitere Beschaltung direkt am Portpin eines Controllers
hängen darf?
Schaltung Lesa schrieb:> ohne weitere Beschaltung direkt am Portpin
Gleiches gilt für den Anschluss der Siebensegmentanzeige. Außerdem
sollten die Anoden über Transistoren getrieben werden, wenn mehr als ca.
5 mA pro Segment fließen.
unglaublich: Es sind 2 ICs und jeder hat 10uF und 100nF. Lautsprecher
könnte auch über Transistor getrieben werden... aaaaber, für solche
Sachen hab ich einen Testlautsprecher (8 Ohm) OHNE Membran, der
Controller hat 2 Stunden Dauerdudeln überlebt. Das gleiche gilt für die
Anzeige. Immer auch dran denken, dass das gemultiplext ist (allerdings
hab ich keine Messung gemacht, wie groß die Spitzenströme sind... auch
immer dran denken: das ist ein Spielzeug... ein billiges. Die
Lebensdauer ist nicht so arg relevant).
Im übrigen gilt beim Schaltplan: Es muss aus dem Plan NICHT die spätere
Zuordnung auf dem PCB zu sehen sein, ein Schaltplan dient zum
Verständnis einer Schaltung um die Funktionsweise zu sehen. Ich hasse
Pläne sehr, bei dem die Pins eines ICs so gezeichnet sind als würde es
eine Draufsicht auf den Baustein sein. Das macht den Plan in aller Regel
dann sehr unleßbar.
Hm, Blockkondensatoren an LEDs... das... mach ich dann nicht.
An Schaltungs Lesa: Die Schaltung hat keine merkwürdigen Nebeneffekte,
sie tut genau das was sie soll. Im Übrigen mit 3,3V und mit 5V (bei 3,3V
leuchten die LEDs logischerweise etwas dunkler).
... die Platine hat die Kondensatoren !
An den Aufbau vom Foto hab ich nicht mehr gedacht.
Grins, da gibt es aber dennoch einen (aber nur eine) Kondensator und den
hab ic im Sockel für den Tiny reingebastelt, einen Sockel mit C für das
Schieberegister hab ich auch gemacht gehabt, den aber in einer anderen
Schaltung verwendet.
Aaaaaaaaber: Wo? sollte bei einer gemultiplexten Anzeige ein Kondensator
hin bitteschön???
Frank schrieb:> Er meint sicher vorwiderstände vor der anzeige. Aber auch der rest> is so> ok da die meisten gängigen co troller den portpin strom sowieso> begrenzen
Hab schon mal einen gehimmelt auf die Art. Danach war der Port putt.
Ich würd zumindest einen Serienwidestand vorsehen. Kannst ja eine Brücke
bestücken. Blos dazubasteln wenn man ihn doch braucht ist ziemlich
lästig, weil man alles aufkratzen muss.
Frank schrieb:> ok da die meisten gängigen co troller den portpin strom sowieso> begrenzen
Der Strom wird in erster Linie durch das Schieberegister begrenzt,
aaaaaaaber (meine Güte):
Nur zum Verifizieren mal gemacht (an 2 verschiedenen ATtiny44 und einem
ATtiny84):
Stromversorgung 5V aus Labornetzteil (Innenwiderstand kenne ich nicht,
hat aber maximalen Ausgangsstrom 3A).
Gesamtstrommessung über einen 0,47 Ohm Meßwiderstand aufgenommen und
über einen Instrumentenverstärker am Speicherscope (Bandbreite 200 MHz)
dargestellt (bei Anzeige= "88" und alle 4 LED an, kein Ton - okay:
Programm extra für diesen Fall der größten Stromaufnahme geflasht - ).
Summenspitzenstrom (für kleiner 10µS) ca. 53 mA. Mittlerer Summenstrom
(Fluke 45) ca. 38mA.
Delta Theta (bei 23°C Umgebungstemperatur) nach 10 Minuten Laufzeit < 3
Kelvin (Temperaturfühler PT1000) bei beiden Chips. (Fehlerquelle: Fühler
nur mit TESA auf dem Chip fixiert und ja ich weiß: widerspricht der
Vorbeugung der ESD Vorschriften).
Datenblattauszüge:
-----------------------------------------------------------------------
Gesamtstromaufnahme des Tiny (lt. Datenblatt) max. 200mA zulässig.
Gesamtstrom per I/O Pin max. 40mA.
Ausgangsstrom Ausgangspins SN74HC595 = 35mA max.
Maximaler Gesamtstrom SN74HC595 = 70mA max.
-----------------------------------------------------------------------
Von einer Strommessung der I/O Pins des Tiny und des Schieberegisters
sehe ich jetzt mal ab.
Aus meiner Sicht der Dinge werden hier keine LED Serienwiderstände
benötigt. Wer mag, kann dennoch 7 Serienwiderstände einbauen. Macht die
Anzeige halt dunkler - für die 4 einzelnen Spieleleuchtdioden vielleicht
gar nicht schlecht, weil meine schon bei 3 mA (im statischen Betrieb)
fast zu hell sind.
So, jetzt könnt ihr mich steinigen, weil ihr meint, dass man so etwas
nicht macht! (ich weiß nicht, wieviele gemultiplexte LED's ich schon
aufgebaut hab, auch in Geräten. Bisher ist noch keines - auch nach
jahrelangem Betrieb - "abgeraucht" ).
------------------------------------------------------------------------
Irgendwie scheint vergessen zu werden, dass das eine Bastelei ist und
ganz pragmatisch: Wenn es funktioniert (und es lange funktioniert), ist
alles gut.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang