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
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
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?
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.