LPC:Code falsch oder Board defekt?

Gast #359451
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
Gast #359454
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?
Gast #359456
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
Gast #359457
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.
Gast #359460
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
Gast #359461
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.