mikrocontroller.net

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


Autor: Mäx (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pullup einschalten.


Peter

Autor: Mäx (Gast)
Datum:

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

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.