Hallo,
Ik gebruik de 16f628 voor het decoderen van het signaal op mijn digitale spoorbaan. Dat gaat goed vwb de aansturing van de locs. Maar met de seinen loop ik tegen een probleem. Het seinsignaal zoals dat door de moedercomputer wordt gegeneerd is opgebouwd uit een adres en een 4-bits commando. Het hoogste bit hiervan (bit 3) is 1 voor het bekrachtigen en 0 voor het stoppen van de bekrachtiging van het sein, waarbij indertijd gedacht werd aan bijvoorbeeld een spoel. Van dat stop commando wil ik af, ik wil de led's van de seinen direct aan de PIC koppelen. De 3 andere bits geven het sein adres en rood of groen.
Het inschakelen van een sein gaat goed, maar het stopcommande doet de led weer uitgaan. Het stopcommande is 0000.Dit heb ik gepoogd te omzeilen door op bit 3 te testen. Als dat 0 is, niets doen. Alleen, de led gaat toch uit. De bekrachtingstijd is instelbaar, tussen 0.01s en 1.5s. Gedurende die tijd blijft de led ook aan. Het zit dus kennelijk in het niet negeren ven het stopcommando.
Wat doe ik fout? hieronder de code. Het probeem moet hem in de wait loop zitten. Het 4-bits commando heet snelh en wordt berekend in de interrupt routine.

start clrf flag
clrf tim1 ;reset time
movlw b'00111100' ;sein adres 12
movwf adres
clrf portA
movlw 0x07
movwf cmcon ;page33
bsf status,5 ;bank 1
movlw 0x01
movwf trisB ;RB0 is input, rest output
movlw b'00100000' ;
movwf trisA ;alle RA output behalve RA5
bcf option_reg,5 ;tmr0 CLKOUT
bcf status,5 ;bank 0
bsf intcon,7 ;enable interrupts
bsf intcon,5 ;enable tmr0 interr.
bsf intcon,4 ;enable RB0 interr.

wait btfss snelh,3 ;sein comando
goto wait
movf snelh,0
movwf portA
goto wait

end

Ik mis een berg code?

Klopt, er gaat nog een paar blz interrupt routine aan vooraf. Kan ik eventueel mailen.Bijgevoegd de signaalvormen. Ze zien er wat vreemd uit omdat ze trinair gecodeerd zijn.

Wat doet wat in die code? (dingen als 'page33' en 'adres12' zeggen me weinig...)

adres 12 is het adres van een groep van 4 seinen. De interrupt routine berekent uit de eerst 5 trits een adres en vergelijkt dat met het opgegeven adres (12). De volgende 3 trits zijn in feite binair en bevatten het subadres van een van de 4 seinen en of dat sein veilig of onveilig moet staan. Het laatste trit (bit) zegt bekrachtigen of niet bekrachtigen. De interrupt routine kijkt of het adres klopt en geeft dan de instructie door: welk van de 4 seinen, veilig of onveilig. De bedoeling is dat de PIC het baansignaal decodeert en de seinen (LEDs) aanstuurt. Een detail is dat het hele signaal (9 trits) 4x achter elkaar op de baan wordt gezet en pas wordt goedgekeurd als ze allemaal gelijk zijn
Blz 33 verwijst naar mijn handleiding van de PIC: initialize PORTA by setting the output latches, turn comparators off and enable pins for I/O functions.Ik heb dat domweg van de handleiding overgenomen.

Als het werkt zoals je zegt dan moet dit (wait) werken ja...
(als je met porta en snelh tenminste de goede bank hebt gekozen)