Forum: Mikrocontroller und Digitale Elektronik 1 sek


von tus (Gast)


Lesenswert?

Da ich von Countern noch nicht wirklich ahung habe und dies wohl noch
etwas dauern wird habe ich die frage wie ich einfach jede sek in ein
register schreibe. Meine idee, auch wenn wohl recht primitiv und
umständlich:

Angenommen ich habe 4 mhz : Kann ich dann 1:4 Mhz rechen, so weiß ich
wie lange ein zyklus dauert, dann addiere ich alle befehle zusammen (
die dauer der zyklen kennt man ja ) und verbrate die restlichen zyklen
bis an die grenze zur sekunde mit ner nop schleife.

Wäre das mögl? muß ich auf irgendetwas bestimmtes achten ?

thx

von Sebastian (Gast)


Lesenswert?

Hm,

also möglich ist das schon. Wenn man allerdings annimt jeder befehl
dauert 2 takte, dann brauch man für das Programm 2Mio befehle -> 2Mio.
Byte, bedeutet ziemlich viel Speicherverschwendung.
Welchen uC verwendest du?

von Jens Renner (Gast)


Lesenswert?

Naja, eine Schleife würde es auch tun.
Ist halt nicht elegant, und vor allem musst Du bedenken, dass der
danach auszuführende Programmteil auch Zeit benötigt. Und wird der
geändert, muss auch die Schleife angepasst werden.

Also doch besser einen Timer verwenden.

von tus (Gast)


Lesenswert?

ja danke, mich hat nur interessiert ob es in der Theorie funktioniert.
Ich mach bis jetzt alles nur am rechner in der regel mim Atmega8.

Bei den TImern blicke ich nicht wirklich durch zuviele, zu
undurchsichtig und soviel esynonyme , hat evtl. jemmand nen exkurs oder
irgend nen trick auf lager ! ? Grüße

von Kai Schilling (Gast)


Lesenswert?

Am bestem greifst Du Dir nen passenden Quarz z.B 7,3728 MHz sind gut
geeignet. Dann benutzt Du die Timer-Baugruppe im MC z.B 8-bit.
Möglich wäre folgende Cfg: CK/1024 einstellen (TCCR0 = 0x05),Int.
einstellen --> so wird alle 7,3728 / 1024 = 1/7200 s ein Int.
ausgelöst,
---> Verzweigung aus der Int.-Table in eine kleine Rountine ( Timer
 macht ja im Hintergrund weiter).... da einfach z.B über "DEC" den
Teilerfaktor erniedrigen ( 7200/72 = hundertstel sec. ), dann einfach
den "Nulldurchgang registrieren ,rücksetzen und ein anderes Register
z.B von 100 runterzählen. Voilá... 1s  !
Code kann ich für div. AT90XXXX gerne reinsetzen ... aber mit hilfe des
Tuturials dürfte das kein Prob. sein.

Falls du eine Lösung via Gatter realisieren möchtest nimmst du am
besten einen Quarz aus einer Uhr ca. 32,xxx kHz ,das ganze funktioniert
dann via Teiler , evtl. Komperatoren , Schiebereg. etc. äquivalent
Dann könntest du auch den Takt an einen Pin des MC legen.
Auch ein direkt angeschlossener Uhrenquarz z.B an T0,T1 (Pin1/Pin2 am
90S8515 )ist ne super einfache Lösung.

Alle Rechtschreibfehler sind rechtlich geschützt.


Also viel Erfolg

MfG Kai

von Kai Schilling (Gast)


Lesenswert?

Der wohl beste Exkurs: Datenblatt deiner MCU .

Falls Du lieber eine deutsche Übersetzung zur Hand nimmst ,schau Dir
mal das AVR-RISC Mikrocontroller Buch vom W. Trampert an , ist quasi
die Übersetzung.Außerdem findest Du im Forum ziemlich viele nützliche
Treads
 und Code.
Falls Du Probleme mit den Timerbaugruppen , deren Registern oder
Ähnlichem hast , einfach mal das Datenblatt konsultieren oder frag
jemanden der für Dich nachliest.
Wenn Du auf dem Mega8 codest hilft Dir das Sheet ATMega8.pdf (gibts
nat. auf der Atmel Seite ) bei den Register und Flag-Bezeichnungen
weiter.Außerdem hat Atmel einige Standartapp´s wie z.B auch die Nutzung
Timergruppen in einigen hilfreichen Beispielapplicationen anschaulich

erläutert (ebenfalls auf obeniger page zu finden).Diese brauchen dann
nur noch angepasst werden oder dienen als Ideenpool falls die MCU oder
man selber mal irgenwo "hängt".

MfG Kai

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.