Counter und Schrittmotor

Programm in #36 entsprechend #37 korrigiert: Takterkennung außerhalb der Schrittkette.

@MicroBahner: Danke!

TODO: Referenzfahrt, Zeiteinstellung, zweite Kellensteuerung.

Die Kellensteuerung könntest Du zunächst auch weglassen, indem Du vor die abzulesende Scheibe einen Rahmen setzt.

agmue:
Ja, danke für die nützliche Anschauung, wobei Stepper2 fehlt, oder?

Ja, genau die 2 'Hochklap-Stepper' sind auf dem Foto noch nicht verhanden, die kommen noch.

MicroBahner:
Gibt's da einen Stunden-Stepper? Davon habe ich bisher gar nichts gelesen. Und wenn, bräuchte man da doch auch einen Stepper für die Kelle, oder ist das da anders? Bei so vielen Steppern würde sich dann auch die Ansteuerung über SPI und Schieberegister anbieten.
Und wie ist eingentlich die Grundstellung geplant? Irgendwie müssen die beim Starten doch in die richtige Startstellung gebracht werden, die können ja irgendwo stehen.
Draht muss da wohl noch ein paar drahtige Fragen beantworten ;).

Was aber auf jeden Fall gilt: Die Auswertung der Taktflanken und das Zählen der Pulse muss außerhalb der Schrittkette gemacht werden. Sonst gehen während der Stepperbewegungen Pulse verloren.

Ok hier spricht der Drahtapfel: Also es ist so wie ihr in etwa vermutet habt. Ein Kreis ist für die Stunden und einer für 5 Minuten (übrigins ein Stepper mit 48 Stepps. ) funktioniert so also mit den 30 Grad (360/12)
Die anderen 2 Stepper (mit den etwa 4096) Stepps sind für das hochklappen der Kellen verantwortlich.
Ja, es wird dann auch noch ein Switch brauchen um die Uhr zu tunen, zB wenn sie nach hinten oder nach geht oder vor.

agmue:
Autsch, mit den Kellen zusammen braucht der Durchlauf tatsächlich länger als eine Sekunde, da ist unbedingt Nacharbeit notwendig :-[

Ja, die Sequenz dauert etwa 6 Sekunden.

@agmue vielen Dank für den Sketch ich muss den noch studieren um ihn zu verstehen - bin da nicht so schnell.
Nur zur Info: Es gibt bei der Uhr keine Minuten Schritte, sondern nur 5 Minutenschritte und Stundenschritte.

Draht:
Es gibt bei der Uhr keine Minuten Schritte, sondern nur 5 Minutenschritte und Stundenschritte.

Das hätte ich auch so berücksichtigt haben wollen, was führt Dich zur gegenteiligen Annahme?

Zum Testen habe ich die Zeit natürlich verkürzt.

agmue:
Das hätte ich auch so berücksichtigt haben wollen, was führt Dich zur gegenteiligen Annahme?

Zum Testen habe ich die Zeit natürlich verkürzt.

agmue:
Das hätte ich auch so berücksichtigt haben wollen, was führt Dich zur gegenteiligen Annahme?

Zum Testen habe ich die Zeit natürlich verkürzt.

Nichts wirklich. Wie gesagt ich bin den Sketch noch am studieren. Davor halt ich lieber die Klappe!

Eine Frage noch. Wenn ich den Sketch in betrieb nehme, dann läuft die Uhr sofort die ganze zeit ohne am pin4 Taktimpulse zu bekommen. Eigentlich ist da ja schon ein input pullup, muss ich den pin zusätzlich mit einem pullupwiderstand versehen. Oder warum läuft die ohne die Taktimpulse zu erhalten?

Draht:
Oder warum läuft die ohne die Taktimpulse zu erhalten?

Falscher Anfangswert für takte. Bei takte = 0 läuft die Schrittkette mit maximaler Geschwindigkeit, daher habe ich den Anfangswert geändert:

uint16_t takte = -1;           // keine automatische Bewegung

agmue:

uint16_t takte = -1;           // keine automatische Bewegung

Unsigned int, und dann ein negativer Wert?

MicroBahner:
Unsigned int, und dann ein negativer Wert?

Das sind Angewohnheiten von faulen Programmierern, denn -1 wird vom Kompiler in den größten möglichern Wert geändert, hier also 65535, den ich dann nicht selbst ermitteln muß. Ich habe es jetzt in uint16_t takte = 65535; geändert.

Zusammen mit den Referenzbewegungen und dem Stellen der Uhr muß man über diesen Punkt sowieso nochmal nachdenken. Ich würde den TO gerne zu DS3231 überreden, weil dann zusätzlich die aktuelle Zeit gepuffert und der externe Takt überflüssig wird. Mal sehen, ob der Künstler diesen Eingriff in seine Vorstellungen mitmacht.

agmue:
Das sind Angewohnheiten von faulen Programmierern, denn -1 wird vom Kompiler in den größten möglichern Wert geändert, hier also 65535, den ich dann nicht selbst ermitteln muß. Ich habe es jetzt in uint16_t takte = 65535; geändert.

Was spricht dagegen, takte einfach vorzeichenbehaftet zu belassen? Der Werteumfang ist ja auch dann noch mehr als ausreichend :wink:

Schön am Programmieren ist ja die damit zusammenhängende Kreativität, die nur aus der Vielfältigkeit der Möglichkeiten erwächst ;D

@agmue .......Das hast du aber schön gesagt.

TO....... Dad wäre ich?

Ja.
Auf Denglisch Thread Opener

Draht:
TO....... Dad wäre ich?

Ja, der das Thema angefangen hat. Es wabern hier mehrere Begriffe durch das Forum.

Ok, good to know. :wink:

Wenn Du unbedingt einen externen Takt verwenden möchtest, kannst Du das natürlich tun, allerdings vergißt Deine Uhr dann bei Stromausfall die Zeit.

Alternativ gibt es des Uhrenmodul DS3231, das Zeit und Datum gepuffert speichert und mit einer guten Genauigkeit läuft. Der Arduino holt sich die Zeit per Schnittstelle I2C (auch I2C oder IIC geschrieben). Beim UNO werden dazu die Pins A4 und A5 verwendet.

Du kannst ja mal darüber nachdenken.

@ agmue Das wäre schon auch noch eine gute Variante, mit dem DS3231. Vorallem für mein nächstes Projekt in der Pipline: Eine Akkorduhr mit 12 einzeln angesteuerten Motoren. Für dieses aktuelle Projekt versuch ichs erst mal mit dieser Version. Ab Sontag bin ich fann wieder zuhause und dann beginnt die Testphase. Dann tauchen sicher noch ein paar Fragen auf :wink: solong