Forum: Mikrocontroller und Digitale Elektronik BCD Schalter einlesen, Anzeige durch LED


von Mäx (Gast)


Lesenswert?

Hallo Leute,

ich arbeite mit dem PICDEM 2 Plus Demoboard von Microchip und dem 
PIC18F4550.  Ich bin Neuling und möchte ein einfaches Programm 
schreiben, welches durch die 4 OnBoard LEDs anzeigt welche Zahl an einem 
BCD-Drehschalter (0-9) eingestellt wurde. Dürfte eigentlich nicht so 
schwer sein hab ich mir gedacht. Allerdings stimmen die LED Zustände 
überhaupt nicht mit der eingestellten Zahl überein und ändern sich meist 
auch gar nicht mehr wenn weiter geschaltet wird. Woran liegt das, was 
mach ich falsch? Irgendwelche Ideen? Bin dankbar für Hilfe.

Gruß Mäx

void main (void)
{
// Alle Pins sind digital
  ADCON1|=0x0F;

// RA1..RA3 und RA5 sind Eingänge
  TRISAbits.TRISA1=1;
  TRISAbits.TRISA2=1;
  TRISAbits.TRISA3=1;
  TRISAbits.TRISA5=1;

// Port B (LEDs) sind Ausgänge
  TRISB=0x0;
  PORTB=0x0;

while(1)
{

// Ist die Stelle Acht aktiv leuchtet die LED D5
  if(PORTAbits.RA5)
  {
    PORTBbits.RB3=1;
  }
  else
  {
    PORTBbits.RB3=0;
  }

// Ist die Stelle Vier aktiv leuchtet die LED D4
  if(PORTAbits.RA3)
  {
    PORTBbits.RB2=1;
  }
  else
  {
    PORTBbits.RB2=0;
  }

  // Ist die Stelle Zwei aktiv leuchtet die LED D3
  if(PORTAbits.RA2)
  {
    PORTBbits.RB1=1;
  }
  else
  {
    PORTBbits.RB1=0;
  }

// Ist die Stelle Eins aktiv leuchtet die LED D2
  if(PORTAbits.RA1)
  {
    PORTBbits.RB0=1;
  }
  else
  {
    PORTBbits.RB0=0;
  }

} // Ende while
} // Ende main

von crazy horse (Gast)


Lesenswert?

keine Ahnung vom PIC - läuft die Abfrage eines Eingangs genauso wie das 
Ansteuern eines Ausgangs?

Ist zwar nicht die Problemlösung, aber das Programm kannst du einfacher 
schreiben:
statt:

if(PORTAbits.RA5)
  {
    PORTBbits.RB3=1;
  }
  else
  {
    PORTBbits.RB3=0;
  }

PORTbits.RB3=PORTbits.RA5;

von Peter D. (peda)


Lesenswert?

Pullup einschalten.


Peter

von Mäx (Gast)


Lesenswert?

Hallo Peter,

die Sache mit den PullUps hab ich grade auch im Datenblatt gefunden und 
auch gleich umgesetzt mit

INTCON2&=0x7F;

Aber nur daran lag es leider nicht :-(

Mit dem ICD2 hab ich mir im Debug-Mode auch mal die beiden Ports im 
Watch Window angeschaut und gesehen, dass PortA schon die Werte nicht 
richtig übernimmt. Ist da noch was zu tun?

Die Änderungen von Crazy Horse hab ich so übernommen

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.