Hallo, ich würde gerne mein Looping Louie Spiel in etwa so tunen wie hier: Beitrag "pimp my Looping Louie (mit Mikrocontroller & Zufall!)" allerdings möchte ich ein paar Änderungen vornehmen. So wie ich das sehe, gibt es bei einem Dip Switch mit sechs Schaltern insgesamt 12 Möglichkeiten, richtig? 00 01 10 11 etc. Gibt es hier irgendwo ein Tutorial dazu, wie man so einen Dip Switch in C auswertet? Ich habe zwar den Code aus dem oben verlinkten Thema, aber so ganz wird mir das dadurch noch nicht..
4017er schrieb: > So wie ich das sehe, gibt es bei einem Dip Switch mit sechs Schaltern > insgesamt 12 Möglichkeiten, richtig? > 00 > 01 > 10 > 11 Nein, es gibt 2^6 Möglichkeiten. Im Grunde also 64... 000000 000001 000010 000011 000100 000101 000110 000111 001000 001001 001010 001011 usw...
4017er schrieb: > Gibt es hier irgendwo ein Tutorial dazu, wie man so einen Dip Switch in > C auswertet? Womit bzw. worauf soll der ausgewertet werden? Da Einlesen ist z.B. von uC zu uC unterschiedlich. Und dann kommt esnoch drauf an, wie der DIP-Schwitz an den besagten uC angeschlossen ist. Du siehst: da sind noch Fragen offen...
Lothar Miller schrieb: > 4017er schrieb: >> So wie ich das sehe, gibt es bei einem Dip Switch mit sechs Schaltern >> insgesamt 12 Möglichkeiten, richtig? >> 00 >> 01 >> 10 >> 11 > Nein, es gibt 2^6 Möglichkeiten. Im Grunde also 64... > 000000 > 001011 > usw... Oh... Und wie kann man das in C auswerten? Finde kein einziges Tutorial dazu..
Lothar Miller schrieb: > 4017er schrieb: >> Gibt es hier irgendwo ein Tutorial dazu, wie man so einen Dip Switch in >> C auswertet? > Womit bzw. worauf soll der ausgewertet werden? Da Einlesen ist z.B. von > uC zu uC unterschiedlich. Und dann kommt esnoch drauf an, wie der > DIP-Schwitz an den besagten uC angeschlossen ist. Du siehst: da sind > noch Fragen offen... Hallo, in meinem verlinkten Thread z.B. Wie wurde das dort gemacht?
4017er schrieb: > Oh... > Und wie kann man das in C auswerten? Finde kein einziges Tutorial dazu.. wo ist genau dein Problem damit? Man kann es genauso wie jeden Taster oder Schalter einlesen. Wenn die DIP gleich sinnvoll an einen Port angeschlossen ist, kann man einfach den wert direkt verwenden - für was braucht man da noch ein Tutorial?
Ich habe mich vielleicht etwas undeutlich oder falsch ausgedrückt. Entschuldigung. Im Code vom mir verlinkten Thema steht z.B.
1 | ** \name DIP-switch settings |
2 | * \brief The different modes selectable with the DIP switches |
3 | */
|
4 | //@{
|
5 | #define GAME_MODE_SLOW 0 << 0 ///< DIP1..2 = 00 (booooring)
|
6 | #define GAME_MODE_FAST 1 << 0 ///< DIP1..2 = 10 (not soo boring)
|
7 | #define GAME_MODE_RANDOM 2 << 0 ///< DIP1..2 = 01 (magic :) )
|
8 | #define GAME_MODE_RANDOM_STOP 3 << 0 ///< DIP1..2 = 11 (more magic :) )
|
9 | #define LED_MODE_OFF 0 << 2 ///< DIP3..4 = 00
|
10 | #define LED_MODE_ON 1 << 2 ///< DIP3..4 = 10
|
11 | #define LED_MODE_RAND 2 << 2 ///< DIP3..4 = 01
|
12 | #define REMOTE_MODE_25 0 << 4 ///< DIP5..6 = 00
|
13 | #define REMOTE_MODE_50 1 << 4 ///< DIP5..6 = 10
|
14 | #define REMOTE_MODE_75 2 << 4 ///< DIP5..6 = 01
|
15 | #define REMOTE_MODE_100 3 << 4 ///< DIP5..6 = 11
|
16 | //@}
|
Gibt es dafür eine Erklärung? Also wie genau das funktioniert?
4017er schrieb: > Und wie kann man das in C auswerten? Finde kein einziges Tutorial dazu.. Ich würde sie an bit 0 bis 5 einen Ports hängen und dann ungefähr so abfragen:
1 | switch(PORTx & 0x3F) { |
2 | case 0: |
3 | //.....
|
4 | case 1: |
5 | //.....
|
6 | |
7 | // ...
|
8 | case 63: |
9 | //.....
|
10 | }
|
Noch besser wäre es den Cases mit #define oder enum sprechende Namen zu geben. Edit: 4017er schrieb: > Im Code vom mir verlinkten Thema steht z.B. Defines sind reine Textersetzung. Überall wo im Code "REMOTE_MODE_100" steht wird es dann vom Präprzessor durch "3 << 4" ersetzt. 3 << 4 entspricht 3 bitweise um 4 nach rechts verschoben: 3 = 0b00000011 3<<4 = 0b00110000 > Gibt es dafür eine Erklärung? Also wie genau das funktioniert? Was mit den Werten dann passiert musst du an der jeweiligen Stelle im Code nachsehen.
:
Bearbeitet durch User
4017er schrieb: > in meinem verlinkten Thread z.B. Wie wurde das dort gemacht? Ok, mal angenommen, du hast dir den Code dort mal angesehen und verstehst aus irgendwelchen Gründen nur Bahnhof, dann könntest du es wie folgt probieren. Da gibt es Definitionen im Quelltext, in denen der Begriff DIP vorkommt:
1 | /** \name DIP-switch settings
|
2 | * \brief The different modes selectable with the DIP switches
|
3 | */
|
4 | //@{
|
5 | #define GAME_MODE_SLOW 0 << 0 ///< DIP1..2 = 00 (booooring)
|
6 | #define GAME_MODE_FAST 1 << 0 ///< DIP1..2 = 10 (not soo boring)
|
7 | #define GAME_MODE_RANDOM 2 << 0 ///< DIP1..2 = 01 (magic :) )
|
8 | #define GAME_MODE_RANDOM_STOP 3 << 0 ///< DIP1..2 = 11 (more magic :) )
|
9 | #define LED_MODE_OFF 0 << 2 ///< DIP3..4 = 00
|
10 | #define LED_MODE_ON 1 << 2 ///< DIP3..4 = 10
|
11 | #define LED_MODE_RAND 2 << 2 ///< DIP3..4 = 01
|
12 | #define REMOTE_MODE_25 0 << 4 ///< DIP5..6 = 00
|
13 | #define REMOTE_MODE_50 1 << 4 ///< DIP5..6 = 10
|
14 | #define REMOTE_MODE_75 2 << 4 ///< DIP5..6 = 01
|
15 | #define REMOTE_MODE_100 3 << 4 ///< DIP5..6 = 11
|
Und jetzt musst du nur noch nach GAME_MODE_SLOW suchen und findest das hier:
1 | if(getGameMode() == GAME_MODE_SLOW) { // boooring |
Nächster Schritt: getGameMode suchen:
1 | #define getGameMode() ((~PINB) & 3)
|
Aha, ein define! Ergo steht dort im Quelltext eigentlich:
1 | if(((~PINB) & 3) == 1 << 0) { // boooring |
Das bedeutet letztlich nichts Anderes als:
1 | if( (~PINB)&3 == 1 ) { // boooring |
Und schon weißt du, wie dieser DIP-Schalter eingelesen wird.
:
Bearbeitet durch Moderator
Peter II schrieb: > 4017er schrieb: >> Oh... >> Und wie kann man das in C auswerten? Finde kein einziges Tutorial dazu.. > > wo ist genau dein Problem damit? Man kann es genauso wie jeden Taster > oder > Schalter einlesen. Mit HW- oder SW-Entprellung und wenn SW-Entprellung, welche? Maaan, man, man. > > Wenn die DIP gleich sinnvoll an einen Port angeschlossen ist, kann man > einfach den wert direkt verwenden - für was braucht man da noch ein > Tutorial? Deine Antwort braucht man auch nicht, sowenig wie meine.
Kalaus schrieb: > Peter II schrieb: >> 4017er schrieb: >>> Oh... >>> Und wie kann man das in C auswerten? Finde kein einziges Tutorial dazu.. >> >> wo ist genau dein Problem damit? Man kann es genauso wie jeden Taster >> oder >> Schalter einlesen. > > Mit HW- oder SW-Entprellung und wenn SW-Entprellung, welche? Maaan, man, > man. das ist von der Anwendung abhängig, wenn man den DIP nur beim starten einliest braucht man keine Entprellung. in dem meisten Fälle wird man auch so auf eine Entprellung verzichten können, weil man ja keine schritte oder ähnliches damit startet. > > > > Wenn die DIP gleich sinnvoll an einen Port angeschlossen ist, kann man > > einfach den wert direkt verwenden - für was braucht man da noch ein > > Tutorial? > Deine Antwort braucht man auch nicht, sowenig wie meine.
1 | wert = DIP_PORT |
2 | if ( wert == 1 ) { |
3 | };
|
4 | if ( wert > 1 && wert < 10 ) |
5 | }; |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.