hallo ik heb dit geprogrameert in proton ide:

DEVICE 16F628A

CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF, PWRTE_ON,LVP_OFF ,MCLRE_OFF
ALL_DIGITAL TRUE

SYMBOL UITGANG = PORTA.1
SYMBOL INGANG = PORTB.0

prog:

WHILE 1=1
IF INGANG = 1 THEN HIGH UITGANG
DELAYMS 15000
WEND

INGANG=0
GOTO prog

END

maar het werkt niet voor wat het moet dienen

even de werking

op de ingang poort B,0 komt de ingang van de plc,
dan zou de uitgang hoog moeten worden poort A,1
deze zou 15 seconden moet opblijven en dan af gaan

de pic kan zich alleen "resetten" als de ingang laag is
(die van de plc komt)
d.w.z dat de pic terug moet wachten voor te reageren tot de ingang terug hoogemaakt word

kan iemand me verder helpen

Hij blijft in deze lus hangen:

WHILE 1=1
IF INGANG = 1 THEN HIGH UITGANG
DELAYMS 15000
WEND

hoe kan ik dit oplossen

ik ben nog niet zo lang met pic bezig

while 0=1

klopt dit dan

[Bericht gewijzigd door nonkel_dw op ]

DEVICE 16F628A

CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF, PWRTE_ON,LVP_OFF ,MCLRE_OFF
ALL_DIGITAL TRUE

SYMBOL UITGANG = PORTA.1
SYMBOL INGANG = PORTB.0

WHILE 1=1
IF INGANG = 1 THEN
HIGH UITGANG
DELAYMS 15000
ELSE LOW Uitgang
ENDIF
WEND

END

Ofzo?

Op 27 februari 2007 19:30:37 schreef Zoefje:
Hij blijft in deze lus hangen:

WHILE 1=1
IF INGANG = 1 THEN HIGH UITGANG
DELAYMS 15000
WEND

Zover was ik nog niet eens :+ Maar zonder TRISA zie je nog niks.

dus wel, de TS gebruikt HIGH & LOW, twee 'kludge' commando's.

[Bericht gewijzigd door Henry S. op ]

En zoals Henry al als een stille hint gaf.
Standaard zijn alle pinnen van de 628a
als ingang gedefinieerd. Je zal dus de uitgang
1 op poort A als uitgang moeten zetten.

En zoals henry zei, kan je dat instellen
in het trisA register. In picbasic kan je gewoon
zetten.


output UITGANG

Dit moet je dan plaatsen tussen je symbol
declaraties en je while loop.

dat prog dat jullie me gegeven hebben werkt niet de led blijft altijd branden
de led mag alleen branden als de uitgang hoog is en gaat 15 sec aan en dan uit
dan pas wachten tot de uitgang terug hoog word gemaakt
als deze nu nog moest hoog zijn mag die daar op nog niet reageren

aleen reageren als hij laag geweest is en dan terug hoog is dus reageren

[Bericht gewijzigd door nonkel_dw op ]

Je moet je vraag beter stellen.
Moet de tijd al gaan lopen als de ingang hoog is of als de puls weer wegvalt?
Want voorgaande voorbeeld programma klopt dan niet.

Deze wacht steeds 15 seconden en kijkt dan pas of de poort hoog is.
Als je dus een puls op ingang zet, kan de PIC net in de 15 seconden routine zitten en mis je de puls.
De DELAYMS moet (waarschijnlijk) pas gaan lopen als de ingang HOOG is, of heb ik het mis?

Hoe meer gegevens = Des te beter het antwoord

is de voorgaande uitleg beter ?


DEVICE 16F628A

CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF, PWRTE_ON,LVP_OFF ,MCLRE_OFF
ALL_DIGITAL TRUE

SYMBOL UITGANG = PORTA.1
SYMBOL INGANG = PORTB.0

WHILE 1=1               ' never ending loop
   WHILE INGANG = 0     ' wachten op hoog ingang
   WEND

   HIGH UITGANG         ' zet uitgang hoog
   DELAYMS 15000        ' wacht 15s
   LOW UITGANG          ' zet uitgang laag

   WHILE INGANG = 1     ' controleer ingang
   WEND                 ' blijf loopen indien ingang = 1
WEND                    ' never ending loop 


END

[Bericht gewijzigd door shortcircuit op ]

Sorry maar je uitleg blijft echt onduidelijk, kan ook aan mij liggen.

De PLC stuurt een puls naar de ingangspin op de microcontroller en dan?

De uitgangspin moet na deze puls 15 seconden lang HOOG worden? en uiteraard na 15 seconde dus weer laag.

Verklaar je nader! Je krijgt voor het bovenstaande zoiets.


DEVICE 16F628A

CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF, PWRTE_ON,LVP_OFF ,MCLRE_OFF
ALL_DIGITAL TRUE

SYMBOL UITGANG = PORTA.1
SYMBOL INGANG = PORTB.0
OUTPUT UITGANG

WHILE 1=1                     'Programma loop
   WHILE INGANG = 0: WEND     'Wachten op de ingang hoog
 
   HIGH UITGANG               'Uitgang hoog zetten
   DELAYMS 15000              '15 seconden wachten
   LOW UITGANG                'Uitgang weer laag

   WHILE INGANG = 1: WEND     'Wachten op ingang laag
WEND

'Einde programma
END

[Bericht gewijzigd door ReDdiE op ]

ik ga nog een een poging doen :)

de plc stuurt een hoog signaal naar de pic

de pic moet als de ingang hoog is de uitgang 15sec hooghouden
als de 15sec om zijn dan moet deze uitgang terug laag worden

dan moet de pic gaan kijken of de uitgang al terug hoog is
maar het kan meer als 5 minuten duren voor waneer het signaal dat van de plc komt terug laag is maar dan mag de pic de uitgang niet terug 15 sec hoog maken
dit is voor een buzzer te sturen die 15 sec moet lawaai maken maar die staat in serie met een signaal lamp
je kan alleen de reset knop op bediening paneel indrukken als de hele installatie stil staat dit kan zo als ik al zij meer als 5 minuten duren maar die buzzer moet de eerste 15 sec lawaai maken en dan zwijgen tot de volgende fout melding binne komt

snappen jullie wat ik bedoel

Op 27 februari 2007 19:58:55 schreef ReDdiE:
Sorry maar je uitleg blijft echt onduidelijk, kan ook aan mij liggen.

Ligt niet aan jouw.
Stellen vraag duidelijk antwoord beter is.
(En in goed Nederlands hoort daar dus ook bij).

EDIT:
Je laatste poging is al wat beter.

dat laatste programma moet het doen denk ik:

het wacht op een HOOG signaal ingang
dan wordt de uitgang = 1
na 15s terug laag
en wacht het prog op LAAG signaal ingang
en dat in een never ending loop

anders moet je op + flank gaan testen van de ingang, dat gaat ook...

Zie mijn aangepaste post, een paar terug!

[Bericht gewijzigd door ReDdiE op ]

inderdaad ReDdiE,

en marsjeert het nonkel_dw ?

[Bericht gewijzigd door shortcircuit op ]

nu nog effe een vraag waarom staat er ; output uitgang
is dat omdat alle pinnen op de 16f628 als ingang zijn ingestelt ?

just daarvoor is die output statement, maar dat had ik een paar post eerder ook al uitgelegd.

en zoals shortcircuit steeds vraagt, stel ik hem ook maar eens: Werkt het al?

nu hoop ik toch dat de uitgang van de plc (24V) getransformeerd is naar 5V voor de pic >:)
anders zou je picje wel eens opgeblazen kunnen zijn ;-)

[Bericht gewijzigd door shortcircuit op ]

NEE HET WRKT NOG NIET TO MEN GROTE SPIJT

nu heb nog iets geschreven

de werking

ik krijg hoog signaal van de plc dus de ingang word hoog en dan stuurt deze de uitgang hoog
nu blijft de uitgang hoog tot deze reset word met een andere ingang (drk)

ik moet altijd de buzzer kunnen stoppen met de reset knop
de buzzer kan maar terug opspringen als de plc uitgang laag geweest is

en het programma mag pas reset worden als de ingang van de plc terug laag is

klopt deze code dan dit is zonder timer
er zit nog wel en fout in want ik krijg het niet gecomprimeert to hex
iemand hulp

DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF, PWRTE_ON,LVP_OFF ,MCLRE_OFF
ALL_DIGITAL true

SYMBOL plc = PORTA.1
SYMBOL drk = PORTA.0
SYMBOL bzer = PORTB.0
OUTPUT bzer

prog:

WHILE 1=1
IF plc = 1 THEN
HIGH bzer
WEND
WHILE 1=1
IF drk=1 THEN
LOW bzer
WEND

WHILE 1=1
IF plc = 0 THEN
GOTO prog
WEND

END

Je hebt "IF" gebruikt, maar het commando "ENDIF" vergeten. Dat staat als het goed is onderaan bij Proton.

nu heb ik denk de fout gevonden

de pic mag pas terug naar zijn prog gaan (goto)programma "prog"
als de plc ingang (porta.1) terug laag is is dit geen ander comando?

die ENDIF moet die overal in staan dus tussen alle while en wend