Pic 18F2560 Zähler

Gast #4208818
Lesenswert?

Hallo zusammen,
ich wollte mal mit einem pic18f2550 einen zähler programmieren (Mplab 
8.92, c18 complier).
dieser zähler soll durch zwei taster auf bzw. abwärtszählen und jeweils 
den zählerwert mit einer led anzeigen.

mein problem ist, dass wenn ich von 2 auf 3 zählen will die 3. led nur 
solange leuchtet bis der taster losgelassen wird... von 1 auf 2 
funktioniert es aber.
Hat jemand eine idee was der fehler sein könnte?



#include "p18cxxx.h"
#include "delays.h"
#pragma config OSC=HS, PWRT=ON, WDT=OFF, PBAD=DIG, LVP=OFF

int i=1;
void delay100ms (void)
  {  long  int x;  for (x=0;x<28000;x++);   }
void main (void)
{
TRISB = 0b00000011;
TRISC = 0b00000000;

while(1)
{

  if ((PORTBbits.RB0 == 1) && (i<3))
      {
      delay100ms();
      if (PORTBbits.RB0 == 1)
      {
      i++;
      }
      }

  if ((PORTBbits.RB1 == 1) && (i>1))
      {
      delay100ms();
      if (PORTBbits.RB1 == 1)
      {
      i--;
      }
      }

  if (i==1)
      {
      PORTBbits.RB2 = 1;
      }
  else
      {
      PORTBbits.RB2 = 0;
      }

  if (i==2)
      {
      PORTBbits.RB3 = 1;
      }
  else
      {
      PORTBbits.RB3 = 0;
      }

  if (i==3)
      {
      PORTBbits.RB4 = 1;
      }
  else
      {
      PORTBbits.RB4 = 0;
      }

}
}

mfg
#4208855
Lesenswert?

Ich hab den Code (mit anpassung der Pins) mal auf meine PIC Board laufen 
lassen und kann den Fehler nicht reproduzieren. Wie sieht deine 
Schaltung aus? Schaltplan?

Wenn das mit dem Delay eine Entprellroutine sein soll, such dir lieber 
eine bessere. Siehe Entprellung


P.S.
Wenn du die C-Formatierung* verwendest und deinen Code vernünftig 
einrückst wird dein Code besser lesbar:
1
*[C]C-Code[/C]
Gast #4208867
Lesenswert?

verwende ein pic test board (weiß jetz nicht genau wie es heißt)
ok dann werde ich es auf meinen 2. board probieren oder mit einem neuem 
pic
das heißt es sollte so funktionieren wie mein code ist?
#4211411
Lesenswert?

Hallo,

Ich würde je einen steigenden Interrupt für hoch und einen für runter 
nehmen. Kannst natürlich auch einen Timer 0,5 s machen, welcher die 
Taster abfragt und bei gedrücktem Taster für 1s dann den Wert um zwei 
erhöht. Eine while Schleife wie bei SPRUT auf der Homepage geht auch. 
Dafür müsste man aber viel mehr Infos haben was das werden soll..

Grüsse

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren