Willkommen in unserer Community

Werde Teil unserer Community und registriere dich jetzt kostenlos ...

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Assembler Frequenz Teiler (Custom)

Dieses Thema im Forum "Software" wurde erstellt von TommyB, 28. August 2017.

Schlagworte:
  1. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Hiho,

    hier mal ein Teil eines Projektes von mir.
    Es soll ein Frequenzteiler werden, aber nicht im ^2 Sinne (da könnte ich ja jeden Addierer aus der 74er Serie nehmen).

    Gegeben:
    Eingangsfrequenz: 18MHz
    Ausgangsfrequenzen:
    900hz, 9kHz, 90kHz, 900kHz, 18MHz
    1.8kHz, 18kHz, 180kHz, 8MHz

    18MHz kann ich direkt vom Oszillator abgreifen (da Teiler /1), der Rest lässt sich alles grade teilen, bis auf 8MHz (Teiler 2.25, blöd), da nehm ich denn n 2. Oszi für.
    upload_2017-8-28_18-53-39.png

    Die berechneten Werte sind die Taktzyklen.

    Edit: 9MHz wären auch noch ok. Wäre denn /2.

    Frage:
    Wie am Besten umsetzen? Ich brauche alle Frequenzen gleichzeitig.
    Also ich würde einen AVR mit mehreren Pins nehmen (einen großen Tiny oder kleinen Mega). Und dann 2 Quartz Oszillatoren, wie diesen hier.
    Dann NOPs? Counter? Hmmm...
     
  2. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.644
    Zustimmungen:
    36
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Moment mal...
    sollen das immer feste Frequenzen sein, oder willst Du irgendeine eingehende Frequenz auf deren Teilfrequenzen ... teilen?
     
  3. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Korrekt. Fast wie mit einem 74HC4040 den ich früher genutzt hatte. Quartz Oszi dran, dann von den einzelnen Pins weg. Aber mit ^2 Rechnung passt das hier nicht wirklich weil /10 benötigt wird. Daher eine Softwarelösung.
     
  4. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.644
    Zustimmungen:
    36
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Mit den 18MHz bist Du schon recht flott, da bleibt quasi nix zu rechnen/vergleichen/springen...
    Hmm...
    ok, den ein oder anderen Trick hätt ich noch auf Lager... bist Du auf irgend'n Controller festgelegt?
     
  5. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Nö, nicht wirklich. Einzige Limitierung: Muss vom AVR Dragon unterstützt werden. Oder irgendeiner programmiert mir die Chips und schickt sie mir zu (10 stk.) ^^
    Oder Alabel hat n passenden 74er im Hinterkopf :D

    Edit: Die 18MHz kann ich ja direkt vom Oszi abziehen, der ist ja auch CMOS/TTL. Beim Rest der oberen Frequenzen, da wirds haarig.
     
    #5 TommyB, 28. August 2017
    Zuletzt bearbeitet: 28. August 2017
  6. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Oops, hab ich erst jetzt gesehen. Nein, die Eingangsfrequenz ist fest und gleichzeitig die für den AVR. Ich brauch nur die Ausgangswerte. Klar, jetzt kann man an der Schaltung noch was ändern, aber wenn fertig ändert sich am Eingang nix.

    Also ein Frequenzteiler basierend auf der CPU Clock, nicht durch irgendein variables Eingangssignal.
     
  7. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.644
    Zustimmungen:
    36
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Also folgende (teils absurde) Ideen, die mir so durch den Kopf gingen:
    1. Du willst fünf Frequenzpaare, wo ein Partner je die Hälfte des anderen ist, und die die Paare je ein zehntel des vorherigen sind
    2. Die ersten 18MHz sind so dicht am Maximum des Controllertaktes, daß es keinen Sinn macht, den Controller mit 20MHz zu treiben
    3. Die 18Mhz können aus dem Oszillator verwendet werden (trivial)
    4. Wenn man die 18MHz auch auf den AC legt, könnte dieser mit 9MHz Triggern - bei ACs mit ACOutput-Pin (Tn441) könnte man den Ausgang zwar nutzen, aber da lägen die 18MHz an (außerdem kann der nur 16MHz)
    5. Man kann einen Timer so laufen lassen, daß er bei jedem Takt überläuft, und via OC-Match einen Pin toggelt (wären 9MHz)
    6. Man kann mit einem Timer mit zwei OC-Units auch ein zusammengehörendes Paar erledigen (außer dem 18 & 9-MHz), indem man ein Unit den Überlauf festlegt, und der zugehörige Pin da toggelt, und das andere Unit PWM fährt. Wenn man noch mehr solche Timer hat...
    7. Kleinere Frequenzen kannst Du in Software erschlagen, indem Du die Überlaufinterrupts eines schnelleren Taktes zählst, und dann Beine toggelst.
    8. Für die 9MHz 'n ganzen Timer mit zwei OC-Units zu verbraten ist mir irgendwie 'n Dorn im Auge - da muß sich doch irgendwelche Hardware zweckentfremden lassen... mir schwebt irgendwas mit USART oder SPI-Clock vor... mit UBRR=0 sollte die USCK mit habem CPU-Takt zappeln. Die Frage ist, ob man da schnell genug Bytes (9bit Betrieb?) ins UDR stopfen kann (insbes. bezüglich #7), und obs zwischen den Bytes Aussetzer gibt)
     
  8. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Absurd ist da doch nichts :)
    Hauptsache es führt zum Ziel. Wie genau ist ja egal, funktioniert es einmal muss ja auch nichts mehr geändert werden.
     
  9. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.644
    Zustimmungen:
    36
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Naja, die Sache mit dem Ausgang des Komperators oder dessen Interrupt(flag) war ein Holzweg. Ob sich die Clock von USART und/oder SPI jitterfrei und im Dauerbetrieb nutzen läßt, wäre auch nicht sicher. Grundsätzlich wäre der Mega48/88/... dann ein geeignetter Kandidat (den Du möglicherweise rumliegen hast): drei Timer mit je zwei OC-Units, USART, SPI, und nichts kommt sich in die Quere.
    Daß es für diesen konkreten Fall einen passenden IC gibt, halte ich für seeeeehr unwahrscheinlich.
    Aber es wird mehrere Wege geben, das aus diskreten Gattern (JK-FlipFlops ? ) diskret aufzubauen.
    Oder mehrere ICs mit entsprechenden Gattern zu koppeln.
    (*Kaffekoch, Bleistift&Papier such*)
     
  10. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Mir schwebte da auch ein Mega48/88/168 vor (ich glaube ich habe nur noch letzteren @home, lässt sich ja aber fix ändern). Allein weil der dann im Hintergrund auch die Spannung des Akkus überwachen kann, zwecks Tiefentladungsschutz. Vielleicht auch ein Tiny2313. Zusammen mit dem Tiny13 (hierfür unbrauchbar) sind das ja meine lieblings-Chips ;)

    Diskret... Das wär mal 'ne Aufgabe ^^ Aber ich habe nur begrenzten Platz. Der Akku muss noch mit rein und auch noch zig Mosfets und Linearregler für Spannung und Strom. Frequenz ist ja nur ein Teil des Gerätes.

    Prost Kaffee :)
     
  11. Mikro23

    Mikro23 Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    76
    Zustimmungen:
    7
    Ort:
    Großraum Hannover
    Sprachen:
    C#, Assembler
    Map
    Im 74hc390 hättest Du schon mal zwei unabhängige Decade Counter.
     
    TommyB gefällt das.
  12. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.644
    Zustimmungen:
    36
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Ich hätte jetzt versucht, das mit Schieberegistern anzugehen (ohne Latch, also zB HC164)...

    Der HC390 würde auf einem Ausgang halbieren, und auf einem anderen durch Zehn teilen, und das ganze zweimal.
    Allerdings hätte der zehner nicht mehr 1:2, sondern 1:4 Taktverhältnis.

    Ansonsten könntest Du mit zweien davon (4 Gates) einen Großteil Deiner Schaltung realisieren. lediglich für die letzten 900Hz bräuchtest Du noch einen halbierer. Oder einen dritten HC390, der dann auch noch 180Hz, 90Hz und 18Hz liefert.
    (Abgesehen davon hättest Du auch noch viertel und achtel der Eingangsfrequenzen (18, 1.8, 0.18, ...MHz verfügbar)
     
    #12 LotadaC, 29. August 2017
    Zuletzt bearbeitet: 29. August 2017
  13. Mikro23

    Mikro23 Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    76
    Zustimmungen:
    7
    Ort:
    Großraum Hannover
    Sprachen:
    C#, Assembler
    Map
    Dadurch, daß der Counter in zwei Teile geteilt ist, kannst Du ihn als bi-quinary verschalten und hast damit 1:1.
     
  14. Mikro23

    Mikro23 Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    76
    Zustimmungen:
    7
    Ort:
    Großraum Hannover
    Sprachen:
    C#, Assembler
    Map
    Hatte Tastverhältnis gelesen.

    Um das noch mal zu entwirren:

    Das Teilerverhältnis ist 1:2 und 1:5, macht zusammen 1:10.

    Das Tastverhältnis ist bei normaler Verschaltung 1:4, bei bi-quinary 1:1.
     
    TommyB gefällt das.
  15. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.644
    Zustimmungen:
    36
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Ahh...
    ok hatte ich falsch verstanden...
    der 390 besitz vier unabhängige Teiler. Zweie halbieren (Qa), zweie teilen je durch zwei (Qb), vier (Qc) und fünf (Qd).
    Das Signal an Qd ist 1:5
    Jeder Teiler mit eigenem Takteingang.

    Soweit korrekt?

    18MHz an ClockB1 liefert 9Mhz an Qb1 und 3.6MHz an Qd1 (1:5)
    Qd1 an ClockA1 liefert 1.8MHz an Qa1 (1:2)
    die lege ich an die nächste B-Clock usw, und komme mit zwei ICs bis 1.8kHz.
     
    #15 LotadaC, 29. August 2017
    Zuletzt bearbeitet: 29. August 2017
    TommyB gefällt das.
  16. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    966
    Zustimmungen:
    4
    Ort:
    Hannover
    Sprachen:
    C#
    Map
    Darf man fragen was es wird, wenn es fertig ist?
     
  17. Mikro23

    Mikro23 Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    76
    Zustimmungen:
    7
    Ort:
    Großraum Hannover
    Sprachen:
    C#, Assembler
    Map
    @LotadaC

    Genau so.
    Wenn 9 MHz statt 8 ok ist, reichen vier 390er.
     
    TommyB gefällt das.
  18. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Nö. :p

    Erfährste schon noch früh genug ;)
    Außerdem, du kennst das doch, du verrätst ja auch immer nur Fragmente :D

    Jo, sind sie :)
    Muss nur <10 sein und >5.
    Hatte erst etwas zu spät gemerkt dass 8 etwas dämlich war zum teilen.
     
    #18 TommyB, 29. August 2017
    Zuletzt bearbeitet: 29. August 2017
  19. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.644
    Zustimmungen:
    36
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    drei...
    wie gesagt, von 18MHz bis 1k8Hz kommste mit zweien - für die 900Hz brauchste dann'n dritten (oder was anderes).
    Der Dritte würde dann nebenbei auch noch 180, 90 18Hz abwerfen

    Hatte hier auf Seite 5 das "QA Connected to Clock B" überlesen...
     
    #19 LotadaC, 29. August 2017
    Zuletzt bearbeitet: 29. August 2017
    TommyB gefällt das.
  20. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.596
    Zustimmungen:
    42
    Ort:
    127.0.0.1 ;)
    Sprachen:
    C#, Assembler, LunaAVR, VB.Net, Python
    Schafft der denn noch 18MHz? Hatte da mal mit einem LS geringfügige Probleme ^^' 3 davon könnt ich unterbringen.
     

Diese Seite empfehlen

  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)