www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Impulse zählen


Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.