Forum: Compiler & IDEs Signale-Zählen, LCD, Stellmotor und mehr HILFE


von Philipp (philipp_s19)


Lesenswert?

Hey Leute,

folgende Situation:

µC: ATMega8
1x LCD 2x16 mit Hintergrundbeleuchtung
1x Stellmotor (leider Analog, aber für Endeinsatz wird dann ein 
Digitaler gekauft)
1x eine Art Signalgeber (Kurbelwelle von motor wurde so verändert, das 
jede viertel umdrehung ein Kontakt geschlossen wird, variable spannung 
(also demnach wird dort Vcc anliegen)

Meine Aufgabe hier ist die folgende:

Durch die Signale der Kurbelwelle die Drehzahl berechnen, wenn Drehzahl 
unterhalb/oberhalt von eingestellten Richtwert => Stellmotor betätigen 
(je nachdem mehr oder weniger gaß geben am motor ...) und dazu noch das 
ganze auf einem LCD ausgeben. Dazu gibt es 3 Taster:

Taster1: LCD-Modi-Umschalter (1: Aktuelle Drehzahl anzeigen; 2: 
Richtwert einstellen (via Taster2 und Taster3); 3: Betriebsinfos: 
Laufzeit etc ...

Taster2 u. Taster3; Je nachdem, welcher LCD-Modus gewählt ist

Klingt eigentlich gar nicht sooo schwer, nur es fehlt an grundlage der 
µC Programmierung (also nicht an C selbst etc, ehr *wie zähle ich besser 
die Signale, via Timer oder Externen Interrupt* und solche sachen)

Oben stand auch schon gleich meine erste Frage:

Wie zähle ich besser die Signale: via Timer oder Externen Interrupt
Ich dachte mir, eine möglichkeit wäre ja einen 8bit Timer zu nehmen, als 
Clock-Source dann die Signale der Kurbelwelle an T0 und via 
Compare-Match alle 4 Clocks dann den Interrupt auszulösen, der eine 
variable Umdrehungen inkrementiert.
Aber es würde doch bestimmt auch mit einem Externen Interrupt 
funktionieren, dann würde ich mir einen Timer sparen und könnte vllt 
auch einen ATTiny2313 benutzen (Weil dann wär 1Timer zum Zählen von 
Sekunden und der andere für den Stellmotor)

Und dann gibts es ja noch einen sog. ICP-Pin, mit dem könnte man soetwas 
doch auch bewergstelligen, oder liege ich da falsch?

Wie man sieht, eher eine Design-Frage, aber ich möchte bestmöglich den 
µC nutzen.

Zum zweiten hab ich ein Problem mit den Tastern. Ich habe ja 3 Stück 
davon, aber es gibt ja nur 2 Inputs für Externe-Interrupts. Wie 
bewergesllige ich, das ich die Taster auslesen kann, wenn möglich 
Interrupt-basierend? (Die Change-Interrupts sind da wohl eher nicht 
geeignet, weil diese ja in beiden fällen "feuern" 0->1 und 1->0)

Fragen über Fragen =)

Hoffe mir kann jemand Helfen.

Gruß

von Karl H. (kbuchegg)


Lesenswert?

Philipp Sommer schrieb:


> Wie zähle ich besser die Signale:

gar nicht.
Am einfachsten misst du die Zeit zwischen den Pulsen.
Das ist im Prinzip eine Frequenzmessung und dafür gibt es zig Threads 
hier im Forum.

> Und dann gibts es ja noch einen sog. ICP-Pin, mit dem könnte man soetwas
> doch auch bewergstelligen, oder liege ich da falsch?

Nein, du liegst nicht falsch.
ICP bedeutet Input Capture. Und das ist genau das Feature deines Timers, 
mit dem man am einfachsten eine Frequenzmessung macht.

>
> Wie man sieht, eher eine Design-Frage, aber ich möchte bestmöglich den
> µC nutzen.

Sammle erst mal Erfahrung, ehe du nach 'der Besten' Lösung suchst. Die 
fällt nämlich nicht vom Himmel, sondern die muss man sich erarbeiten. 
Wir können dir hier viel erzählen, aber solange du die verschiedenen 
Verfahren nicht ausprobiet und ihre Vor und Nachteile miteinander 
verglichen hast, wirst du nicht verstehen, warum in manchen Situationen 
ein Verfahren schlechter als andere ist, während es in anderen 
Situationen besser ist.

>
> Zum zweiten hab ich ein Problem mit den Tastern. Ich habe ja 3 Stück
> davon, aber es gibt ja nur 2 Inputs für Externe-Interrupts.

Für Taster braucht man keine externen Interrupts. Dein µC ist so 
schnell, dass du dich aus seiner Sicht in extremer Zeitlupe bewegst. 
Selbst wenn du es schaffen würdest, eine Taste innerhalb von 5 
Hunderstel Sekunden zu drücken und wieder loszulassen, entlockt das 
einem µC nur ein müdes Gähnen. In der Zeit zwischen Drücken und 
Loslassen löst der zwischendurch noch 'ein paar teuflisch schwierige 
quadratische Gleichungen' (tm Douglas Adams). Kein Grund für einen 
externen Interrupt. Alle paar Millisekunden nachsehen, ob eine Taste 
gedrückt ist oder nicht reicht völlig aus.

Entprellung - ganz unten die C-Routinen

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.