POT

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen finden sich unter POT (Begriffsklärung).
POT
Format: a = POT(<n>)
Parameter
n: 0 oder >0
Einordnung
Typ: numerische Funktion
Kontext: Peripheriekontrolle
Aufgabe: ermittelt den Zustand eines Potentiometers (Paddle)
Abkürzung: keine
Verwandte Befehle
JOY - PENX - PENY


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort POT.

Typ: numerische Funktion
Syntax: a = POT(<n>)
oder:   PRINT POT(<n>)

POT eröffnet dem Programmierer die Möglichkeit, analoge Werte in digitale umzuwandeln, wobei der C64 nicht Spannungen, sondern Widerstandswerte erwartet. Diese Widerstände, am besten regelbare in Form von Potentiometern (Paddles) von z.B. 500 kOhm, kann man über die beiden Controlports mit dem Rechner verbinden. Jeder Port bietet Anschlüsse für zwei Potis (jeweils Pins 5 und 9 der Ports), deren Informationen zwei Analog-Digital-Wandlern im C64 (genauer: im Soundchip SID des C64) zugeführt werden. (Pin7 stellt jeweils die erforderliche Spannung von +5V zur Verfügung.)

Simons' Basic verzichtet auf die Option, ein zweites Paddlepaar an Port 2 abzufragen, und gibt mit POT nur die Defaulteinstellung frei (Paddles/Potentiometer an Port 1). Mit ein paar POKEs könnte auch das zweite Paddlepaar erfasst werden, dazu müsste man CIA 1 ($DC00 und $DC02, Bits 7 und 6) manipulieren.

Ein Wert von 0 in der Klammer von POT liest den Wert der Speicherstelle POTX ($D419) aus, ein Wert von 1 (oder größer) selektiert POTY ($D41A).

Beispiel Motorsteuerung (Positionsregelung per Poti): 

1000 LOOP
1010   PRINT AT(1,16)"Sollwert der Drehung: ";
1020   FETCH "0123456789",3,soll
1030   EXIT IF soll>max 
1040   EXIT IF soll<min 
1050   LOOP
1060     y=POT(1)
1065     EXIT IF soll=y
1070     IF soll<y THEN bit=0
1080     IF soll>y THEN bit=1
1090     aus=aus OR b(bit)
1095     POKE $DD01,aus
1100     y$=RIGHT$("   "+STR$(y),3)
1110     PRINT AT(1,18)"Istwert der Drehung: ";y$
1120     aus=aus AND c(bit)
1130     POKE $DD01,aus
1140   END LOOP
1150   PRINT AT(1,16) DUP(" ",26)
1160 END LOOP

Kommentar: Hier wird mit den Potis ein Roboterarm, der über den Userport ($DD01) mit dem
C64 verbunden ist, in eine gewünschte Richtung bewegt (Zeilen 1050-1140).

Der Programmausschnitt ist übernommen und angepasst aus dem Buch "Experimente zur Robotik" von
Roland Schulé, Franzis Verlag 1988, ISBN 3-7723-9461-2.