mikrocontroller.net

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


Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hardwaretimer des Mega128 benutzen und in Assembler programmieren
(sorry...)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.... ,-)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"...)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Sebastian Heyn (sebastianh)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: papa_of_t (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.