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
entschuldigung bitte wenn man sich einmal vertippt pic18f2550 um das geht es aber nicht ;)
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
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?
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…
ja ich werde ihn suchen gibt es noch eine andere möglichkeit solch einen zähler umzusetzen?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.