Forum: Mikrocontroller und Digitale Elektronik Pic 18F2560 Zähler


von pic18f (Gast)


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

von pic18f (Gast)


Lesenswert?

entschuldigung bitte wenn man sich einmal vertippt
pic18f2550 um das geht es aber nicht ;)

von Max H. (hartl192)


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]

: Bearbeitet durch User
von pic18f (Gast)


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?

von Max H. (hartl192)


Lesenswert?

pic18f schrieb:
> verwende ein pic test board (weiß jetz nicht genau wie es heißt)
Mit einem Board bit unbekannten Schaltplan zu arbeite ist nie eine gute 
Idee, such ihn besser raus…

von pic18f (Gast)


Lesenswert?

ja ich werde ihn suchen
gibt es noch eine andere möglichkeit solch einen zähler umzusetzen?

von Daniel E. (everyday_fun69)


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

von Max H. (hartl192)


Lesenswert?

Flanken Interrupt für Taster halte ich für keine gute Idee. Wie würdest 
du das mit der Entprellung lösen?
Ich würde eine Flankenerkennung im Timerinterrupt machen.

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.