Halo beste geleerde.

Ik heb een potmeter aangesloten op AN1 van een PIC16f877A
XTAL = 20

RAW waarde van de potmeter is 19 to 1023

De bedoeling is: bij iedere verhoging van het getal moet er een pulse worden gemaakt op een poort.
Dat lukt me ook, alleen is de pulse niet zo snel als dat het getal zich optelt op aftrekt.

Hier een stukie code:

SYMBOL DIRECTION = PORTC.2
SYMBOL PULSE = PORTC.1

DIM X AS WORD
DIM X1 AS WORD

WHILE 1=1
X= ADIN 1

IF X > X1 THEN
DIRECTION = 1
TOGGLE PULSE
X1 = X
END IF

IF X < X1 THEN
DIRECTION = 0
TOGGLE PULSE
X1 = X
ENDIF
WEND

Wie weet hier een andere oplossing voor

Ik doe dat nooit in BASIC met uC's, maar ik wil je wel helpen.

De TOGGLE maakt de betreffende poort het complement van wat hij is. Als jij van 115 naar 116 gaat met je potmeter zou PORTC.1 dus bijvoorbeeld van laag naar hoog gaan. Pas bij 116 naar 117 gaat hij weer laag. Je hebt dan dus voor 115 naar 117 slechts 1 'pulsje' gehad. Je zou dat op kunnen lossen door in plaats van TOGGLE gewoon achter elkaar te zetten:

PULSE=1 
PULSE=0

Maar misschien bedoel je dat niet, maar heb je het probleem dat hij het draaien niet bij kan houden. Je weet in BASIC natuurlijk niet hoe snel je weet terug bent en wat je aan pulsen hebt gemist. Maar je kunt wel de pulsen die je hebt gemist weer goedmaken later. Zoiets:


SYMBOL DIRECTION = PORTC.2
SYMBOL PULSE = PORTC.1

DIM X AS WORD
DIM X1 AS WORD
DIM A AS WORD

WHILE 1=1
  X= ADIN 1

  IF X > X1 THEN
    DIRECTION = 1
    FOR A=1 TO (X-X1)
      TOGGLE PULSE
    NEXT
    X1 = X
  END IF

  IF X < X1 THEN
    DIRECTION = 0
    FOR A=1 TO (X1-X)
      TOGGLE PULSE
    NEXT
    X1 = X
  ENDIF
WEND

Vergeef me dat de syntax van FOR misschien niet klopt, ik ken BASIC niet zo, maar daar kom je wel uit denk ik.

TOGGLE PULSE zou je dan dus eventueel nog kunnen vervangen door wat ik bovenin m'n post al voorstelde, als je dat tenminste het gewenste gedrag zou moeten zijn (maar misschien bedoel je een flank en geen puls en dan is het met TOGGLE juist goed).

Ahum,

Kijk eens in de manual naar het pulsout command.

Haha

het heeft al een heel eind geholpen.
Pulse = 1
Pulse = 0
werkt beter dan toggle in mijn opstelling.

Nou heb ik het volgende,
hoe kan ik de tijd meten dat ADIN van raw waarde veranderd.
Ik wil hiermee de pulse tijd mee maken.

Alvast bedankt