• 27.04.2024, 23:54
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

microcontroller + impulse zählen..

Mittwoch, 4. Februar 2004, 10:25

ich wollte demnächst mal was mit microcontrollern machen. ich werde mich da wohl noch einarbeiten müssen.

aber jedenfalls will ich einen impuls von einem taktgeber für eine spezielle uhr auf eine sehr "eigenwärtige" art und weise teilen, wie es sonst nur mit ziemlich vielen IC's möglich wäre, wenn ich das ohne microcontroller machen würde. es gibt für diese sache auch keine passenden teiler-ICs, weil ich halt wie gesagt ein sehr krummes verhältnis teilen will.

jetzt das, was ich machen will:
es gibt ein zeitsignal eines zeitgebers, was dem microcontroller über einen der input's zugeführt werden müßte.
dieses soll im microcontroller verarbeitet werden: nach jedem impuls dieses zeitsignals soll eine bestimmte verarbeitung im microcontroller durchgeführt werden, die auf jeden fall mehrere taktzyklen des microcontrollers belegen würde.

jetzt mein problem:
der microcontroller selbst arbeitet meinetwegen jetzt mit 4MHz als taktfrequenz, welche ihm außen auch schon sowieso über einen quarzoszilator zugeführt werden müßten.

das zeitsignal, was ich messen und speziell verarbeiten/umrechnen will, muß mindestens 10KHz betragen, es muß aber immer deutlich kleiner als diese 4MHz vom microcontroller takt selbst sein, damit der microcontroller nicht, wenn er dabei ist, seine takte durchzuarbeiten, einen der impulse vom zeitsignal übersieht. größer als 10KHz dürfter es auch sein. ich kann es ja im microcontroller mir passend herunterteilen.

problem jetzt:
der microcontroller hat ja schon nen eigenes quarz für seinen eigenen systemtakt.
dann müßte ja das quarz, aus dem das zeitsignal genommen wird, ja extra nochmal da sein.
..dann bräuchte ich zwei quarze:
eines für den microcontroller-takt selbst und einmal das, was ich messen will.
ist das überhaupt nötig? wieso zwei quarz-schaltungen auf die platine bauen, wenn es auch mit einer geht?

-->deshalb:
kann ich das zeitsignal, was ich von außen von einem quarz für meine messung zugeführt bräuchte, nicht im microcontroller aus dem systemtakt selbst gewinnen lassen? also so, daß ich dann das quarz, was der microcontroller für den systemtakt sowieso schon benötigt, auch gleichzeitig für zeitmessungen verwenden könnte?

..--> wenn es da gäbe, wäre aber noch das problem:
das zeitsignal, was ich aus dem systemeigenen takt-signal des microcontrollers zum messen dann gewonnen hätte, wäre genau so groß wie die taktfrequenz des microcontrollers selbst. d.h. ich könnte nach jedem "zeitimpuls" nur einen befehl vom microcontroller ausführen lassen. würde ich mehrere befehle nach einem "zeitimpuls" ausführen lassen, würde der microcontroller zwangsläufig mehrere "zeitimpulse" übersehen.

also frage kurzgefaßt:
wenn ich einen microcontroller habe, der mit einem systemtakt von 4 MHz arbeitet, kann ich dem dann sagen, daß er mir intern innendrin ein aus den 4MHz heraus gewonnenes 10KHz signal zur verfügung stellen soll, was ich dann für die verarbeitung im microcontroller nochmal selbst benutzen kann?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

hus

Senior Member

Re: microcontroller + impulse zählen..

Mittwoch, 4. Februar 2004, 12:32

1. Ich persönlich kenne nur 8051-kompatimle Controller. Bei denen ist es erst einmal so, daß ein "Prozessor-Takt" zwölf Zyklen des Oszillators dauert, bzw. bei neueren Designs z.B. sechs Zyklem. Somit ist die Quarz-Frequenz schon einmal durch diesen Faktor zu teilen. Bei üblichen Frequenzen bleiben da so 1-2 MHz übrig.

2. Wenn das Zeitsignal nicht unbedingt von außen kommt, ist es überhaupt kein Problem, es vom Prozessor erzeugen zu lassen, und das normalerweise sogar "in Hardware", d.h. über entsprechende Untereinheiten des Controllers, die die normale Befehlsausführung nicht belasten. Am einfachsten ist das, wenn die Zeitbasis ein ganzzahliger Teiler des Systemtaktes ist, das ist aber nicht unbedingt notwendig.
Das läuft somit quasi asynchron zum Programm, aber eine synchronisierung, z.B. über Interrupts, ist auch ganz einfach.

Bei einem Verhältnis von sagen wir 1MHz Systemtakt zu 10kHz Zeitsignal hast Du so ungefähr hundert Instruktionen für jeden Takt zur Verfügung, das sollte locker auch für etwas komplexere Aufgaben reichen.
Real stupidity beats artificial intelligence every time. T. Pratchett, "Hogfather"

Re: microcontroller + impulse zählen..

Mittwoch, 4. Februar 2004, 12:39

ah, das ist ja gut.

ich hab hier jetzt nochmal wo was gefunden. da stand was von timern, die man so einstellen könnte, daß sie in bestimmten abständen einen interupt auslösen können.

..ich glaube, soetwas in der art wird dann ja wohl das richtige sein..

..d.h., es geht auf jeden fall. wie es geht, ist ja eine andere sache. ich werd mir das ganze dann einfach mal angucken..
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: microcontroller + impulse zählen..

Mittwoch, 4. Februar 2004, 19:56

hi

vielleicht beschreibst du mal genau, was du machen willst, ich verstehe den sinn noch nicht ganz.
dann kann ich dir detaillierter weiterhelfen.

was für einen controller verwendest du denn?

also so gut wie jeder controller hat timer integriert, die sich programmieren lassen.
d.h. man kann den timer auf einen bestimmten wert einstellen, und nach ablauf wird ein interrupt ausgelöst
in der interrupt-service-routine kannst du dann deine verarbeitung machen.
C programmers never die. They are just cast into void. Neues moddingtech.de Portal online!

Re: microcontroller + impulse zählen..

Mittwoch, 4. Februar 2004, 20:00

Mit dem Timer von zB nem Atmel kannst Du eine definierte und sehr genaue Frequenzen erzeugen. Wenn Du mal ein paar Beispiele brauchst sag bescheid, dann schau ich mal in meinem schlauem AVR-Buch nach.


-RedHead

Re: microcontroller + impulse zählen..

Donnerstag, 5. Februar 2004, 09:10

ich wollte sehr warscheinlich einen der atmel avr controller benutzen. vermutlich einen möglichst kleinen nur 8-poligen, weil das ding echt nicht mehr machen muß, als ein ganz bestimmtes timer-signal für eine uhr zu erzeugen.

das kann ich aber wie gesagt nicht mit normalen teiler-ic's, weil das timer-signal um einen ganz bestimmten bruchteil länger bzw. kürzer sein muß, als es wäre, wenn man es standardmäßig mit normalen teiler-ICs aus einem quarz herausteilen würde.

das mit der timer routine wäre interessant. aber ich werde dann wohl später nochmal fragen, wenn ich mich da eingelesen habe, und alles startklar habe. jetzt ist das noch zu früh. jetzt weiß ich zu dem thema noch zu wenig.
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

powerslide

unregistriert

Re: microcontroller + impulse zählen..

Donnerstag, 5. Februar 2004, 11:30

hmm.. ich würde vor alem sagen.. es gibt massig µ-controller mit integriertem oszi ..

also fällt einer weg.. und ne zählschleife für impule an nem i/o-beinchen is ja auch kein problem..

wichtig ist.. nimm nen controller mit nem flash rom ..

evtl sogar mit in-circuit-flash bla bla technik.. d.h. du hast evtl 2 pins .. da schliest dein "schreibgerät" dran an und kannst den controller neu programmieren..

und .. die programmierkarten für controller.. für die meisten gibts die schaltpläne im netz..
aber aufpassen.. das sind nur ne handvoll an transistoren.. wenns mehr is.. dann sind evtl irgendwelche debbuggingroutinen mit vorgesehen die dein controller eh nicht benutzen kann

slide

Re: microcontroller + impulse zählen..

Donnerstag, 5. Februar 2004, 11:44

..ne warte mal, ganz egal ist das nicht.

die frequenz, die das ding haben muß, ist so niedrig, daß es für sowelche niedrigen freqenzen gar keine quarze mehr gibt.

d.h., wenn ich das niedrigste quarz kaufen würde, was möglich ist, müßte ich immer noch den microcontroller um das ca 15fache höher laufen lassen.

das 15fache höher als das niedrigste quarz wäre aber immer noch viel niedriger als die "eingebauten" 4 MHz.

also müßte ich einen zweiten osci außen anbringen um, die frequenz auf das nur 15fache höher zu legen, als das andere quarz ist.

ich kann natürlich auch den internen osci für die takt-frequenz benutzen, welche aber vielleicht dann 10-500 mal höher wäre.

..eigentlich ist das egal..
nicht aber, wenn das gerät batteriebetrieben werden soll.
es kann sein, daß ich durch eine niedrigere taktfrequenz da noch einiges an strom sparen könnte und die batterie dann wesentlich seltener ausgewechselt werden müßte.

d.h., wenn das geht, was ihr sagt (oder es soll ja ziemlich sicher funktionieren), kann ich z.B. das fast niedrigste quarz verwenden, was es zu kaufen gibt (vielleicht irgendwas zwischen 10-100KHz nur) und diese wiederum nochmal um den faktor 15 kleiner machen.

..so kann ich das ganze dann mit einem wesentlich niedrigeren systemtakt laufen lassen, was zu einem niedrigeren stromverbrauch führen müßte und brauche trotzdem nur ein quarz.



update:
-------

kann ich eventuell den internen oszi bei einigen controlern eigentlich auf eine niedrigere frequenz stellen oder ist der interne oszi immer auf einer fest vorgesehenen frequenz?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: microcontroller + impulse zählen..

Donnerstag, 5. Februar 2004, 23:15

normalerweise kann man den internen takt noch runterteilen.
am besten mal datenblätter ansehen ;)
C programmers never die. They are just cast into void. Neues moddingtech.de Portal online!

Re: microcontroller + impulse zählen..

Freitag, 6. Februar 2004, 06:44

ah ok, danke. werde ich dann berücksichtigen, wenn ich weiß, daß das geht. :)

und da war noch was:
bei einigen controllern soll es einen stromspar/idle-modus geben.

weiß jemand was der zu bedeuten hat? und ob es auch möglich ist den wärend des normalen betriebs zu benutzen oder ob der nur für bestimmte operations-lose stadien gilt?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: microcontroller + impulse zählen..

Freitag, 6. Februar 2004, 08:35

Du kannst manche Atmels per Befehl in den "SleepMode" versetzen. Ein externer Reset oder ein Interrupt weckt den dann wieder auf. Bei einem Interrupt setzt der Controller den auf den SLEEP Befehl kommenden Befehl fort. Bei RESET beginnt der Programmablauf wieder bei $000.


-RedHead

Re: microcontroller + impulse zählen..

Sonntag, 8. Februar 2004, 23:35

Hallo,
bei JEDEM µController mit timer kannst du den Timer über einen IRQ laufen lassen, wenn du also 8 Mhz Quarzfrequenz hast, und mit 8mhz zählst bekommst du bei jedem überlauf des Timer registers einen IRQ, also einen Sprung in deine IRQ Routine --> das wäre dann zb. 31,25Khz.
wenn man jetzt noch die Timer Compare register und Timer Value Register in jedem IRQ manipuliert kann man nahezu jede belibige frequenz sehr genau einstellen OHNE rechenzeit zu verschwenden.
Den internen Osszilator der Controller bei den Atmels zb 1Mhz würde ich nicht verwenden, diese sind sehr ungenau, ein richtiger quarz hat kaum messebare abweichungen.

Sebastian