[Xcode] Pins ganz simpel auf 0/1 setzen
Moderator: Guido Körber
[Xcode] Pins ganz simpel auf 0/1 setzen
Hallo,
ich versuche gerade mit c + Xcode eine(!) LED ein und aus zu schalten.
bis IOWarriorIsPresent geht mein Code ja.
Aber wie setz ich bitte den Pin auf 1 und nachher wieder auf 0?
Sorry aber ich versteh die SDK nicht ganz. Bin auch ganz frisch in c.
Ich würde gerne IOWarriorWriteToInterface benutzen.
Aber ich schaff es einfach nicht die LED an Pin 0 auf 1 zu setzen. bzw auf 0.
Mit dem IOWarriorProber krieg ich die Pins auf 1 und wieder auf 0.
Aber mit einem simplen Code ... geht das nicht.
Wie mach ich das?
Danke :)
ich versuche gerade mit c + Xcode eine(!) LED ein und aus zu schalten.
bis IOWarriorIsPresent geht mein Code ja.
Aber wie setz ich bitte den Pin auf 1 und nachher wieder auf 0?
Sorry aber ich versteh die SDK nicht ganz. Bin auch ganz frisch in c.
Ich würde gerne IOWarriorWriteToInterface benutzen.
Aber ich schaff es einfach nicht die LED an Pin 0 auf 1 zu setzen. bzw auf 0.
Mit dem IOWarriorProber krieg ich die Pins auf 1 und wieder auf 0.
Aber mit einem simplen Code ... geht das nicht.
Wie mach ich das?
Danke :)
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Ok, das hab ich mir schon fast gedacht.
Aber wie bitte setz ich denn jetzt z.B. Pin 1 auf 1, Pin 2 auf 1 und Pin 3 auf 0? Der Rest auch auf 0.
Tut mir echt leid wenn ich sowas hier frage, aber ich komme nicht weiter.
*edit*
Ich verstehe die Doku die im SDK enhalten ist nicht ganz.
Sei es die HTML Form oder die lib.
Aber wie bitte setz ich denn jetzt z.B. Pin 1 auf 1, Pin 2 auf 1 und Pin 3 auf 0? Der Rest auch auf 0.
Tut mir echt leid wenn ich sowas hier frage, aber ich komme nicht weiter.
*edit*
Ich verstehe die Doku die im SDK enhalten ist nicht ganz.
Sei es die HTML Form oder die lib.
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Naja ...
Geht auch nur "halber".
wenn ich an P3.6 eine LED hänge blinkt die schön. Nur leider ist das auch bei P3.1, P3.2 usw.
Wie ich auf die komischen Zahlen komme?
-> http://salomon-freising.de/iow/iow_tuto ... l#beispiel
(Ja, ist kein Mac OS X... aber ich hab einfach kA wie ich das anstellen soll)
Kann mir denn niemand einen Code Snippet geben der ganz einfach
Oder "gut" erklären damit ich das mal richtig verstehe.
Ich will mit den IO-Warrior eigentlich mal viele Servos ansteuern (ja, mit Relais usw., bin ja gelernter Industrieelektroniker) und nicht einfach in den Schrank legen.
Ich bin echt langsam am verzeifeln.
Nicht lachen, ich probier echt alles aus z.B.
Ich dachte so kann ich P0.0 = 0, P0.1 = 1 usw setzen. War wohl nicht so.
Code: Select all
const int data = 3 * 8 + 6; // set P3.6 to 1
IOWarriorWriteInterface0 (&data);
int read;
IOWarriorReadInterface0 (&read);
printf ("Read: %d\n", read);
sleep ( 1 );
int test = 64; // set all Pins to 0
IOWarriorWriteInterface0 (&test);
wenn ich an P3.6 eine LED hänge blinkt die schön. Nur leider ist das auch bei P3.1, P3.2 usw.
Wie ich auf die komischen Zahlen komme?
-> http://salomon-freising.de/iow/iow_tuto ... l#beispiel
(Ja, ist kein Mac OS X... aber ich hab einfach kA wie ich das anstellen soll)
Kann mir denn niemand einen Code Snippet geben der ganz einfach
- P0.0 = 1
P0.1 = 1
P0.2 = 0
...
P1.0 = 0
P1.1 = 1
...
Oder "gut" erklären damit ich das mal richtig verstehe.
Ich will mit den IO-Warrior eigentlich mal viele Servos ansteuern (ja, mit Relais usw., bin ja gelernter Industrieelektroniker) und nicht einfach in den Schrank legen.
Ich bin echt langsam am verzeifeln.
Nicht lachen, ich probier echt alles aus z.B.
Code: Select all
int data = 01010101010101010101010101010101;
IOWarriorWriteInterface0 (&data);
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Also hier scheint grundsätzliches Unverständnis der Zahlensysteme und deren Verwendung in Programmiersprachen vorzuliegen.
Das 3*8+6 gibt die BITNUMMER des Pins an an dem die LED hängt. Übertragen werden muss natürlich die Bitmaske und zwar für alle 32 Pins. Wenn man also einen Wert mit vielen Nullen drin an den IO-Warrior schreibt muss man sich nicht wundern, wenn viele LEDs angehen. Um nur die LED an P3.6 anzusteuern schreibt man 0xBFFFFFFF.
Das 3*8+6 gibt die BITNUMMER des Pins an an dem die LED hängt. Übertragen werden muss natürlich die Bitmaske und zwar für alle 32 Pins. Wenn man also einen Wert mit vielen Nullen drin an den IO-Warrior schreibt muss man sich nicht wundern, wenn viele LEDs angehen. Um nur die LED an P3.6 anzusteuern schreibt man 0xBFFFFFFF.
Leider, so etwas hab ich bis jetzt noch nie gebraucht.Guido Körber wrote:Also hier scheint grundsätzliches Unverständnis der Zahlensysteme und deren Verwendung in Programmiersprachen vorzuliegen.
Wie kommst du von der Bitnummer auf die Bitmaske?
Mir ist schon klar, dass ich mit einem Write Befehl alle Pins auf einmal setze. Aber wie geb ich das an damit P0.1 = 0, P0.2 = 1 usw ... ist?
0xBFFFFFFF ist ein schöner Hex wert. Als Dez sieht der auch toll aus. Nur leider hab ich echt keine Ahnung wie du auf diese Zahl kommst.
Leider hat man meine Frage noch immer nicht richtig beantwortet.
Ich finde bei Google leider keine Infos darüber.
In meinem C++ Buch steht auch nichts davon.
Also wo sonst die Fragen stellen wenn nicht hier?
Ok ich hab grad einiges getestet und es ist beschissen.
Omg ... toll ... der setzt den Pin auf 5V und etliche andere auch.
Das ist doch voll bescheuert wenn ich den Pin setze und die anderen machen was sie wollen?
Ich will doch nicht mehr wie ein Code Snippet das alle Pins schreibt. Ich bitte darum!
Es muss doch möglich sein mit einem Write Befehl die Pins so zu setzen wie ich will. (sonst kommt es irgendwann zu ungewollten fehlern wenn vll 5 Servos loslaufen bzw +- auf -+ kommt ...)
1. Write Befehl soll die Pins so setzen:
P0.1 = 1, P0.2 = 0, P0.3 = 0, P0.4 = 1 ... usw
(egal was nun kommt, ich muss nur den anfang verstehen! aber es soll irgendwie mit 0 und 1 weitergehen.)
2. Write Befehl soll die Pins so setzen:
P0.1 = 0, P0.2 = 1, P0.3 = 1, P0.4 = 0 ... usw
(also genau anders wie Befehl Nr.1)
Mit SPS geht das doch auch :-)
Code: Select all
int data = 0xBFFFFFFF;
IOWarriorWriteInterface0 (&data);
Das ist doch voll bescheuert wenn ich den Pin setze und die anderen machen was sie wollen?
Ich will doch nicht mehr wie ein Code Snippet das alle Pins schreibt. Ich bitte darum!
Es muss doch möglich sein mit einem Write Befehl die Pins so zu setzen wie ich will. (sonst kommt es irgendwann zu ungewollten fehlern wenn vll 5 Servos loslaufen bzw +- auf -+ kommt ...)
1. Write Befehl soll die Pins so setzen:
P0.1 = 1, P0.2 = 0, P0.3 = 0, P0.4 = 1 ... usw
(egal was nun kommt, ich muss nur den anfang verstehen! aber es soll irgendwie mit 0 und 1 weitergehen.)
2. Write Befehl soll die Pins so setzen:
P0.1 = 0, P0.2 = 1, P0.3 = 1, P0.4 = 0 ... usw
(also genau anders wie Befehl Nr.1)
Mit SPS geht das doch auch :-)
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Ist es überhaupt möglich die Ausgänge gleichzeitig so zu setzen wie ich das will (siehe oben)?
Meine Frage wird ja immer überlesen.
Ich weiss nicht weiter und deswegen frage ich die Entwickler.
setzt den Pin 3.6 auf High.
- Wie krieg ich den Pin 3.6 wieder auf Low?
- Wie setze ich andere Pins gleichzeitig mit dem Write Befehl? (1. Write aufrufen und dabei alle Pins ändern) Array - pro Pin ein Array[...]? Ist das überhaupt möglich?
Meine Frage wird ja immer überlesen.
Ich weiss nicht weiter und deswegen frage ich die Entwickler.
Code: Select all
int data = 0xFFFFFFBF;
IOWarriorWriteInterface0 (&data);
- Wie krieg ich den Pin 3.6 wieder auf Low?
- Wie setze ich andere Pins gleichzeitig mit dem Write Befehl? (1. Write aufrufen und dabei alle Pins ändern) Array - pro Pin ein Array[...]? Ist das überhaupt möglich?
Passt dann auch nicht mehr.Robert Marquardt wrote:Px.y => ~(1 << (x*8 + y))
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Verstehe. Langsam wirds :-) Ein paar Fragen sind aber noch offen.
- Wie setzt sich z.B. FFFFFFBF zusammen? (Kombination Nr. 4.294.967.231)
- Wir haben P3.6 auf High mit FFFFFFBF gesetzt, der soll nun aber wieder auf Low (nicht mit 0X00000000, das ist so unschön). Wie stell ich das an?
Tut mir echt leid falls ich nerv ...
Dann kann ich also pro Write Befehl alle Pins nach belieben ändern.Guido Körber wrote:Es gibt keine Befehle oder sowas um einzelne der Pins zu setzen.
Beliebige Kombinationen sind möglich (na gut, 4.294.967.296 Möglichkeiten).
- Wie setzt sich z.B. FFFFFFBF zusammen? (Kombination Nr. 4.294.967.231)
- Wir haben P3.6 auf High mit FFFFFFBF gesetzt, der soll nun aber wieder auf Low (nicht mit 0X00000000, das ist so unschön). Wie stell ich das an?
Tut mir echt leid falls ich nerv ...
FFFF FBFF setzt sich also wie folgt zusammen:
Byte 0 FF
Byte 1 FB Port 3 -> 1111 1011 -> 1-5 + 7-8 = 1 -> 6 = 0
Byte 2 FF
Byte 3 FF
Jetzt ... wenn Sie hingehen und ...
FB | FF (Bitweises Oder) vollziehen, dann kommen wir zu folgender Operation:
FB: 1111 1011
|
FF: 1111 1111
= 1111 1111 -> Pin 3.6 = 1 (wie die anderen auch).
Ich empfehle hier einen Blick zu M&T C & C++ Referenz (5,--) oder jedes andere Hochschullehrbuch, Vorlesungsskript (falls eine Universität in der Nähe Ihres Wohnorts.).
Mfg
Alex
Byte 0 FF
Byte 1 FB Port 3 -> 1111 1011 -> 1-5 + 7-8 = 1 -> 6 = 0
Byte 2 FF
Byte 3 FF
Jetzt ... wenn Sie hingehen und ...
FB | FF (Bitweises Oder) vollziehen, dann kommen wir zu folgender Operation:
FB: 1111 1011
|
FF: 1111 1111
= 1111 1111 -> Pin 3.6 = 1 (wie die anderen auch).
Ich empfehle hier einen Blick zu M&T C & C++ Referenz (5,--) oder jedes andere Hochschullehrbuch, Vorlesungsskript (falls eine Universität in der Nähe Ihres Wohnorts.).
Mfg
Alex
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact: