
Yes… Finally developed my time delay.
It works… perfectly!
I used an PIC 16F84 from microchip. An (old) microcontroller,
together with the MPLAB IDE from microchip and the CC5X Compiler from www.bknd.com.
If you want more info…
Mail me at:
r.toonders@chello.nl
Here is the code:
/*
DELAY FUNCTIE (ONE-SHOT)
Project: Garage Gebr. Toonders BV
Roldeur sturing dmv een Auerswald Commander Basic 2TSM module
2TSM instellingen: 17 omhoog (Relais contact 1min hoog)
18 stop (Relais contact 1min hoog)
19 omlaag (Relais contact 1min hoog)
MCU: PIC 16F84
Inst: OSC=XT;WDT=on;PWRT=on;CP=off
Ontwerper: Ruud Toonders
Datum: 9 januari 2004
Plaats: Bergeijk
Werking:
3 ingangen en 3 uitgangen
Per opgaande flank op de ingang,
geeft de uitgang puls van 1 seconde (een one-shot)!
Dus…
IN1 ^^^^^^^^^^^^^^^^^__
OUT1 ^^^^^^^^___
1sec 1sec
Hetzelfde geldt voor IN2…OUT2 en IN3…OUT3
*/
#pragma bit IN1 @ PORTB.0
#pragma bit IN2 @ PORTB.1
#pragma bit IN3 @ PORTB.2
#pragma bit OUT1 @ PORTA.0
#pragma bit OUT2 @ PORTA.1
#pragma bit OUT3 @ PORTA.2
#pragma bit RBPU @ 0x81.7 //port B RBPU define
void delay10( char n)
/*
Delays a multiple of 10 milliseconds using the TMR0 timer
Clock : 4 MHz => period T = 0.25 microseconds
1 IS = 1 Instruction Cycle = 1 microsecond
error: 0.16 percent
*/
{
char i;
OPTION = 7;
do {
clrwdt(); // only if watchdog enabled
i = TMR0 + 39; /* 256 microsec * 39 = 10 ms */
while ( i != TMR0)
;
} while ( --n > 0);
}
bit OLDIN1;
bit OLDIN2;
bit OLDIN3;
bit ST1;
bit ST2;
bit ST3;
void main( void)
{
PORTA = 0x00; /* init /
TRISA = 0x00; / all outputs /
PORTB = 0x00; / init /
TRISB = 0xFF; / all inputs */
T0CS=0; //timer internal
RBPU=0; //Port B pull up weerstanden enabled.
OLDIN1=1;
OLDIN2=1;
OLDIN3=1;
while(1){
ST1=IN1;
ST2=IN2;
ST3=IN3;
if ((ST1!=OLDIN1)&&(ST1==0)){
OUT1=1;
// delay_ms(1);
delay10(200);
OUT1=0;
}
if ((ST2!=OLDIN2)&&(ST2==0)){
OUT2=1;
// delay_ms(1);
delay10(200);
OUT2=0;
}
if ((ST3!=OLDIN3)&&(ST3==0)){
OUT3=1;
// delay_ms(1);
delay10(200); //1 sec
OUT3=0;
}
OLDIN1=ST1;
OLDIN2=ST2;
OLDIN3=ST3;
delay10(20); // key debounce 0.1sec
clrwdt(); // needed only if watchdog is enabled
}
}