So, hier ist der Schaltplan. Ich hatte leider nur Paint zur Hand
aber ich hoffe, dass man das wichtigste erkennen kann.
Die Wiederstände sind folgende:
drei 220 Ohm --> R1
R2 --> an Pin RB3 --> 800 Ohm
an den anderen Pins --> 4,7k
drei 270 Ohm --> R3 habe ich jetzt nachträglich dran gemacht
R2 sind pull up Wiederstände.
Die Vierecke am Port B sind Pins um später ein Display anzuschliessen.
So, hier kommt der Code:
Code:
#include <pic1687x.h>
#define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
//-------------------------------------------------------------------------
void main (void)
{
TRISA = 0x00; //Port A = Ausgang mit LEDs
TRISB = 0x00011111; //RB0 - RB4 = Eingänge, RB5 - RB7
//= Ausgänge
//RB0 brauchen wir im Moment nicht
PORTA = 0b00000000;
PORTB = 0b00001110; // RB5-RB7 auf Low und RB1-RB4 auf High
//RB1 - RB4 auch mit Pull-up Wiederständen auf High
//RB4 scheint vertauscht zu sein. Bei 0 ist er High,
//bei 1 Low
do{
if (RB4 == 0){ //RB4 mit RB5, 6 oder 7 verbunden
PORTA = 0b00000001; //Led 1 geht an (das funktioniert richtig)
}
else if (RB3 == 0){ //funktioniert nur an RB5, 6 oder 7 OHNE
//Wiederstand R1!!!
PORTA = 0b00000010; //Led 2 geht an
}
else if (RB2 == 0){ //funktioniert nur an RB5, 6 oder 7 OHNE
//Wiederstand R1!!!
PORTA = 0b00000000; //Led 1 und 2 aus
}
else { //Keine Taste gedrück
PORTA = 0b00000011; //Led 1 und 2 an (funktioniert richtig)
}
}while (1); //immer wiederholen
}//()
Also ich habe keinen Grund gefunden warum das so nicht funktioniert.
Bei RB1 bis RB3 geht es ja nur wenn man R1 überbrückt.
Grüsse,
Tornado
Lesezeichen