Forum: Projekte & Code [ASM] Rückwärts-Zeitzähler bis max 99min


von P. Rebesky (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir ein Programm in Assembler geschrieben, welches die Zeit 
Rückwärts zählt und anzeigt. Nach Ablauf der Zeit ertönt ein Beep. Sowas 
wird gebraucht bei Sportwettkämpfen (Hallenfußball). Zusätzlich ist auch 
dafür ein Punktezähler integriert, allerdings nur als Zweitfunktion. 
Diese wird bei gedrückten Taster und Reset ausgewählt. Dann geht der 
Timer aber nicht mehr. Wäre noch zu ergänzen. Das ganze arbeitet mit 
einen ATtiny2313, einer 4-stelligen 7-Segment LED-Anzeige, drei Taster 
und einen Pieper, welcher beim Anlegen von Spannung selbständig Piept. 
Und natürlich die üblichen Widerstände und Halbleiter für Spannung und 
Strombegrenzung.
Da ich mich erst kurz mit den Atmel Chips beschäftige und viel 
Informationen aus den Foren im Internet bezogen habe, möchte ich das 
Resultat natürlich auch für andere nicht vorenthalten. Einen Schaltplan 
werden ich noch nachliefern, sobald ich diesen gezeichnet habe. Nur das 
Programm gibt es schon vorab.

Schaltung: Der PortB ist über NPN an die alle 7-Segmente angeschlossen 
(a,b,c,d,e,f,g). PortD Bit 0 bis 3 sind über Transistoren an jeweils 
eine Anode ageschlossen. Das ermöglicht die Nutzung einer separaten 
Spannung für das Display, zum Anschluss großer Anzeigen oder LED 
Gruppen. Die anderen Pins 4,5,6 sind an die drei Buttons nach plus 
geschaltet. Pin 6 ist noch ein Pieper dran (da wird zwischen in- output 
geschaltet).

Software: Der Timer wird mit einen EEprom-Wert auf 12 min vorgeladen. 
Taster Pin 4 startet und stoppt den Timer. Taster Pin 6 stellt wieder 
auf die Startzeit. Taster Pin 6 und 5 gleichzeitig drücken stellt die 
Minuten aufwärts. Es kann nur die Zeit verändert werden wenn der Timer 
im Stopp-Modus ist. Kein versehentliches setzen, nur stoppen. Bei Null 
wird ein langer inpulsartiger Piepton erzeugt und natürlich 
Tastenpiepton beim Drücken.

Zweitfunktion: Taster an Pin 4 halten und Reset drücken, z. B. 
Einschalten). Taster Pin4 zählt die Zahl links hoch, Taster Pin5 rechts. 
Zum Löschen muss zusätzlich der Taster Pin 6 gehalten werden.
Jede Betätigung erzeugt ein kurzen Piepton.

Einstellungen: Der Interrupt TC1 muss auf eine Sekunde getrimmt werden. 
Dazu muss der Teilfaktor angepasst werden. Da ich noch auf einen Quarz 
verzichtet habe und mit dem internen Taktgeber arbeite, muss jeder Chip 
abgeglichen werden. 60 min laufen lassen, dann die Differenzsekunden 
ermitteln und den Teiler korrigieren.
1s = 25350(compare TC1)*40(Softwareteiler)*8(prescaler TC1)
x (compare TC1)= Realzeit/Sollzeit * 25350 (old compare TC1)
Realzeit= die angezeigte Zeit (z. B. 59 min und 24 sek)
Sollzeit= die wirkliche Zeit (z. B. 60 min und 0 sek)
Den neuen Wert x eintragen und Chip beschreiben. Wenn Restwerte sind, 
aufrunden. Ein theoretischer Fehler von 0,08 Sekunden in einer Stunde 
ist meiner Meinung nach vernachlässigbar.

Der Code ist nicht perfekt, eben ein erster Anfang, welcher 
funktioniert.

Ok ich werde mich mit dem Schaltbild beeilen und bis dahin verbleibe ich 
mit

Gruß und viel Spass
Peter

von P. Rebesky (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hier noch der Schaltplan. Ich hoffe, dass sich keine Fehler 
eingeschlichen haben, weil die Schaltung aus Kopf erschaffen wurde und 
nachträglich ich erst den Schaltplan erstellte.

von P. Rebesky (Gast)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

hier noch eine etwas veränderte, verbesserte Schaltplanversion. Beim 
ersten Schaltbild ist an der Basis von T13 beim Widerstand das k 
verloren gegangen. 1,5k muss der sein, wie bei den anderen T14-T16.
Im Schaltbild ist ein Quarz angeschlossen, welcher im Programm nicht 
benutzt wird. Entweder den Quarz weg lassen oder die Fuses im Chip 
umstellen. Abgeglichen muss der Chip aber trotzdem, wenn der Quarz 
leicht von seiner Frequenz abweicht.
Im Programmcode in der Zeile:
1
"cbr   empInt, 0xc0    ;because clear bit 6 and 7, is used for minutes"
ist beim Formatieren das t verschwunden. Ich hatte die Tabs mit dem 
Windows-Editor angepasst. Es muss heißen:
1
"cbr   tempInt, 0xc0    ;because clear bit 6 and 7, is used for minutes"
sorry für den Schusseligkeitsfehler von mir.

Ein Foto von der Versuchsschaltung habe ich auch noch eingestellt. Da 
könnte man vielleicht gucken, wenn noch etwas unklar ist. Die Größe ist 
100mm x 120mm. Es ist eine einfache und gekürzte Europlatine.

Peter

von Bäcker (Gast)


Lesenswert?

Kann der Zähler auch vorwärts zählen?
Morgens muß ich meine Brötchen immer von Hand zählen; mit einem 
Back-Counter wäre das viel einfacher.

von P. Rebesky (Gast)


Lesenswert?

Hallo Herr / Frau Bäcker,

die Idee von ihnen ist realisierbar. Das ursprüngliche Anliegen war es 
für Sportwettkämpfe einen Timer zu schaffen, welcher nach vorgegebener 
und vergangener Zeit ein Signal gibt(lauter Piep). In einigen Hallen 
existiert sowas schon eingebaut, aber nicht überall. Als zweite Funktion 
ist in dem Programm ein Aufwärtszähler integriert, weil Volleyball nicht 
nach Zeit sondern nach Sätzen gespielt wird. Je nachdem, welche Sportart 
gerade veranstaltet wird, ist die Zeit oder Zählfunktion aktivierbar. 
Beides zusammen ist nur nach Schaltplanänderung mit zusätzlichen 
Anzeigen realisierbar.

Der Fall von Zählen einer Menge (z.B. Brötchen) ist leicht zu erstellen. 
Schaltplan wäre identisch, außer der Punkt, welcher aber auch im 
Programm entfernt werden kann. Ein Taster zählt einfach nur einen 
programmierten Zähler hoch, welcher bis 16 bit, aber wegen der 4 Digits 
nur bis 9999 gehen würde. Und beim Drücken zweier Tasten wieder auf Null 
gestellt wird. Das ist wichtig, wegen dem versehentlichen Drücken, und 
dann wäre der Zählerstand im Ar***. Programm ließe sich erstellen, aber 
nicht diese Woche, weil ich muss die große Version noch bis Sonnabend 
als Hardware fertig bekommen ;-) Im Kleinen geht's ja schon.

Gruß Peter

p.s. Über eine Lichtschranke (Sensor) oder sowas zählt der auch alleine 
ohne drücken von Tastern.

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.