Forum: Mikrocontroller und Digitale Elektronik BASCOM: Uhr und autarke Stoppuhr auf ATM128


von micha b (Gast)


Lesenswert?

Ich erzeuge mittels clock = soft usw. einen Sekundentakt aus dem
Prozessortakt.

Hat jemand ne Idee, wie ich zusätzlich eine autarke Stoppuhr
realisieren kann welche aber auch 1/100 Sekunden anzeigt?
Es reicht, wenn sie die 1/100 erst beim Stopp anzeigt (Display wird nur
sekündlich aktualisiert). Start und Stopp der Stoppuhr erfolgen mittels
Taster, und zwar NICHT Sekundensynchron.

Any Ideas?

Danke :-)

von TravelRec. (Gast)


Lesenswert?

Hardwaretimer des Mega128 benutzen und in Assembler programmieren
(sorry...)

von Peter D. (peda)


Lesenswert?

Mal in der Basic-Doku nachsehen, welchen Timer die Uhr belegt und dann
für die Stopuhr einfach einen der anderen Timer nehmen.

Dann lernt man auch gleich, wie man ne Uhr selber programmiert, ohne
die fertigen Black-Boxes von Basic.

Ein Blick ins Datenblatt bleibt einem freilich nicht erspart, will man
einen Timer benutzen.


Peter

von micha b (Gast)


Lesenswert?

Hab inzwischen 72 A4-Seiten Code in Bascom geschrieben.... möchte nicht
wirklich nochmals von vorne anfangen, deshalb die Frage unter dem Titel
BASCOM :-)

Für's nächste Projekt wird's auf jeden Fall eine "richtige"
Programmiersprache werden.... ,-)

von Rahul (Gast)


Lesenswert?

Baue dir mit einem Timer eine Zeitbasis (CTC-Modus, Interrupt alle
10ms). Per Taste startest du den Timer. In der ISR zählst du dann
Variablen hoch (und entprellst die Taste). Beim 2. Tastendruck hälst du
den Timer wieder an und liest alle Variablen aus.
Das sollte auch in Bascom realisierbar sein.
Um dann noch eine "normale" Uhr zu realsieren lässt man den Timer
konstant laufen. Bei Tastendruck wird das 1/100s-Inkremt von 0 auf 1
gesetzt und beim 2. Tastendruck wieder auf 0.
Damit könnte man sogar noch die (LED-)Anzeige steuern...

von Rahul (Gast)


Lesenswert?

>Für's nächste Projekt wird's auf jeden Fall eine "richtige"
>Programmiersprache werden.... ,-)

Für den Spruch habe ich mal richtig Mecker kassiert...

>Hab inzwischen 72 A4-Seiten Code in Bascom geschrieben....
Stand da noch nicht...

von TravelRec. (Gast)


Lesenswert?

>>Für's nächste Projekt wird's auf jeden Fall eine "richtige"
Programmiersprache werden.... ,-)

Ja, gute Idee - dann werden´s wahrscheinlich auch keine 72 A4-Seiten
Code...

von Peter D. (peda)


Lesenswert?

@TravelRec.,


Wozu Assembler ?

Ist Basic denn wirklich so grottenschlecht, daß es nicht mal einen
Interrupt alle wahnsinnig langen 160000 Zyklen (10ms at 16MHz) schafft
?


In den 10ms Interrupt kann man auch bequem die Tastenentprellung mit
reinpacken.


Peter

von Rahul (Gast)


Lesenswert?

>dann werden´s wahrscheinlich auch keine 72 A4-Seiten Code...

Das vielleicht schon, aber es wird weniger Opcode erzeugt...
(Haut sich mal selbst für "Lästern über BASCOM"...)

von Peter D. (peda)


Lesenswert?

@Rahul,

">dann werden´s wahrscheinlich auch keine 72 A4-Seiten Code...

Das vielleicht schon, aber es wird weniger Opcode erzeugt..."


Naja, unter C wird man doch eher modular programmieren, d.h. statt
ellenlangen Spaghetticode alles in einzelne Funktionen aufteilen, die
dann mehrmals aufgerufen werden.
Und das kann in der Tat auch die Source mächtig verkleinern.


Peter

von micha b (Gast)


Lesenswert?

Ach Jungs,

als Anfänger steigt man eben auf die "erstbeste" Programmiersprache
ein, vor allem wenn man sie schon von der Schule etwas kennt.

Ich finde es gut, die Grenzen der einzelnen Sprachen selbst zu
erfahren, und immer wieder an die Grenzen zu stoßen. Nur so lernt man
"auf Umwegen" zu denken, bzw. bekommt immer wieder neue
Herausforderungen gestellt.

Inzwischen bin ich an dem Punkt wo ich - würde ich nochmals anfangen -
mit Sicherheit C nehmen würde, allerdings steht das im Moment einfach
nicht zur Debatte.

@Rahul: "ich hab mal richtig Mecker bekommen"
Ich weiß, das war auch bei einer Frage von mir :-)
Sehe aber viele deiner Argument von damals ein. Aber wie gesagt, als
Anfänger tut's basic :-)

von Sebastian H. (sebastianh)


Lesenswert?

Hunderstel kannst du ganz locker in bascom mit software bauen. Habe
sowas schonmal gemacht. lief bei nem takt von 16mhz nach zehn minuten
nicht viel neben der zeit, zehntel daneben oder so. aber stoppuhr, wenn
du eh nur kurze perioden messen willst okay

von micha b (Gast)


Lesenswert?

@Sebastian: Neee, muß auch lange Zeiten messen können. Zudem wird
zeitgleich die "richtige" Uhr angezeigt, wäre peinlich wenn die über
10 Stunden auseinander laufen würden.
Also brauch ich im Grund (neuer Ansatz??) nur die 1/100 zählen lassen,
im Sekundentakt kann ich mich ja dann an die richtige Uhr anhängen...

Hmmm ... macht's das einfacher ?

von TravelRec. (Gast)


Lesenswert?

>>Wozu Assembler ?

Ist Basic denn wirklich so grottenschlecht, daß es nicht mal einen
Interrupt alle wahnsinnig langen 160000 Zyklen (10ms at 16MHz) schafft
?
In den 10ms Interrupt kann man auch bequem die Tastenentprellung mit
reinpacken.

@Peter Dannegger:

Nee, sag ich ja gar nicht, aber als "Programmiersprache" würde ich´s
trotzdem nicht bezeichnen. Das Baukastenprinzip eignet sich für "quick
& dirty"-Applikationen, aber weder lernt man viel dabei, noch hat man
die Hardware des Controllers direkt in der Hand. Ich denke, daß
Assembler zum Einsteigen in die Materie eigentlich die Sprache
schlechthin ist und man selbst bei anspruchsvollen Aufgaben immer
wieder darauf zurückgreifen kann. Somit kann man sich ein Grundwissen
erarbeiten, welches beim späteren Nutzen von Hochsprachen immer wieder
hilfreich ist und das kann Bascom eben nicht bieten. Ich gebe nur eine
Empfehlung (aus eigener Erfahrung), was der Kollege draus macht, ist
sein Ding.

von Peter D. (peda)


Lesenswert?

"Also brauch ich im Grund (neuer Ansatz??) nur die 1/100 zählen lassen,
im Sekundentakt kann ich mich ja dann an die richtige Uhr anhängen..."


Wenn Du ausgelacht werden willst, ja.

Überleg mal, der Sekundenwechsel hätte mit den 1/100 nichts zu tun,
z.B.:

0.00
...
0.50
1.51
...
1.99
1.00
...


Peter

von Karl heinz B. (kbucheg)


Lesenswert?

> Also brauch ich im Grund (neuer Ansatz??) nur die 1/100 zählen
> lassen, im Sekundentakt kann ich mich ja dann an die richtige Uhr
> anhängen...

Würde ich nicht machen.
Ich würde auf die eingebaute Uhr pfeifen und alles vom
1/100 s Takt abnehmen. Wenn schon falsch, soll alles gleich-
mäßig falsch gehen. Denn wie du richtig sagst: Wäre peinlich ...

von papa_of_t (Gast)


Lesenswert?

Das geht auch problemlos in Bascom - stell Dir einfach einen
Hardware-Timer auf genau 10ms (Config timer.. + ausmessen /
ausrechnen)

Für die Interrupt-Routine hast Du selbst bei 1MHz fast 10000 Clocks -
selbst wenn ein Bascom-Befehl 100 Clocks brauchen würde (was schon sehr
viel ist, einfache Befehle sind wesentlich schneller, und Assembler
kannst Du direkt mit einbauen falls nötig) reichte das für 100 Befehle
- und alles was Du in der Interrupt-Routine machen mußt, ist bis 100
zählen und bei 100 die Sekunden weiterzählen. Die Anzeige kannst Du
dann im Hauptprogramm realisieren.

von micha b (Gast)


Lesenswert?

Hmmmmm....

klingt alles einleuchtend...

Also fertige Routine raus und alles von Hand machen, dann ist der 1/100
natürlich auch kein Prob mehr...

habt ja recht, dachte nur (Thema "auf Umwegen denken") daß es da eine
Umweg-Abkürzung gibt.

Manchmal hat man ja Tomaten auf den Augen.

Das Ganze manuel per Timer zu machen hat ja noch weitere Vorteile...
ich kann die Gangdifferenz von 1 Sek pro Tag wieder rausrechnen :-)

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.