Forum: Mikrocontroller und Digitale Elektronik PIC18F2550 mit Taster LED ansteuern


von Robin L. (robin_l)


Lesenswert?

Hallo,

ich habe mir eine kleine Controllerplatine aufgebaut mit einem 
PIC18F2550.
Nun möchte ich eine LED ansteuern die am Pin RB4 liegt mit einem Taster 
der am Pin RB3 liegt.

Habe dieses Programm geschrieben:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <p18f2550.h>
4
5
void main() {
6
    int taster;
7
      TRISBbits.TRISB4=1;      
8
        TRISBbits.TRISB3=0;
9
10
    while(1){
11
        taster=PORTBbits.RB4;
12
13
        if(taster == 1){
14
            LATBbits.LATB3 = 1;
15
16
        }else
17
            LATBbits.LATB3 =0;
18
    };
19
    
20
21
    return (0);
22
}

Jedoch funktioniert mein vorhaben nicht.
Wäre sehr toll wenn Ihr mir helfen könntet!!
Danke schon mal im Vorraus!

von instr (Gast)


Lesenswert?

Die LED schaltet so schnell ein und wieder aus, wie dein 
Programdurchlauf ist.

Ich mache das immer mit einem Capture oder Port-Pin Interrupt, weiss 
aber nicht ob das dein Controller hat.

von Karl H. (kbuchegg)


Lesenswert?

Robin L. schrieb:
> mit einem Taster
> der am Pin RB3 liegt.

Wie, genau, hast du den Taster angeschlossen?

Hast du externe Pullup oder Pulldown Widerstände?

von Karl H. (kbuchegg)


Lesenswert?

instr schrieb:
> Die LED schaltet so schnell ein und wieder aus, wie dein
> Programdurchlauf ist.

Warum sollte sie das tun?

von Tobi D. (fanti)


Lesenswert?

laut deiner beschreibung liegt der Taster an RB3 und die Led an RB4, 
programmiert hast du es aber andersrum

von Robin L. (robin_l)


Lesenswert?

Hey,
vielen Dank für eure Antworten.
Der Taster besitz einen externen Pull-Down-Widerstand.
Trotz der Verbesserung klappt es noch immer nicht.. :/
Habe noch eine Delay-Funktion gefunden...

Hier nochmals das korrigierte Programm:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <p18f2550.h>
4
#include <delays.h>
5
6
7
void main() {
8
9
10
      TRISBbits.TRISB4=0;
11
        TRISBbits.TRISB3=1;
12
13
    while(1){
14
15
        if(PORTBbits.RB3 == 0){
16
            LATBbits.LATB4 = 1;
17
            Delay10KTCYx(100);
18
        }else
19
            LATBbits.LATB4 =0;
20
21
    };
22
    
23
24
    return (0);
25
}

von Chris B. (dekatz)


Lesenswert?

Dein PORTB.3 ist nicht auf DIGITAL umgeschaltet und arbeitet nach einem 
Reset als ANALOG-Eingang AN9.
Probier mal bei der Initialisierung ADCON1 = 0x0F, dann sollte auch der 
Taster machen was er sollte.

von MP (Gast)


Lesenswert?

Oder am Anfang (nach den #include ...)

#pragma config PBADEN = OFF

Gruß

MP

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.