ultimo aggiornamento 2 marzo 2009 |
Sui
fascicoli n° 64 e n° 65 dell'opera è presentato nella
sezione WORKSHOP il progetto di un
servotester basato sull'utilizzo del processore
PIC16F628 prodotto dalla Microchip. |
||
|
Elenco componenti |
|
R1,R8,R9 |
10 KΩ ¼W |
R2, R3 | 330 Ω ¼W |
R4, R5 | 1 KΩ ¼W |
C1 | 0,47 µF Poliestere |
C2 | 22 µF 10V Verticale elettrolitico |
IC1 |
|
IC2 |
|
Fet 1 - Fet 2 | BS-170 |
DOWN, UP, CENTER | Pulsanti da CS |
D1, D2 | Led rosso |
SERVO | strip 3 pin maschio |
Power |
Connettore Polarizzato di alimentazione |
PIC16F628 - FLASH-Based 8-Bit CMOS Microcontrollers | ||
|
||
Piedinatura | Datasheet | Foto dell'integrato |
LM2940 1A Low Dropout Regulator | ||
Piedinatura | Datasheet | Foto dell'integrato |
BS 170 N-Channel Enhancement Mode Field Effect Transistor | ||
Piedinatura | Datasheet | Foto del transistor |
Programma in C per la programmazione del PIC
/* Programma a pagina 5 Workshop
fascicolo 65 */ /* definizione dei parametri del programma */ #define CENTRATURA 15 #define T_MIN 11 #define T_MAX 19 #define PREMUTO 0 #define RILASCIATO 1 #define RITARDO 5 /* funzione principale */ void main() { /*indice per la gestione dei cicli */ int i; /* durata dell'impulso */ int durata_us = CENTRATURA; /* stato dei tre pulsanti di ingresso */ int stato_RA0 = RILASCIATO; int stato_RA1 = RILASCIATO; int stato_RA2 = RILASCIATO; /*configurazione delle porte del PIC. Porta A con in tre pin meno significativi in input e porta B configurata con tutti i pin in uscita. */ TRISA = 0b00000111; TRISB = 0b00000000; /* disattivazione dei comparatori del 16F628 */ CMCON = 0b00000111; while(1) { /*inizio dell'impulso con l'innalzamento dell'output RB0 */ PORTB.F0 = 1; /*generazione del ritardo di impulso */ for(i=0; i<durata_us; i++) Delay_us(100); /*termine dell'impulso con l'abbassamento dell'output RB0 */ PORTB.F0 = 0; /*inizio gestione dei pulsanti */ /*rilevamento dei rilasci se la variabile di stato dei pulsanti ha registrato 1a pressione, ma il bit corrispondente segnala il pulsante rilasciato, E' stato ultimato il click */ /* pulsante di decremento */ if(stato_RA0 == PREMUTO && PORTA.F0==RILASCIATO) { durata_us--; /* decremento la durata */ /* se la durata dell'impulso ha superato il limite minimo, la correggo */ if (durata_us<T_MIN) durata_us = T_MIN; } /* pulsante di centratura */ if(stato_RA1 == PREMUTO && PORTA.F1==RILASCIATO) { durata_us = CENTRATURA; /* decremento la durata */ } /* pulsante di incremento */ if(stato_RA2 == PREMUTO && PORTA.F2==RILASCIATO) { durata_us++; /* decremento la durata */ } /* se la durata dell'impulso ha superato il limite massimo, la correggo */ if (durata_us>T_MAX) durata_us = T_MAX; } /*rilevamento della pressione dei pulsanti e memorizzazione degli stati */ stato_RA0 = PORTA.F0; stato_RA1 = PORTA.F1; stato_RA2 = PORTA.F2; /* controllo degli estremi di impulso */ if(durata_us == T_MAX) PORTB.F7 = 1; else PORTB.F7 = 0; /* controllo degli estremi di impulso */ if(durata_us == T_MIN) PORTB.F6 = 1; else PORTB.F6 = 0; /* generazione del ritardo di chiusura */ for(i=0; i<RITARDO; i++) Delay_us(100); /* si chiude il ciclo di funzionamento del firmware */ } |
Elenco revisioni | |
02/03/2009 | Emissione preliminare |