mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Welcher Baustein für Frequenzteiler?


Autor: Werner A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe von einem Motor Hallsignale, die über einen gegebenen
Verfahrweg 5000 - 8000 Impulse (je nach Getriebestufe) mit einem
Puls/Pausenverhältnis von 50:50 abgeben. Eine gegebene
Controllerschaltung kommt aber nur mit max. 300 Impulsen zurecht.
Ich hab mir nun überlegt einfach nen Frequenzteiler ala 4017
davorzusetzten. Wenn ich das Datenblatt richtig verstanden habe, habe
ich aber jetzt keine Signalverhältnis von 50:50, richtig?
Weiss jemand ne sinnvolle Lösung um nen Frequenzteiler mit 16:1 - 26:1
mit 50:50 zu realisieren? Ich brauche nachher nur eine Getriebestufe
und somit muss das ganze natürlich nicht variabel einstellbar sein...

Werner

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu den Dekaden-Counter.
Ein stink normaler 4-Bit Counter passt doch
perfekt. 4516, 4520 oder so was in der Richtung.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aeh.
Mit einem Baustein kannst du nur maximal bis zu
einem Teiler von 8 kommen. Aber man kann die kaskadieren
und dann ist /16 /32 /64 /128 auch noch drinn.
Je nachdem wie du vom Pin abgreifst könnte man das
dann auch ganz leicht umschaltbar machen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ könnte man natürlich auch einen
kleinen Tiny nehmen. Vorteil: Ein 8 Pinner auf
der Platine und du kannst das Teilverhältnis auch
noch programmieren, bist also nicht auf 2-er Potenzen
angewiesen.

Autor: Werner A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, ich glaub ich muss morgen mal nen bischen programmieren üben...
Danke Karl Heinz

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
8000/300 = 26,66.... also z.B. 32 = 2^5.

also ein Teiler durch 32 bietet sich da an.

Mir fällt da spontan der 4060 bzw. 74HC4060 ein, der ist gängig, hat
Teilungsverhältnis 16, 32, 64 und einige andere, und macht ein paar
MHz.

Wenn es eleganter sein soll: Der uralte aber elegante
Peripheriebaustein Intel 82x54 bietet ein paralleles µC-Interface und
programmierbare sehr flexible 16 Bit Timer und Teiler auch mit externem
Clock-Eingang.

Gruß

Dietmar

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> habe ich aber jetzt keine Signalverhältnis von 50:50,

Warum denn nicht? Da die Binärzähler flankengetriggert sind, hast Du,
solange die Frequenz des Eingangssignals konstant ist, nach wie vor ein
Puls/Pausen-Verhältnis von 1:1 (oder eben fiftyfifty...).

Ich hätte jetzt übrigens spontan auch an den 4060 gedacht...

Autor: Werner A. (homebrew)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@johnny.m
ich hatte das so verstanden, daß das high byte durchgeschoben wird und
jeweils nur 1 ausgang aktiv ist. der gewünschte wird dann
rückgekoppelt.
ist aber jetzt auch egal ;-)

@all
ich habe das ganze jetzt mal mit ne 2343 im avrstudio programmiert und
simuliert. im avrstudio scheint alles zu funktionieren. könntet ihr mal
drüberschauen was es da vielleicht noch zu verbessern gibt?
Zweite Frage, wenn ich nen größeren AVR nehme mit 2 ext. Interrupts,
könnte ich dann direkt 2 Signale damit teilen?

Danke
  Werner

Autor: Werner A. (homebrew)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, einen Fehler noch gefunden...
Anbei der Code für 2 Sensoren an nem AT902313 (hatte ich hier gerade
noch rumfliegen)
Wer noch was zu verbessern weiss, gerne melden ;-)

Werner

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier
>
>  if (counterA > halfdivide)
>  {
>    Set_Bit(PB2);
>  }

würde ich umformulieren zu

   if( counterA == halfdivide )
     Set_Bit(PB2);

Der Grund ist simpel:
Während der Counter von halfdivide bis zum Endwert hochzählt,
ist es nicht notwendig des PB2 jedesmal neu zu setzen (schadet
allerdings auch nichts, verbraucht nur ein bischen mehr Zeit).
Eimal setzen reicht. Wenn der counter dann den Endwert erreicht

   if( counter > Div_Factor )

wir der wieder auf 1 gesetzt (warum eigentlich 1 und nicht 0?)
und der PB2 wieder gelöscht. Counter beginnt dann wieder von
vorne zu zählen, bis halfdivide erreicht wird und PB2 wieder
gesetzt wird.

Autor: Werner A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, leuchtet ein. Das ich mit 1 anfange hat machte mir das denken ein
wenig leichter ;-) da ich nicht immer -1 rechnen muss

Danke für die Unterstützung
  Werner

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.