PIC - Problem mit Taster-Input bei 18F4550

OP #2292401
Lesenswert?

Hallo liebe Forengemeinde.
Ich beschäftige mich nun seit einer Weile mit den PIC - Mikocontrollern. 
Bisher habe ich es geschafft Ausgänge an und auszuschalten. Bisher ist 
es mir jedoch nicht gelungen Werte einzulesen und zu verarbeiten. Ich 
habe mir dazu schon die Informationen bei: www.fernando-heitor.de, 
www.sprut.de und hier im Forum und anderen Seiten angesehen und komme 
irgendwie nicht auf den Fehler. Ich habe auch schon diverse 
codebeispiele genommen und versucht anzupassen.

Nun zu meinem Problem: Ich würde gerne den Wert eines Tasters einlesen 
und daraufhin eine LED einschalten. Beim loslassen des Tasters soll auch 
die LED wieder ausgehen. Also ein ganz simples vorhaben.

Umgebung :
Software :
Ich arbeite mit dem MPLAB-IDE v.8.73 und schreibe mein Programm in C.

Hardware :
Als Plattform kommt ein PIC-P40 zum Einsatz von Olimex.
Schaltplan: http://olimex.com/dev/pdf/PIC/PIC-P40.pdf
Als Chip ist ein 18F4550 verbaut.
Ich weiß nicht ob das wichtig ist aber die Chips brenne ich mit dem 
PIC-PG2 (auch von Olimex)->http://olimex.com/dev/index.html
Als Software kommt PICPgm Development Programmer v. 1.5.0.8 zum Einsatz.

Mein Code ist:
1
#include <p18cxxx.h>
2
#include "delays.h"                        // für die Wartezeit
3
  unsigned char schleife = 1;
4
#pragma config PWRT = ON
5
#pragma config BOR = OFF
6
#pragma config WDT = OFF  
7
#pragma config LVP = OFF
8
#pragma code
9
  void main(void)
10
  {
11
  LATA = 0x00; 
12
  TRISA = 0b00000000; // Alle Port auf Output
13
  TRISEbits.TRISE2 = 1; // Port E2 auf Input  
14
while(schleife == 1) 
15
{
16
  if(PORTEbits.RE2 == 1)
17
    {   
18
      LATAbits.LATA1 = 1;
19
      Delay10KTCYx(100);
20
      LATAbits.LATA1 = 0;    
21
    }
22
  if(PORTEbits.RE2 == 0)
23
    {   
24
      LATAbits.LATA1 = 1;
25
      Delay10KTCYx(50);
26
      LATAbits.LATA1 = 0;  
27
      LATAbits.LATA1 = 1;
28
      Delay10KTCYx(50);
29
      LATAbits.LATA1 = 0;  
30
    }
31
} //ende while
32
}//ende main
(Ich hoffe er ist nicht zu lange, sonst kann ich Ihn auch löschen und 
als Dateianhang anbinden)

Danke schonmal für die Hilfe!

Gruß Tobias
#2292420
Lesenswert?

ADCON1 = 00001111; // Alle ANx - Eingänge (vom AD-Wandler) sind digitale 
Eingänge

Tobias Kurz schrieb:

>       LATAbits.LATA1 = 0;
>       LATAbits.LATA1 = 1;

Was soll den das sein? Sinnlos.

zu deinem Problem:

Tobias Kurz schrieb:
> Ich würde gerne den Wert eines Tasters einlesen
> und daraufhin eine LED einschalten. Beim loslassen des Tasters soll auch
> die LED wieder ausgehen. Also ein ganz simples vorhaben.
1
#include <p18cxxx.h>
2

3
#pragma config PWRT = ON
4
#pragma config BOR = OFF
5
#pragma config WDT = OFF  
6
#pragma config LVP = OFF
7
#pragma code
8
  void main(void)
9
  {
10
  TRISA = 0b00000000; // Alle Port auf Output
11
  TRISEbits.TRISE2 = 1; // Port E2 auf Input
12
  ADCON1 = 00001111; // Alle ANx - Eingänge (vom AD-Wandler) sind digitale Eingänge  
13
  LATA = 0x00; // Zuerst TRIS, dann LAT !
14

15
while(1) 
16
{
17
  if(PORTEbits.RE2 == 1)
18
    {   
19
      LATAbits.LATA1 = 0; // invertierte Logik, da Pullupwiderstand Taster
20
    }
21
  if(PORTEbits.RE2 == 0)
22
    {   
23
      LATAbits.LATA1 = 1;
24
    }
25
} //ende while
26
}//ende main

LED leuchtet, wenn Taster gedrückt. Configbits bitte überprüfen, läuft 
der PIC überhaupts an?


Achso du weißt schon, dass die LED auf dem Olimexboard auf RA0 
geschalten ist und der Jumper gesetzt sein muss!

Dann müsste es LATAbits.LATA0 und nicht LATAbits.LATA1 heißten !

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren