mikrocontroller.net

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


Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <stdio.h>                /* prototype declarations for I/O
functions */
#include <LPC21xx.H>              /* LPC21xx definitions               
      */

#define LED1      0x00001000
#define LED2      0x00002000

#define Button1    0x00000400
#define Button2    0x00000800
unsigned long tempbutton;
 
void wait(void)
{
int i;
for (i=0;i<0xfffff;i++)
  {
  __asm
   {
   NOP
   NOP
   NOP
   NOP
   NOP
   }
  }

}
void main()
{
   
  /* initialize the serial interface   */
  PINSEL0 = 0x00050000;           /* Enable RxD1 and TxD1              
      */
  U1LCR = 0x83;                   /* 8 bits, no Parity, 1 Stop bit     
      */
  U1DLL = 0x78;                   /* 9600 Baud Rate @ 14,7546MHz VPB
Clock    */
  U1LCR = 0x03;                   /* DLAB = 0                          
      */
  
  IO0DIR=0x00003000;       /* Einstellen der von P0.11 und P0.12 als
Ausgänge*/  
  IO0CLR=0x00003000;       /* P0.11 und P0.12 auf 0 Setzt(löschen)*/   
                
  printf ("Hello World\n");       /* the 'printf' function call   
           */
   while(1)
   {
        printf ("\nIO0PIN:<%xh>\n",IO0PIN);
        tempbutton = IO0PIN & Button1;
      printf ("tempbutton:<%xh>\n",tempbutton);
      wait(); 
      if( !(tempbutton == Button1))
      {
          IO0SET = LED1|LED2; /* P0.11 und P0.12 auf 1 Setzt(setzen)*/
        wait();
      }
      tempbutton = IO0PIN & Button2;
      printf ("tempbutton:<%xh>\n",tempbutton);
      wait();
      if(!(tempbutton == Button2))
      {
        IO0CLR = LED1|LED2;  /* P0.11 und P0.12 auf 0 Setzt(löschen)*/
        wait();
      }
    }
}
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

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner eine Idee oder vl das selbe Problem? Passt der Code?

Autor: methyl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was kommt denn bei der UART heraus?

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: methyl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, IODIR und IOCLR scheinen richtig.

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.