BCD Schalter einlesen, Anzeige durch LED

Gast #809408
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
Gast #809421
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;
Gast #809494
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.