Denkanstoß für Propeller Uhr

Gast #1889800
Lesenswert?

Moin,

und zwar baue ich gerade eine Propeller Uhr.
Diese Funktioniert eigentlich schon einwandfrei. Einziges Problem, ich 
müsste die Drehzahl verdreifachen, was ich aber nicht möchte.
So Flackert sie eben.

Im Moment läuft das Programm wie folgt ab:

Zuerst wird die Zeit von einer Realtime Clock über I2C eingelesen

Dann wird mit einer Gabellichtschranke alle 360° ein Ext. Interuppt 
ausgelöst.
Zwischen zwei Interrupts wird die Zeit gemessen.
Nach dem zweiten Interrupt wird dieser abgeschaltet.
Nun wird der Timer auf 1/60 der Gemessenen Zeit eingestellt.
Jeder Timerinteruppt überprüft dann, ob der Jeweilige Zeiger an der 
entsprechenden Position ist.
Nachdem 360 Grad absolviert wurden, lass ich noch mal die Zeit einlesen 
(also zu diesem zeitpunkt wird nichts angezeigt!) und aktiviere wieder 
den externen Interrupt. Dieser misst dann wieder die Zeit, etc...

Das heißt ich habe effektiv jede 3te Umdrehung nur ein Bild.

Kann mir vllt jemand auf die Sprünge helfen, wie ich die Zeit während 
dem Anzeigen messen kann?
Gast #1889810
Lesenswert?

Hi,

wie wärs wenn du es mit einer Art hilfskonstruktion machst.
Du lösst mit dem timer interrupts aus. Sagen wir jede 1/10 millisekunde 
oder sowas.
Mit diesem Interrupt lässt du dann eine Variable Inkrementieren.
Immer wenn der externe interrupt ausgelösst wird wird der zählerstand 
zwischengespeichert und der zähler wieder auf null gesetzt.

mit diesen daten kannst du nun zum beispiel einen array mit anzahl von 
ticks berechnen. Immer wenn dann ein stand erreicht wird kannst du dann 
eine aktion ausführen.

Habs jetzt nur grob umrissen wie ich das machen würde.
hoffe es hilft dir vieleicht weiter.

Gruß
BlabLa
Gast #1889825
Lesenswert?

Die Idee ist nicht schlecht, allerdings gibt es folgendes Problem:
Ich benötige einen Timerinteruppt, damit meine Zeiger genau auf Position 
sind.Wenn ich den inkrementierenden Wert überprüfe, kann es auserdem 
passieren, dass ich schon dran vorbei "geflogen" bin, und dann zeigt er 
an der Stelle keinen Zeiger an. Da müsste ich dann "Bereiche" 
definieren, in welchen die Zeiger sind, und das dürft schwer zu 
realisieren sein.

Im Moment lass ich i inkrementieren (von 0 bis 59) und frage immer ab, 
ob die aktuelle Zeigerposition mit i übereinstimmt.
Gast #1889842
Lesenswert?

Habe ich mir auch schon gedacht, aber ich habe nur zwei 8 Bit Timer und 
einen 16 Bit.

Für ausreichend Genauigkeit reichen mir 265 nicht aus.
Da habe ich gerade mal eine ~(12/9)° Auflösung.
Zudem kommt dazu, dass ich nur in einem stark begrenzten Drehzahlbereich 
arbeiten kann.

Von daher kann ich nur einen 16 bit Timer nutzen.
Andere µC geht nicht, weil die Schaltung schon koplett aufgebaut ist.
Für das nächste mal nehme ich zwei µC ;)

Aber jetzt interessiert mich, wie andere das hinbekommen...
Gast #1889844
Lesenswert?

Wie wärs mit sowas

while(1){
 if(ticks >= fire){
  fire += 0,02*umlaufticks;
  leuchtsequenz();
 }
}
hab jetzt nur schnell hingetippelt, sind keine casts und 
variablendeklarationen dabei.
ich denke diese methode sollte noch genau genug für das anzeigen sein.

Gruß
BlabLa
Gast #1889850
Lesenswert?

>Für ausreichend Genauigkeit reichen mir 265 nicht aus.

Und? Dann nimm den 16 Bit Timer zum zählen einer Umdrehung und teil 
diesen Wert durch die Anzahl Spalten die Du haben möchtest bzw. die 
aufgrund der Abarbeitungszeit angezeigt werden können.
#1890708
Lesenswert?

@  Propeller Uhr (Gast)

>Habe ich mir auch schon gedacht, aber ich habe nur zwei 8 Bit Timer und
>einen 16 Bit.

Das mehr als genug.

>Von daher kann ich nur einen 16 bit Timer nutzen.

Genau so macht man das. 16 Bit laufen lassen, über externen Interrupt 
oder noch besser ICP die Drehzahl messen. Parallel dazu kann man per 
Output Compare dann die Ticks für die Datenausgabe erzeugen, sprich 
gemessene Periodendauer / Anzahl Spalten/U = Timertick.

>Andere µC geht nicht, weil die Schaltung schon koplett aufgebaut ist.
>Für das nächste mal nehme ich zwei µC ;)

Käse. Sowas macht EIN uC (AVR?) locker.

>Aber jetzt interessiert mich, wie andere das hinbekommen...

So wie oben beschrieben. Damit kann man pro Umdrehung ein Bild 
schreiben. Und der AVR hat noch viel Zeit nebenher.

MfG
Falk
Gast #1891878
Lesenswert?

Hallo Falk,

das mit dem ICP wusste ich nicht, dass dieses auch geht. Das ist 
natürlich perfekt. Ich habe das gleich ausprobiert und es funktioniert. 
Nur habe ich jetz das Problem, dass die zeit zwischen zwei 
Zeigerpositionen zu gering ist um die Uhrzeit per I2C einzulesen.
Ich lass ihn im Moment jede 6te Umdrehung einlesen. Daher flackert es 
jedes 6te mal. Die 8 Mhz reichen wohl doch nicht, muss wohl der 20 Mhz 
Quarz hin...

Wenn du dafür noch ne elegantere Lösung hättest als nen Quarz hinlöten, 
wär ich oberglücklich ;)
#1892043
Lesenswert?

@  Propeller Uhr (Gast)

>Nur habe ich jetz das Problem, dass die zeit zwischen zwei
>Zeigerpositionen zu gering ist um die Uhrzeit per I2C einzulesen.

Das ist auch totaler Unsinn. Du hast einen freilaufenden Timer, der ist 
als Zeitbasis sehr gut geeignet. D.h. du liest EINMAL am Programmstart 
deine Zeit aus der RTC und lässt dann im AVR deine Uhr laufen.

AVR - Die genaue Sekunde / RTC

>Ich lass ihn im Moment jede 6te Umdrehung einlesen. Daher flackert es
>jedes 6te mal. Die 8 Mhz reichen wohl doch nicht, muss wohl der 20 Mhz
>Quarz hin...

Vollkommen falscher Ansatz. Du brauchst nicht mehr PS sondern mehr 
Köpfchen!
Siehe Multitasking.
Deine Datenausgabe an die LEDs macht man per Timer-Interrupt, 
das Auslesen der RTC, wenn es denn überhaupt sinnvoll ist, einmal pro 
Sekunde in der Hauptscheife, da hat man alle Zeit der Welt.

MFG
Falk

P S. Ein AVR mit 8 MHz langweilt sich in einer Propelleruhr gewaltig. 
Warum? Mal rechnen.

Nehmen wir eine schon recht hohe Drehzahl von 25U/s = 25Hz. Pro 
Umdrehung wollen wir 512 Spalten erzeugen, das ist schon sehr viel.
-> 25*512 = 12,8 kHz Spaltenfrequenz.
-> 625 Takte/Spalte

D.h. ein 8 Bit Timer müsste schon mit Prescaler laufen, um das machen zu 
können, erst recht bei geringerer Drehzahl.

MFG
Falk
Gast #1893920
Lesenswert?

du kannst im Berufsbildungscenter Schweiz nachfragen. Dort haben 
Auszubildene eine Propelleruhr gebaut.

info@berufsbildungscenter.ch

Sie haben auch eine ausführliche Doku darüber geschrieben. Wenn du nett 
fragst bekommst du sie villeicht ;)
Gast #2140833
Lesenswert?

Also ich find sowas auch sehr interessant, gibt es die Uhr nicht als 
Bausatz zu kaufen??? Mich schreckt die olle Energieübertragung etwas ab 
(Ja Falk, ich weiß was ein Royer Converter ist und wie er funktioniert) 
aber der will ja auch erstmal gebaut werden.

Wir könnten ja auch n neues Projekt daraus machen?!
Wer hat Bock?


Gruß Knut

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren