Forum: Mikrocontroller und Digitale Elektronik PIC - Problem mit Taster-Input bei 18F4550


von Tobias K. (babeck)


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

von Lehrmann M. (ubimbo)


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 !

von Tobias K. (babeck)


Lesenswert?

Super, funktioniert!

Danke für die schnelle Hilfe.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hi Tobias,
noch einen Tipp: Das kannst Du dir auch sparen:
1
unsigned char schleife = 1;
2
3
while(schleife == 1) {}

Einfach so, wenn es eine Endlosschleife sein soll:
1
while(1) {}

Somit ist der Wert immer wahr und du sparst dir die zusätzliche Variable 
=) Falls Du noch mehr Hilfe brauchst: http://pic-projekte.de/pic_c.html

Gruß Nico

von Tobias K. (babeck)


Lesenswert?

Super, danke für den Tipp!

und Danke für den Link. Sind super Projekte dabei! Hoffe ich bekomm 
sowas auch irgendwann hin.

Gruß Tobias

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.