Hallo,
Seit geraumer Zeit kämpfe ich mit einer eigentlich sehr einfachen
Aufgabe:
An einem LPC11C14 hab ich an Port 1 Pin 9, 10 und 11 je einen Taster
angeschlossen. Taster offen => pin floatet; taster gedrückt: mit 1K nach
Vcc geschlossen.
Mein Problem ist: ich schaffe es nicht den Tastendruck von Pin 1/10 und
1/11 (richtig) auszuwerten. Auch bei gedrückter Taste, lese ich immer
eine 0 aus. Pin 1/9 funktioniert einwandfrei.
Da auf den betroffenen Pin's als Alternativfunktion den ADC gibt, hab
ich daher auf diesen umgeschaltet. Jede Sekunde werte ich beide
Varianten aus. siehe Code:
1 | // ADC input
|
2 | Chip_IOCON_PinMuxSet(LPC_IOCON, IOCON_PIO1_10, (IOCON_FUNC1 | IOCON_MODE_INACT));
|
3 | Chip_GPIO_SetPinDIRInput(LPC_GPIO, 1, 10);
|
4 | uint16_t adresult;
|
5 | ADC_CLOCK_SETUP_T ADCSetup;
|
6 | Chip_ADC_Init(LPC_ADC, &ADCSetup);
|
7 | Chip_ADC_EnableChannel(LPC_ADC, ADC_CH6, ENABLE);
|
8 | Chip_ADC_SetStartMode(LPC_ADC, ADC_START_NOW, ADC_TRIGGERMODE_RISING);
|
9 | while (Chip_ADC_ReadStatus(LPC_ADC, ADC_CH6, ADC_DR_DONE_STAT) != SET) {}
|
10 | Chip_ADC_ReadValue(LPC_ADC, ADC_CH6, &adresult);
|
11 | DEBUGOUT("ADC value 0x%x\r\n", adresult);
|
12 |
|
13 | // digital input
|
14 | Chip_IOCON_PinMuxSet(LPC_IOCON, IOCON_PIO1_10, (IOCON_FUNC0 | IOCON_MODE_INACT));
|
15 | Chip_GPIO_SetPinDIRInput(LPC_GPIO, 1, 10);
|
16 | DEBUGOUT("Digital value 0x%x\r\n", Chip_GPIO_GetPinState(LPC_GPIO, 1, 10));
|
Das Ergebnis ist eigentlich recht eindeutig:
Taster offen (erwartetes Ergebnis):
1 | ADC value 0x174
|
2 | Digital value 0x0
|
3 | ADC value 0x137
|
4 | Digital value 0x0
|
5 | ADC value 0x1c3
|
6 | Digital value 0x0
|
7 | ADC value 0x2b3
|
8 | Digital value 0x0
|
9 | ADC value 0x259
|
10 | Digital value 0x0
|
Taster geschlossen (ADC Ergebnis erwartet, Digital bleibt immer 0):
1 | ADC value 0x3ff
|
2 | Digital value 0x0
|
3 | ADC value 0x3ff
|
4 | Digital value 0x0
|
5 | ADC value 0x3ff
|
6 | Digital value 0x0
|
7 | ADC value 0x3ff
|
8 | Digital value 0x0
|
Wenn ich den obigen Code noch dahingehend verändere, dass der interne
Pull-down aktiv ist, dann ist auch das ADC Ergebnis im floating Zustand
immer schön 0 - wie man es erwartet.
Ich stell mir grad die Frage ob ...
- ich beim einlöten den µC zu viel gebraten habe oder anderweitig die
digitalen Ports 1/10 und 1/11 zerstört habe? (zugegeben: jedes mal, wenn
ich an einen Hardwarefehler gedacht habe, war es dann doch immer noch
meine eigene Schuld ...)
- oder ob es bei genau diesen beiden Pins etwas spezielles zu beachten
gibt? Pin 1/9 funktioniert ja. Aber genau 10/11 haben ja als
Alternativfunktion den ADC - vielleicht ist da noch etwas spezielles zu
beachten, was ich im Datenblatt noch nicht gefunden habe ...
Hat jemand Erfahrung mit den LPC11xxx und hat nen Tipp für mich?
danke!
vG Alram