• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Erstes (größeres) Projekt 2x 7Segmentanzeige mit ATTINY13

fockel007

Geocacher
Heute möchte ich mal mein erstes größeres ATTINY-Projekt euch vorstellen. Reaktivlichter hab ich schon einige zusammengebaut. Aber jetzt kam mir die Idee bei einem Nachtcache einen Koordinatensatz per 7-Segmetnanzeige auszugeben. Da ich dafür nicht extra Bauteile kaufen wollte mussten die Reste aus meiner Bastelkiste herhalten. Als Controller hatte ich noch von den Reaktivlichtern einen Attiny 13V übrig. Aufgrund der Pinbelegung war es aber ja nur möglich die Zahlen BCD-Codiert auszugeben. BCD-> 7 Segmentreiber (4511)hatte ich noch in meiner Fundkiste drin.
Weiter Forderung der Station ist, sie soll per mitgebrachtem 9V-Block funktionieren ohne das ein Batterieclip verwendet wird (Reduktion Wartungsaufwand).
Als Gehäuse kam ein gebrauchtes Kunstoffgehäuse mit Dichtung zum Einsatz (wurde braun grün matt lackiert). Die Batterie wird per Magnetkraft an den Kontakten (Messingschrauben 4mm) gehalten.
LED rot: verpolte Batterie
LED grün: alles ok
7 Segment rot: Nordkoordinate
7 Segment gelb: Ostkoordinate

Für ein Projekt aus Restmaterial bin ich damit ziemlich zufrieden.
Bild2.jpg
Um die unterschiedlichen Displays anzusteuern ist ein Transistor verbaut worden um zwischen den beiden Treibern zu wechseln.
Der Widerstand der gelben Anzeige ist geringer da die Anzeige mehr Strom benötigt.
Das Programm ist einfach gehalten und noch komplett ohne Optimierung (da noch 53% Speicher frei ist). Da die Batterie ja mitgebracht wird wurde kein Wert auf Energiesparern etc. gelegt, aktiviert wird das ganze durch Spannung anlegen.
Bild1.jpg

Die viele "Freiluftverdrahtung" liegt daran das ich mit der Lochrasterplatine gestartet bin ohne vorher einen Layoutplan zu zeichnen. Das ganze hätte auf der Platinengröße auch ohne die ganzen Kabel funktioniert, allerdings hätte ich dann auch wesentlich länger für die Platine gebraucht.

Hier noch der Code für Basom.

Code:
$regfile = "ATtiny13.DAT"
$crystal = 113000                                           'Frequenz des internen Oszillators

Config Portb = &B11111111

Dim A As Byte
Dim B As Byte
Dim C As Byte

' BCD-> 7 Segment Decoder initialisieren das definiert keine Anzeige
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Waitms 250
Portb.4 = 0
Waitms 250


Gosub Doppel8
Gosub Ziffernaus3

'Daten anzeigen oberes Display
Portb.4 = 1                                                 'oberes Display an

Gosub Z5
Gosub Pausekurz
Gosub Z0
Gosub Pausemittel
Gosub Z1
Gosub Pausekurz
Gosub Z5
Gosub Pausemittel
Gosub Z4
Gosub Pausekurz
Gosub Z9
Gosub Pausekurz
Gosub Z4
Gosub Ziffernaus3


'Daten anzeigen unteres Display
Portb.4 = 0                                                 'unteres Display an

Gosub Z0
Gosub Pausekurz
Gosub Z0
Gosub Pausekurz
Gosub Z7
Gosub Pausemittel
Gosub Z2
Gosub Pausekurz
Gosub Z9
Gosub Pausemittel
Gosub Z0
Gosub Pausekurz
Gosub Z7
Gosub Pausekurz
Gosub Z9
Gosub Ziffernaus3


Gosub Doppel8

End

Pausekurz:
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Waitms 300
Return

Pausemittel:
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Waitms 500
Return

Ziffernaus3:
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Waitms 3000
Return

Doppel8:
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
For B = 1 To 255
Portb.4 = 1
Waitms 5
Portb.4 = 0
Waitms 5
Next B
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Return

Z0:
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Waitms 1500
Return

Z1:
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Waitms 1500
Return

Z2:
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
Portb.3 = 0
Waitms 1500
Return

Z3:
Portb.0 = 1
Portb.1 = 1
Portb.2 = 0
Portb.3 = 0
Waitms 1500
Return

Z4:
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0
Waitms 1500
Return

Z5:
Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0
Waitms 1500
Return

Z6:
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Waitms 1500
Return

Z7:
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Waitms 1500
Return

Z8:
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Waitms 1500
Return

Z9:
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Waitms 1500
Return
 

thomas_st

Geowizard
fockel007 schrieb:
Heute möchte ich mal mein erstes größeres ATTINY-Projekt euch vorstellen.
Ha, mal wieder etwas Elektronik ... :)

fockel007 schrieb:
Für ein Projekt aus Restmaterial bin ich damit ziemlich zufrieden.
Jep. Sieht gut aus. Der "BC107-Inverter" gefällt mir ;) Einen Verbesserungsvorschlag hätte ich aber schon: um den 7805 gehören noch ein paar 100n Kondensatoren! Oder sind die bei dem mit dem "µA" im Namen nicht nötig? Bevor Missverständnisse aufkommen: diese Kondensatoren sind keine "Angstkondensatoren", sondern sollen die Schwingungsneigung des Spannungsreglers kompensieren. Mit einem ehemaligen Kollegen habe ich mich lange gestritten, ob eine anti parallele Diode über den 7805 sinnvoll wäre - ich baue sie ein, er hält sie für sinnlos. Verhindern soll sie, dass der Ausgang des 7805 eine höhere Spannung als der Eingang aufweist (z.B. möglich, wenn am Ausgang in Summe mehr Kondensatorkapazität als am Eingang sitzt) - dann könnte man den 7805 zerstören. Ansonsten hätte ich die Diode im GND-Strang weggelassen - allerdings verbrät die Dir 0,7V die dann nicht der Spannungsregler abbauen muss.

Ansonsten sieht es gut aus ...

Viele Grüße,
Thomas(_st)
 
OP
fockel007

fockel007

Geocacher
Generell sollte man die 100nF Kondensatoren einbauen stimmt, ich hab hier darauf verzichtet, da die Schaltung nicht im Dauerbetrieb ist. aber die könnte ich noch nachträglich reinsetzen. Die Diode antiparallel hab ich noch nie verbaut, bislang hab ich allerdings in all den Jahren E-Technik auch noch keinen 78ger gesprengt- nur öfter mal über die Leistungsgrenze getrieben..
Stimmt die Diode im Massestrang könnte raus, aber die 0,7V hat der Spannungsregler weniger zu verbraten.
 
Oben