mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC Tastenabfrage


Autor: Maximilian K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
   /** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
 

/** Configuration ********************************************************/
#pragma config FOSC = HS   //CPU=20 MHz
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF  //Watchdog Timer
#pragma config LVP = OFF  //Low Voltage ICSP


#define led1  LATBbits.LATB7
#define led2  LATBbits.LATB6
#define led3  LATCbits.LATC


#define taster1  PORTEbits.RE0
#define taster2  PORTEbits.RE1
#define taster3  PORTEbits.RE2


/** D E C L A R A T I O N S **************************************************/
#pragma code

void main(void)
{
  TRISB = 0;
  TRISC = 0;
  TRISE = 1;


  while(1)
  {
  if (taster1 == 1) {
    led1 = 1;
  } else {
    led1 = 0;
  }
  if (taster2 == 1) {
    led2 = 1;
  } else {
    led2 = 0;
  }
  if (taster3 == 1) {
    led3 = 1;
  } else {
    led3 = 0;
  }
  }
 }

 

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

Autor: Maximilian K. (Gast)
Datum:

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

Autor: Maximilian K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei euch im Forum gehts ja rund, aknn mir aber keiner Helfen?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Severino R. (severino)
Datum:

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

Autor: Christoph K. (klemze)
Datum:

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

Autor: kurz (Gast)
Datum:

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

Autor: Christoph K. (klemze)
Datum:

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

Autor: kurz (Gast)
Datum:

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

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.