Sign in Join
Wiki copytemporary

AVR Embedded Tutorial - Int to digits/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: AVR Embedded Tutorial - Int to digits/de

OldNewLine
1+# Ausgabe auf Digits (7 Segmentanzeige)
2+
3+Will man einen Integer auf eine 7-Segmentanzeige ausgeben, macht man das am besten mit der Procedure welche weiter unten beschrieben ist. Dies sieht aufwändiger aus, als mit **div** und **mode**, ist aber viel schneller, da die AVR keine Hardware-Division können. Die AVR müssen dies sehr aufwändig mit machen und dies braucht sehr viel Zeit.
4+
5+## 4-Stellige Ausgabe auf eine 7-Segmentanzeige
6+
7+### Deklaration der Variablen
8+
9+``` pascal
10+var
11+ Digit : array[0..3] of byte; // Werte der einzelnen Digits
12+ MyValue: Integer; // Einen Integer der Ausgegeben werden soll.
13+```
14+
15+### Auf dem PC
16+
17+Auf dem PC würde man die einzelnen Digits so berechnen. Bei einen ATtiny wird dies nicht einmal kompiliert, da er keine Division kann. Mann könnte dies Softwaremässig machen, aber dies braucht seht viel Zeit.
18+
19+``` pascal
20+Digit[0] := MyValue div 1000;
21+Digit[1] := MyValue div 100 mod 10;
22+Digit[2] := MyValue div 10 mod 10;
23+Digit[3] := MyValue mod 10;
24+```
25+
26+### Auf dem AVR
27+
28+Da aber der ATmega keine Division kann und der ATtiny nicht mal Multiplikationen kennt, muss man dies folgendermassen berechnen.
29+
30+``` pascal
31+ procedure IntToDigit(val: UInt16);
32+ var
33+ achr: byte;
34+ leer: boolean;
35+ begin
36+
37+ // Tausender
38+ achr := 0;
39+ leer := True;
40+ while (val >= 1000) do begin
41+ Dec(val, 1000);
42+ Inc(achr);
43+ leer := False;
44+ end;
45+ if leer then begin
46+ achr := 16;
47+ end;
48+ Digit[0] := achr;
49+
50+ // Hunderter
51+ achr := 0;
52+ while (val >= 100) do begin
53+ Dec(val, 100);
54+ Inc(achr);
55+ leer := False;
56+ end;
57+ if leer then begin
58+ achr := 16;
59+ end;
60+ Digit[1] := achr;
61+
62+ // Zehner
63+ achr := 0;
64+ while (val >= 10) do begin
65+ Dec(val, 10);
66+ Inc(achr);
67+ leer := False;
68+ end;
69+ if leer then begin
70+ achr := 16;
71+ end;
72+ Digit[2] := achr;
73+
74+ // Einer
75+ achr := 0;
76+ while (val >= 1) do begin
77+ Dec(val);
78+ Inc(achr);
79+ end;
80+ Digit[3] := achr;
81+ end;
82+```
83+
84+### Hexadezimale Ausgabe
85+
86+Will man eine Hexadezimale Ausgabe, kann man die so machen, da nur Shift und And Operationen gebraucht werden, in dies kann der AVR sehr schnell bewerkstelligen.
87+
88+``` pascal
89+Digit[0] := MyValue shr 12;
90+Digit[1] := MyValue shr 8 and %1111;
91+Digit[2] := MyValue shr 4 and %1111;
92+Digit[3] := MyValue and %1111;
93+```
94+
95+### Aufruf
96+
97+Mit **IntToDigit** wird an **Digit\[\]** Werte zugeordnet, welche dann zB. auf eine 7-Segmentanzeige ausgegeben werden können.
98+
99+``` pascal
100+MyValue := 1234; // Ein Wert zuweisen.
101+IntToDigit(MyValue); // Die Digits-Array bekommt Werte.
102+```
103+
104+### Ausgabe
105+
106+Zur Ausgabe an eine 7-Segmentanzeige, eignet sich folgendes, da man keine 32 Pins des AVR opfern will, wen überhaupt vorhanden.
107+
108+- Über 4 Schieberegister
109+- Multiplex, dafür werden 12 Pins gebaucht, wen man den Dezimalpunkt auch anschliesst.
110+- Schieberegister und Multiplex.
111+
112+Siehe auch:
113+
114+- [[AVR Embedded Tutorial - Multiplex/de|Multiplex]] - Multiplex anhand einer 4-fach Siebensegmentanzeige.
115+- [[AVR Embedded Tutorial - Shiftregister/de|Schieberegister]] - Wie steuere ich Schieberegister an.
116+
117+# Siehe auch
118+
119+- Übersichtseite [[AVR Embedded Tutorial/de|AVR Embedded Tutorial]]
120+
121+Autor: Mathias
122+
123+---
124+*From the Free Pascal wiki, page "AVR Embedded Tutorial - Int to digits/de", as it stood on 2020-01-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
125+Category: AVR/de
126+Category: Arduino/de
127+Category: Deutsch
128+Category: Embedded/de
129+Category: Tutorials/de

Back to history