POT

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen finden sich unter POT (Begriffsklärung).
POT
Syntax: POT(<n>)
Parameter
n: 0 oder >0
Einordnung
Typ: numerische Funktion
Kontext: Peripheriekontrolle
Aufgabe: ermittelt den Zustand eines Potentiometers (Paddle)
Abkürzung: keine (TSB: pO)
Token: $64 $5c (100 92)
Verwandte Befehle
JOY - PENX - PENY


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

Typ: numerische Funktion
Syntax: 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 +5 V zur Verfügung.

Simons' Basic verzichtet auf die Option, ein zweites Paddle-Paar an Port 2 abzufragen, und gibt mit POT nur die Vorgabeeinstellung frei (Paddles/Potentiometer an Port 1). Mit ein paar POKEs könnte auch das zweite Paddle-Paar 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[Bearbeiten | Quelltext bearbeiten]

Motorsteuerung (Positionsregelung per Potentiometer):

900 DIM b(7),c(7)
910 FOR i=0 TO 7: b(i)=2^i: c(i)=255-b(i): NEXT i
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 Potentiometern 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.