Forum: Mikrocontroller und Digitale Elektronik Impulse zählen


von Pascal (Gast)


Lesenswert?

Hallo,

bin noch AVR Anfänger. Ich will von einem Reedkontakt Impulse (Hoch UND 
Runter - je nach Richtung des Motors) zählen, diese sollen anhand einer 
Tabelle ausgewertet werden und auf einem LCD die Stellgröße in Grad 
ausgegeben werden. Wie stelle ich soetwas an, vir allem, dass nach dem 
Aussschalten der Schaltung der Zählerstand erhalten bleibt.

Grüße Pascal

von Mike (Gast)


Lesenswert?

Zum Zählen nimmst Du die Timer/Counter, die Werte schreibst Du in den 
EEProm und liest sie nach dem Neustart wieder aus.

Gruß Mike

von Gerd (Gast)


Lesenswert?

Noch ein paar Fußangeln:
- Reedkontakte prellen, entweder per Hard- oder per Software entprellen!
- Grad riecht nach Fließkomma! Dürfte für einen Anfänger ein ziemliches 
Unterfangen sein.
- Tabelle hört sich aber ziemlich langweilig an. Ist der Zusammenhang 
zwischen der Zahl der Pulse und der Gradzahl nichtlinear?

von Pascal (Gast)


Lesenswert?

Hallo noch einmal,

vielen Dank für die beiden Antworten. Zu Gerd:
Ja, die Zahl der Impulse zur Gradzahl ist nicht linear. Es wird mit dem 
Schubmotor ein Antennensystem geschwenkt. Ich müsste also bei der 
Programmierung sagen, dass z.B. 100 Impulse 5 Grad sind, 200 Impulse 
aber z.B. schon 20 Grad usw.
Wie ist das mit Fließkommazahlen? Gib es C Compiler mit denen man da 
arbeiten kann oder können AVRs (Ich dachte da an 2313er oder so) gar 
keine FP Berechnungen machen?

Danke im vorraus!
Grüße Pascal

von Sebastian (Gast)


Lesenswert?

Der C-Compiler von Imagecraft kann z.B. mit float rechnen.

Es gibt aber ein Problem: Nach dem Einbinden von Float-Werten ist der 
Mikrocontroller zu ca. 1/3 voll. (zumindest der 2313).

Poste doch mal die Werte, die du umgerechnet haben möchtest! Das ganze 
geht ja vielleicht auch ohne Fließkomma.

Sebastian

von Gerd (Gast)


Lesenswert?

Mit linear hatte ich gemeint: y = a * x + b. Wenn dem so ist, dann geht 
es ziemlich einfach auch mit Integerzahlen und Multiplikation/Division 
derselben anstelle von Tabellen.

Ansonsten hätte ich folgenden Tip für den FP-Ersatz. Wenn Du z.B. den 
Wertebereich 0,00 bis 360,00 brauchst, dann nimmst Du ein Wort mit 16 
Bit (0..65535) und denkst Dir einfach die letzten beiden Dezimalziffern 
als Kommastellen. Das deckt 0,00 bis 655,35 ab. Ansonsten gehen dann 
Division und Multiplikation in Assembler ziemlich einfach (siehe z.B. 
http://www.avr-asm-tutorial.net/avr_de/rechnen/index.html).
Wenn es noch genauer sein muss, dann eben halt mit einer 24- oder 
32-Bit-Zahl.
Und wenn es so genau sein muss, dass es die Bank akzeptiert, musst Du in 
den sauren Apfel beißen und Packed BCD verwenden. Aber das ist dann 
schon höhere Assembler-Programmierkunst.
Nur wenn das alles nix hilft, weil es sehr große und sehr kleine Zahlen 
zu handeln gibt (z.B. 10**10 mal 10**-10), muss man in den FP-Apfel 
beißen. Mit den von Sebastian genannten Nebenfolgen.

MfG
Gerd

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.