amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Amiga, AmigaOS 4 > Mal 'ne Frage an die "alten" Hasen ! [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

04.11.2001, 18:19 Uhr

hilfmich
Posts: 3
Nutzer
Folgendes Problem:

Ich möchte mit meinem A500 (Kick 2.04) einen Roboter steuern. Dazu möchte ich den Druckerport als Ausgabe- und die Joystickports als Eingabeleitungen benutzen.

Wer kann mir:

a) Die PEEK oder POKE Befehle nennen, die einzelnen Ports am
Druckeranschluss "high" oder "low" zu schalten ?

b) Die PEEK oder POKE Befehle nennen', mit denen ich die
Joystickports abfragen kann (Am besten als Programmcode!)

Ich bin wahrscheinlich der 180.001-ste der das wissen will,
aber ich habe nirgends im Netz was dazu gefunden.

Weiterhin beschäftigt mich noch, ob diese Befehle auch auf einem
A600, oder A600 HD funktionieren, bzw. wie die dann da lauten.

Als Programmiersprache will ich das AmigaBasic 1.2 nutzen, dass
der WB 1.2 und 1.3 beilag.

Antworten bitte an Dockenfuss@T-Online.de

Danke,

Michael

[ - Antworten - Zitieren - Direktlink - ]

04.11.2001, 21:23 Uhr

Harlekin
Posts:
[Ex-Mitglied]
Hi,

Antworten per mail geb ich nicht :-p

Die Leitungen am Parralellport können auf "Ausgabe" geschaltet werden, also um einen Pegel abzugeben.
Oder sie können auf "Eingabe" geschaltet werden, also um als HIGH-LOW-Sensor zu dienen.
Jede Leitung kann einzeln auf Eingabe oder Ausgabe geschaltet werden.

Welche Leitungen du auf Ausgabe (1) oder Eingabe (0) schaltest bestimmt der Wert denn du in die Adresse 12575489 schreibst.

POKE 12575489,255 schaltet alle Leitungen auf Ausgabe (255 = 11111111 Binär)
POKE 12575489,15 schaltet die ersten 4 Leitungen aus Eingabe, die letzten 4 auf Ausgabe (15 = 00001111 Binär)

Leitungen die du auf Ausgabe geschalten hast kannt du mit Adresse 12574977 auf HIGH/LOW setzen.

Beispielprogramm:
POKE 12575489,255 hat nun alle Leitungen auf Ausgabe geschalten.
POKE 12574977,255 setzt diese nun auf alle auf HIGH.

Wenn du Leitungen (mit Adr 12575489) auf Eingang geschalten hast, kannst du sie mit PEEK (auf Adr 12574977) lesen ob HIGH or LOW.

usw...
Wenn man was größeres damit vor hat ne ziemliche Bitpopelei.
Mach dir am besten ein paar hübsche Unterprogramme zb SET-BIT(#), GET-BIT(#), SET-AKTOR(#), SET-SENSOR(#) oä.

(mit Amiga-Basic gingen doch unterprogramme oder?? (schon so lange her :-o ))


ciao


(Und von wegen "alter hase".. Ich bin noch nicht mal 30 !! :-))

[ - Ändern - Antworten - Zitieren - Direktlink - ]

06.11.2001, 14:04 Uhr

hilfmich
Posts: 3
Nutzer
OK, aber mal langsam.

Wenn ich z.B. Port 2 als Ausgabeport schalten möchte, nehme ich

POKE 12575489,255 Um alle Leitungen als Ausgabeleitungen zu schalten. Richtig?

Dann setze ich POKE 12574977,2 um Leitung zwei zu schalten ?
Immer noch richtig?

Mit nochmal POKE 12574977,2 geht Port zwei wieder aus LOW?
Wirklich noch richtig?

So, wie aber nutze ich jetzt den Joyport um Eingangssignale zu bekommen ?

[ - Antworten - Zitieren - Direktlink - ]

06.11.2001, 14:48 Uhr

thomas
Posts: 7718
Nutzer
Nein, POKE 12574977,2 setzt Leitung 2 (wenn du von 1 bis 8 zählst) auf high und alle anderen auf low. Danach mußt du POKE 12574977,0 machen, damit Leitung 2 wieder auf low gesetzt wird (zuammen mit allen anderen). Du kannst immer nur alle Leitungen auf einmal lesen oder schreiben. Ggf. mußt du erst lesen, ein Bit ändern und wieder schreiben.

Der Wert, der "gepoket" werden muß ist ein Byte, jedes Bit entspricht einer Leitung:

Leitung1 = 2hoch0 = 1
Leitung2 = 2hoch1 = 2
Leitung3 = 2hoch2 = 4
Leitung4 = 2hoch3 = 8
Leitung5 = 2hoch4 = 16
Leitung6 = 2hoch5 = 32
Leitung7 = 2hoch6 = 64
Leitung8 = 2hoch7 = 128

Die Werte für gesetzte Bits (also geschaltete Leitungen) müssen addiert werden, die gelöschten Bits bleiben 0.

Das Auslesen der Joystick-Ports ist etwas komplizierter, weil die Leitungen intern bereits verarbeitet werden. Ich habe zuhause das Buch Amiga Intern, da ist das genau beschrieben. Könnte ich einscannen und dir schicken, bei Interesse Mail an mich.

Gruß Thomas

--
Email: thomas-rapp@web.de

Home: home.t-online.de/home/thomas-rapp/

[ Dieser Beitrag wurde von thomas am 06.11.2001 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

08.11.2001, 10:57 Uhr

Harlekin
Posts:
[Ex-Mitglied]
Nein, nicht so ganz.


Du kannst nicht direkt eine bestimmte Leitung schalten. Sondern du mußt EIN Bit setzen das der Leitung entspricht.

Es gibt für den Parralellport 2 Bytes (mit je 8 Bit) die den status der Leitungen festlegen.

Du kannst mit den Leitungen am Parallelport 2 Dinge tun.
1. Ein Signal HIGH/LOW ausgeben.
2. Feststellen ob ein HIGH/LOW signal anliegt.

Ob eine Leitung als Eingabe oder Ausgabe dienen soll und welche Leitung genau des Ports, legst du mit den einzelnen Bits der Adresse 12575489 fest.

Nochmal.
Jedes Bit steht für eine Leitung.
Dabei stehen die Bits in adr 12575489 für die _Eigenschaft_ der Leitung (Ein- oder Ausgabe) - und die Bits in adr 12574877 stehen für das Signal das dort anliegt (mit PEEK abzufragen) oder anliegen soll (mit POKE zu setzen).


Eigenschaft der einzelnen Leitungen Festlegen:

(% meint im Binärformat)
(Ich weiß nicht mehr ob man in AMigabasic direkt Binärwerte eingtippen kann oder ob man erst Binär nach Dezimal konvertieren muß!)

Poke 12575489,%00000001
heißt die ERSTE Leitung soll eine Ausgabeleitung sein.

Poke 12575489,%00000010
heißt die ZWEITE Leitung soll eine Ausgabeleitung sein.

Poke 12575489,%00000011
heißt die ERSTE UND die ZWEITE Leitung soll eine Ausgabeleitung sein.

Poke 12575489,%11111111
heißt ALLE Leitungen sollen Ausgabeleitungen sein.

(alle Leitungen mit 0-Bit sind als Sensor geschalten)

Poke 12575489,%00001111
heißt an den ersten 4 Leitungen kannst du einene Signal abgeben; mit den letzten 4 Leitungen kannst du ein Signal Messen.
(Ich zähle die erste Leitung mit dem Bit ganz rechts)

Wenn du nun die Eigenschaften der Einzelnen Leitungen mit der Adr12575489 festgelegt hast, kannst du mit der anderen Adr (12574977) entweder signal lesen (peek) oder signal abgeben (poke), je nach dem ob du diese Leitung als Ein-oder Ausgabe geschalten hast.

Du willst zb mit ALLEN Leitungen Singale abgeben können:
POKE 12575489,%11111111
Jetzt sind alle Leitungen auf 'können spannung abgeben' geschalten.

Nun kannst du nur Leitung 1 auf HIGH setzen, alle anderen LOW
POKE 12574977,%00000001

oder Leitung 1 und 2 auf HIGH setzen, alle anderen LOW
POKE 12574977,%00000011

oder alle auf HIGH
POKE 12574977,%11111111

Leitung 1 wieder auf LOW, alle anderen beleiben auf HIGH
POKE 12574977,%11111110

Alle Leitungen wieder auf LOW
POKE 12574977,%00000000

usw..

Nochmal in Kurzform:
Um mit dem Port zu spielen gibt es 2 Adressen. In jeder Adresse gibts 8 Bits welche den Leitungen des Ports entsprechen.
Adr1 ist für den Verwendungszweck der Leitungen. (soll ein Pegel abgegeben oder gemessen werden)
Adr2 für den Signalpegel selbst. (High oder Low)


Ich weiß zwar dass ich technisch gesehen recht habe, ich bin aber unheimlich scheisse im Erklären. Kann das jemand verständlicher ausdrücken? Oder sind wieder alle dabei über Morphos,Amitlon,OS4 usw zu streiten??

Bevor du mit dem Parallelport rumspielst, versuch doch mal gezielt die einzelnen Bits in einem Byte zu manipulieren. Das ist das grundlegende was du dafür können mußt.

(ich glaube mich zu errinern dass das mit Amigabasic ne ziemlicher sauerei ist. oder gibts da BitSet(a), BitClr(a) usw??)

Die Sache mit dem Joyport weiß ich nicht. Die oben genannten Adressen sind bei mir noch von ganz früher 'hängengeblieben' ;)

Was mußt du denn wie steuern? Wieviele Ein und Ausgänge, Digital oder auch Analog??


(Spitze. Der Serverumzug kam genau dann als ich denn Text geschrieben habe. Endlich kann ich ihn Posten. Obwohl thomas das schon viel besser erklärt hat als ich :)

ciao

[ - Ändern - Antworten - Zitieren - Direktlink - ]

08.11.2001, 12:08 Uhr

hilfmich
Posts: 3
Nutzer
Danke Euch allen!

Die Sache ist die: Ich habe einen Roboter gebaut, der über Analogtechnik (Relais und Transistoren) seine Fahrrichtung steuern kann. Erstmal nur so zum probieren. Dann habe ich dem ganzen einen internen 19"-Bus eingebaut, um schaltungen auf Platinen recht schnell Ein- und Ausbauen zu können. Das ist besonders für die Fehlersuche praktisch. Jetzt habe ich dann neben einer Spannungswandlerplatine, die den saft der Akku's an die TTL's und Motoren anpasst eingesetzt, und eine zweite zur Ansteurerung der Motoren (Über die Transistor-Relais-Steuerung). Das ist zwar nicht high-tech, dafür aber schön Bodenständig und nachvollziehbar. Vor allem ist es unanfällig für Störungen durch Induktionsspannungen etc. Leider ist sowas nichts wert, wenn da nicht ein wenig leben drinsteckt. Also habe ich mich meines 500ers bedient, einen Parallelport-Adapter entworfen, der die sensibelen Bausteine vor Zerstörung schützen soll, und das ganze über ein Kabel vom 10 Metern mit eintsprechender Pegelanpassung an den Roboter angeschlossen. Der kann jetzt durch ein Programm vom Amiga aus gesteuert werden. Der Amiga ist jetzt quasi das Hirn von meinem Roboter. Das funktioniert auch dank der von Euch gemailten POKE-Befehle wunderbar, zumal ich auch mehrere Ports kombiniert ansprechen kann, z.B. für verschiedene Fahrtrichtungen.

Jetzt kommt die nächste Herausforderung auf mich zu. Ich möchte die Joystickeingänge nutzen (Die am Parallel-Port brauche ich alle als Ausgänge), um Eingangssignale vom Roboter auswerten zu können. Also Lichtsensoren, Bewegungsmelder, Prallkontakte.
Wenn das dann soweit funktioniert, werde ich den ganzen Mist im Internet hosten, um Anregungen zu Erweierungen zu bekommen. Vielleicht hat ja auch jemand Lust seinen Amiga auf der nächsten Party einen "Kellner-Roboter" steuern zu lassen ? ;-)

Jedenfalls brauche ich noch:

Die Befehle um in Baisc den Joyport 2 auslesen zu könen,

Einen Amiga 600 mit 20 MB HDD (darf nicht viel kosten), denn mein alter 500er läuft a) nicht stabil und ist b) zu groß um auf dem Roboter mitfahren zu können.

Falls mich da jemand unterstützen kann: Dockenfuss@T-Online.de:bounce: :commo: :bounce:

[ - Antworten - Zitieren - Direktlink - ]

08.11.2001, 12:20 Uhr

Micha1701
Posts: 938
Nutzer
Hi!

Cool was Du da zusammenbastelst. Respekt!

Ich schau mal in einem meiner Assembler Bücher nach, ob ich nicht die Joystickports finde. Wäre doch gelacht!

--

:boing: Micha :boing:

[ - Antworten - Zitieren - Direktlink - ]

08.11.2001, 21:41 Uhr

Micha1701
Posts: 938
Nutzer
Hi!

Ich nochmal ;-)

Die Adressen für die Joystickports sind:

$dff00a
$dff00c

(hexadezimal)

Frag mich aber nu nicht, welche einzelnen Bits für was stehen...

Das einzige was ich weiß ist folgendes:

$0003 steht für rechts
$0300 steht für links
$0100 steht für oben
$0001 steht für unten
$0200 steht für links oben
$0002 steht für rechts unten
$0103 steht für rechts oben
$0301 steht für links unten

alles hexadezimal Codes...

Hoffe Dir geholfen zu haben!

--

:boing: Micha :boing:

[ - Antworten - Zitieren - Direktlink - ]

09.11.2001, 12:57 Uhr

Valwit
Posts: 750
Nutzer
hmm. die adressen funzen in allen amigas. mein atx-auschalt hack funzt mir a600 500 und 1200 an gleichen adrersse.

--
Viele Grüsse
Valwit
:bounce:

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Amiga, AmigaOS 4 > Mal 'ne Frage an die "alten" Hasen ! [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.