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: [ - 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! -- Micha [ - 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! -- Micha [ - 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 [ - 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. |