Hallo zusammen,
nachdem mir hier das letzte mal so schnell geholfen wurde, hoffe ich
auch dieses mal auf Euren professionellen Input.
Ich bin nach wie vor dabei ein Steuerungstestgerät zu bauen und zu
programmieren. Das Ganze basiert auf einem PIC18F23K20 und ich
programmiere in C da mir offensichtlich die Gene fehlen, die für die
ASM-Programmierung nötig sind.
Nachdem inzwischen technisch alles zu funktionieren scheint, habe ich
jetzt eine eher mathematische Frage. Ich verwende ein lineares Trimmpoti
(10kOhm) an einem analogen Eingang und möchte in einem Programmschritt
eine Zeit zwischen 0 und 60 Sekunden einstellen können. Hier der Code:
1 | case start:
|
2 | initADC(); // AD-Wandler initialisieren
|
3 | SetChanADC(11); // Kanal einstellen, der für die
|
4 | // AD-Wandlung verwendet werden soll
|
5 | ConvertADC(); // Startet die Wandlung
|
6 | while (BusyADC()); // Warten, bis Wandlung beendet ist
|
7 | result = ReadADC(); // Auslesen des AD-Wertes
|
8 | CloseADC(); // AD-Wandler ausschalten
|
9 |
|
10 | // Wartezeit ganzzahlig berechnen:
|
11 |
|
12 | wartezeit=(int)(result/(1024/60));
|
13 |
|
14 | // ganzzahligen Rest der Division ermitteln:
|
15 |
|
16 | sekunden_einer=wartezeit%10;
|
17 |
|
18 | // Zehneranteil der Sekunden ermitteln:
|
19 |
|
20 | sekunden_zehner=((wartezeit-sekunden_einer)/10);
|
21 | break;
|
Die einer/zehner-Geschichte hängt mit der 4x7-Segment-Anzeige zusammen
auf der ich das ausgebe.
Jetzt habe ich das Problem, dass sich das Ganze alles andere als linear
verhält. Die kleinen Werte sind mit menschlicher Motorik kaum
einzustellen.
Gibt es eine bessere Möglichkeit die ADC-Ergebnisse in 60
Sekundenschritte einzuteilen?
Ich bin um jeden Tipp dankbar!
Hendrik