Forum: Mikrocontroller und Digitale Elektronik Problem mit GPIO Taster (LPC2478)


von Christian G. (chris_goeb)


Lesenswert?

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

von Lothar (Gast)


Lesenswert?

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.

von Christian G. (chris_goeb)


Lesenswert?

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.

von Lothar (Gast)


Lesenswert?

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;
}

von Peter D. (peda)


Lesenswert?

Lothar schrieb:
> Danach ein Delay zum Entprellen.

OMG!!!

von Christian G. (chris_goeb)


Lesenswert?

Ok.. ich hab jetzt folgendes gemacht:
1
void init_system (void) {
2
3
int f;
4
int value
5
6
configureHW();
7
timer();                // just a tool to run the three LEDs
8
9
   for (f = 0; f < 10000000; f++)
10
  {
11
  value = (FIO2PIN & 0x00000001);
12
13
  if (value == 1)
14
    {
15
    timer();
16
    }
17
  }
18
}
19
20
void configureHW (void) {
21
22
// Pin configuration
23
24
IODIR0  |=  (1<<13) | (1<<14) | (1<<21);   // three LEDs
25
IOCLR0  |=  (1<<13) | (1<<14) | (1<<21);   // LED on
26
wait100ms();                               // Timer 1 (~100ms)
27
IOSET0  |=  (1<<13) | (1<<14) | (1<<21);   // LED off
28
29
// configure User Taster
30
31
PINSEL4   =  0x0000;
32
PINSEL4  &= ~(3<<0);  // P2[0]
33
FIO2DIR  &= ~(1<<0);  // input
34
// PINMODE4 &= ~(3<<0);  // reset PINMODE
35
// PINMODE4 |=  (2<<0);  // neither Pullup or Pulldown
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..

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
Noch kein Account? Hier anmelden.