Forum: Mikrocontroller und Digitale Elektronik LPC:Code falsch oder Board defekt?


von Schoasch (Gast)


Lesenswert?

Hi

Ich versuche verzweifelnd die Taster meines Entwicklungsboardes
anzusprechen. Beim Evalboard handelt es sich um das LPC-P2124 Board von
Olimex.

Die Taster sind an P0.10(Button1) und P0.11 angeschlossen.

Wenn ich nun an den Stifleisten an P0.10 messe, messe ich knapp 5V.
Wenn ich an P0.11 messe, messe ich 0V. Aber eigentlich sollte ich doch
3.3V messen oder?! Wenn ich bei den Tastern messe, messe ich 3.3V.. bei
beiden.. also mir scheint, da dürfte eine Hardware defekt sein..

Das Programm sollte ja eigentlich auch funktionieren. Ich hab es
simuliert und da scheint es zu passen.. Aber ich füge es mal ein.
1
#include <stdio.h>                /* prototype declarations for I/O
2
functions */
3
#include <LPC21xx.H>              /* LPC21xx definitions               
4
      */
5
6
#define LED1      0x00001000
7
#define LED2      0x00002000
8
9
#define Button1    0x00000400
10
#define Button2    0x00000800
11
unsigned long tempbutton;
12
 
13
void wait(void)
14
{
15
int i;
16
for (i=0;i<0xfffff;i++)
17
  {
18
  __asm
19
   {
20
   NOP
21
   NOP
22
   NOP
23
   NOP
24
   NOP
25
   }
26
  }
27
28
}
29
void main()
30
{
31
   
32
  /* initialize the serial interface   */
33
  PINSEL0 = 0x00050000;           /* Enable RxD1 and TxD1              
34
      */
35
  U1LCR = 0x83;                   /* 8 bits, no Parity, 1 Stop bit     
36
      */
37
  U1DLL = 0x78;                   /* 9600 Baud Rate @ 14,7546MHz VPB
38
Clock    */
39
  U1LCR = 0x03;                   /* DLAB = 0                          
40
      */
41
  
42
  IO0DIR=0x00003000;       /* Einstellen der von P0.11 und P0.12 als
43
Ausgänge*/  
44
  IO0CLR=0x00003000;       /* P0.11 und P0.12 auf 0 Setzt(löschen)*/   
45
                
46
  printf ("Hello World\n");       /* the 'printf' function call   
47
           */
48
   while(1)
49
   {
50
        printf ("\nIO0PIN:<%xh>\n",IO0PIN);
51
        tempbutton = IO0PIN & Button1;
52
      printf ("tempbutton:<%xh>\n",tempbutton);
53
      wait(); 
54
      if( !(tempbutton == Button1))
55
      {
56
          IO0SET = LED1|LED2; /* P0.11 und P0.12 auf 1 Setzt(setzen)*/
57
        wait();
58
      }
59
      tempbutton = IO0PIN & Button2;
60
      printf ("tempbutton:<%xh>\n",tempbutton);
61
      wait();
62
      if(!(tempbutton == Button2))
63
      {
64
        IO0CLR = LED1|LED2;  /* P0.11 und P0.12 auf 0 Setzt(löschen)*/
65
        wait();
66
      }
67
    }
68
}
Passt bei meinem Code etwas nicht oder hat das Board etwas?


Ich danke euch für die Hilfe.
mfg Schoasch

PS.: Ich programmiere mit µVision3

von Schoasch (Gast)


Lesenswert?

Hat keiner eine Idee oder vl das selbe Problem? Passt der Code?

von methyl (Gast)


Lesenswert?

Was kommt denn bei der UART heraus?

von Schoasch (Gast)


Lesenswert?

UART funktioniert einwandfrei. Die LEDs ja auch. Nur die Taster nicht.
Immerhin hab ich ja bei den Stiftleisten ca 5V und bei dem Taster
direkt 3.3V.... dabei sollte das gleich sein.

Hast du das ganze schon getestet? Blinken die LEDs bei dir?

von methyl (Gast)


Lesenswert?

Was heißt "die LEDs auch". Du schaltest ja die LEDs mit den Tastern?
Bitte um Erklärung.

Ich meinte, was für eine Ausgabe kommt beim UART raus?

von Dietmar (Gast)


Lesenswert?

@Schoasch:

>Die Taster sind an P0.10(Button1) und P0.11 angeschlossen.

>IO0DIR=0x00003000; /* P0.11 und P0.12 als Ausgänge*/
>IO0CLR=0x00003000; /* P0.11 und P0.12 auf 0 Setzt(löschen)*/

Mann, da ist doch was faul:

Müßte für P1.10 und P1.11 so heißen:

IO0DIR=0x00000C00; /* P0.10 und P0.11 als Ausgänge*/
IO0CLR=0x00000C00; /* P0.10 und P0.11 auf 0 Setzt(löschen)*/

So ein Holzauge, kann aber jedem mal ins Wasser fallen, oder? :-)

Ist das damit geklärt?

Gruß

Dietmar

von Schoasch (Gast)


Lesenswert?

Ähm ja im Kommentar habe ich mich verschrieben. Die LEDs hängen an P0.12
und P0.13.

Also sollte das setzen von IO0DIR richtig sein. Weil ja überall wo
"1" im IO0DIR Register steht, wird ja als Ausgang definiert.

von Dietmar (Gast)


Lesenswert?

OK, IODIR und IOCLR scheinen richtig.

von Dietmar (Gast)


Lesenswert?

Ich kenne das Olimex Board nicht. Sind die Taster an P0.10 und P0.11
gegen einen der Pegel Masse oder 3,3V geschaltet und gibt es Pullup-
oder Pulldown-Widerstände?

von Schoasch (Gast)


Lesenswert?

So. Ich hab das Problem gelöst. Das Programm stimmt. Die Register wurden
alle richtig gesetzt.  Der Fehler war bzw ist, ein falscher Schaltplan.
Da dürfte Olimex einen ziemlich mist Zusammen gemacht haben!!

Hier der Schaltplan.

http://www.olimex.com/dev/images/lpc-p2124-sch.gif

Wo ist nun der Fehler? Die Taster sind an P0.15 und P0.16 angeschlossen
und nicht an P0.10 und P0.11. Somit dürfte der Anschluss für 1-Wire auch
falsch sein.

Sollte man solche Fehler an Olimex schicken?

mfg SChoasch

von Dietmar (Gast)


Lesenswert?

@Schoasch:

An deinem Programm konnte ich auch nichts mehr finden.

>Sollte man solche Fehler an Olimex schicken?

Klar, wenn du es nicht tust, wer tut es sonst?

Das sind alles auch nur fehlbare Menschen, die mit Sicherheit dankbar
für jeden Hinweis sind.

So kommen doch zum Teil auch die ERRATA der Chiphersteller zustande,
und das ist gut so.

Gruß

Dietmar

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.