Hoi,

Ik ben een vriend aan het helpen met de aansturing van z'n wissels voor z'n modeltreintjes.

De bedoeling is dat je op een drukknop(PORTA.0) drukt, uitgang PORTC.0 wordt hoog en blijft hoog. En als je dan weer drukt (drukknop op PORTA.0) dan wordt PORTC.0 laag.

Als PORTC.0 hoog is moet PORTC.1 een halve seconde hoog worden en dan terug laag.

Als PORTC.0 laag is moet PORTC.2 een halve seconde hoog worden en dan terug laag.

Het probleem is, dat in mijn programma, PORTC.1 en/of (afhankelijk van de toestand van PORTC.0) hoog BLIJFT in plaats van maar een halve seconde hoog is.

Dit is het programma :

DEVICE 16F690
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF
ALL_DIGITAL TRUE

PORTC.0 = 0 

begin:
IF PORTA.0 = 1 THEN
TOGGLE PORTC.0
ENDIF
IF PORTC.0 = 1 THEN
  HIGH PORTC.1
  DELAYMS 500
  LOW PORTC.1
ENDIF
IF PORTC.0 = 0 THEN
  HIGH PORTC.2
  DELAYMS 500
  LOW PORTC.2
ENDIF
GOTO begin

Ik weet waarom dit zo is. Ik weet echter niet hoe ik het moet oplossen.

[Bericht gewijzigd door klein is fijn op (2%)]

waarom?

[Bericht gewijzigd door shortcircuit op (86%)]

Omdat, als PORTC.0 hoog is, dan gaat hij PORTC.1 500 ms hoog maken, maar PORTC.0 blijft hoog, dus hij zal PORTC.1 blijven hoog maken.

Codetags even gefixed in startpost.

Wat je ook kan doen is een PIC met pin change interrupts pakken zoals een 10F200 (voor de prijs hoef je het niet te laten), en dan kan het nog veel simpeler.

[Bericht gewijzigd door klein is fijn op (42%)]