Hallo Leute! Ich bin sehr neu auf dem Gebiet und versuche mich in die Welt der Mikroprozessoren einzuarbeiten. Ich programmiere auf einem LPC2478 von NXP und benutze µVision4 von Keil. Ich habe an derPlatine (von Firma) LEDS zum leuchten bekommen, UART0 läuft, PWM Signal funktioniert und auch, die Ansteuerung von analogen Ausgängen über einen MAX5550 geht auch. Jetzt dachte ich mir, ich könnte über einen Taster und FIOPIN einen Eingang abfragen und damit ganz einfach eine LED zum leuchten kriegen. Aber bis jetzt kein Erfolg: void init_system (void) { int f; configureHW(); timer(); // just a tool to run the three LEDs for (f = 0; f < 10000000; f++) { if ( !(FIO2PIN & 0x00000001) ) { timer(); } } } void configureHW (void) { // Pin configuration IODIR0 |= (1<<13) | (1<<14) | (1<<21); // three LEDs IOCLR0 |= (1<<13) | (1<<14) | (1<<21); // LED on wait100ms(); // Timer 1 (~100ms) IOSET0 |= (1<<13) | (1<<14) | (1<<21); // LED off // configure User Taster PINSEL4 &= ~(3<<0); // P2[0] FIO2DIR &= ~(1<<0); // input PINMODE4 &= ~(3<<0); // reset PINMODE PINMODE4 |= (2<<0); // neither Pullup or Pulldown . . } Ist die Abfrage des Tasters so überhaupt korrekt? Ich wäre um jeden Hinweis dankbar :-) Gruß Christian
Gast
#3114978
Hat der Taster einen Pull-up oder Pull-Down? Falls Pull-Up ist der Pin ja Default High, und wird durch Drücken auf Low gezogen, dann musst Du 0 abfragen. Danach ein Delay zum Entprellen.
Vielen Dank für die schnelle Antwort. Daran habe ich auch schon gedacht. Taster geht über Pullupwiderstand. Angenommen, ich würde den Taster drücken und gedrückt halten, hätte ich ja ein andauerndes LOW-Signal anliegen. Lade ich daraufhin das Programm (mit gedrücktem Taster) neu, und lass den Taster kurz los (quasi LOW->HIGH->LOW) bekomme ich ebenfalls kein Feedback von den LEDs. Das Programm Timer(); lässt die LEDs genau wie in der configureHW() kurz aufblinken.
Gast
#3115045
Hier für LPC1766 (sollte aber kein Unterschied zum LPC2478 sein): void Delay(volatile unsigned long i) { while (i!=0) i--; } // toggle LED1 at P1_25 by BUTTON1 at P0_23 int main (void) { FIO1DIR_bit.P1_25 = 1; // output while (1) { if (FIO0PIN_bit.P0_23 == 0) // check =0 { FIO1PIN_bit.P1_25 ^= 1; // toggle Delay(1<<18); } } return 0; }
Lothar schrieb: > Danach ein Delay zum Entprellen. OMG!!!
Ok.. ich hab jetzt folgendes gemacht:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
Nach einfügen der variable value und der ver-UND-dung mit 0x00000001 funktioniert der Taster immerhin invers. Klar, ist ja auch ein Pullup-Widerstand drin aber das sollte dann das kleinere Übel sein, immerhin hat der Taster jetzt schon einen Effekt..
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.