Forum: Mikrocontroller und Digitale Elektronik PIC Tastenabfrage


von Maximilian K. (Gast)


Lesenswert?

Hallo,
kann mir jemand einen gefallen tun?

Ich hab hier ein PIC18f4550
verwende dazu einen 20MHz Quartz und habe drei Schalter an (RE0, RE1, 
RE2) angeschlossen, dazu sind noch an den PORT's RC2 RB6 & RB7 LED's 
angeschlossen.

Ich Programmiere in Microchip C18

Nun kurz zum Programm und desen Funktion:
Taster 1 einmal drücken LED1 leuchtet (RC2)
Taster 1 nocheinmal drucken LED1 geht wieder aus

Taster 2 einmal drücken LED2 leuchtet (RB6)
Taster 2 nocheinmal drucken LED2 geht wieder aus

Taster 3 einmal drücken LED1 leuchtet (RB7)
Taster 3 nocheinmal drucken LED3 geht wieder aus

Die Taster sind über Pullup und einem Vorwiderstand an den Ports 
angschlossen und werden gegen GND geschaltet
Betriebspg: 5V

Ich habe mal ein bischen versucht:
1
   /** I N C L U D E S **********************************************************/
2
#include <p18cxxx.h>
3
 
4
5
/** Configuration ********************************************************/
6
#pragma config FOSC = HS   //CPU=20 MHz
7
#pragma config PWRT = ON
8
#pragma config BOR = OFF
9
#pragma config WDT = OFF  //Watchdog Timer
10
#pragma config LVP = OFF  //Low Voltage ICSP
11
12
13
#define led1  LATBbits.LATB7
14
#define led2  LATBbits.LATB6
15
#define led3  LATCbits.LATC
16
17
18
#define taster1  PORTEbits.RE0
19
#define taster2  PORTEbits.RE1
20
#define taster3  PORTEbits.RE2
21
22
23
/** D E C L A R A T I O N S **************************************************/
24
#pragma code
25
26
void main(void)
27
{
28
  TRISB = 0;
29
  TRISC = 0;
30
  TRISE = 1;
31
32
33
  while(1)
34
  {
35
  if (taster1 == 1) {
36
    led1 = 1;
37
  } else {
38
    led1 = 0;
39
  }
40
  if (taster2 == 1) {
41
    led2 = 1;
42
  } else {
43
    led2 = 0;
44
  }
45
  if (taster3 == 1) {
46
    led3 = 1;
47
  } else {
48
    led3 = 0;
49
  }
50
  }
51
 }

Leider Funktioniert es nicht (das die LEDs nicht anbleiben beim drücken 
ist mir klar (dazu ist das Programm "noch" nicht im Stande... :)))

Kann mir Jemand helfen BITTE


MfG
Maximilian

von Maximilian K. (Gast)


Lesenswert?

noch ein fehler ist wohl beim kopieren passiert:
#define led3  LATCbits.LATC2;

von Maximilian K. (Gast)


Lesenswert?

bei euch im Forum gehts ja rund, aknn mir aber keiner Helfen?

von Peter D. (peda)


Lesenswert?


von Severino R. (severino)


Lesenswert?

Musst TRISE auf 7 einstellen. Mit TRISE = 1 ist nur RE0 ein Eingang, die 
anderen sind Ausgänge.

von Christoph K. (klemze)


Lesenswert?

Ich will deine Kenntnisse ja nicht in Frage stellen aber warum  machst 
du das ganze nicht mit Interrupts?

von kurz (Gast)


Lesenswert?

Interrupt? Zu was?


Das Problem in Deinem Programm ist, daß die Eingaben der Tasten und 
Ausgaben auf die Led entkoppelt werden müssen. Will heißen:

Taste gedrückt ->
a) Led ist aus -> Led einschalten
b) Led ist ein -> Led ausschalten

Taste nicht gedrückt -> nix tun


und gut.

von Christoph K. (klemze)


Lesenswert?

Hallo!?

er benötigt 3 Taster, und beim PIC 18F4550 bieten sich 3 externe 
Interrupts an zur benützung an....oder halt Interrupt on Change Port 
B...wie auch immer....

von kurz (Gast)


Lesenswert?

Der TE sucht ein einfaches Programm. Ihm fehlen doch noch grundlegende 
Kenntnisse in der Programmierung.

Die Interruptlösung ist doch erst für etwas fortgeschrittene User, oder 
seh ich das falsch?

Was macht ein Prozessor in Deiner Interruptlösung? Er dreht 
Warteschleifen und macht nix oder er schläft vor sich hin. Da kann er 
doch ohne Performanceverlust 3 Tasten abfragen.

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.