Astabile multiplo ed economico

Ciao a tutti, devo realizzare una scheda che alla pressione di sei tasti mi generi in altrettante uscite un'impulso positivo per circa 15 secondi (ogni tasto e ogni uscita deve essere indipendente). Non posso utilizzare sei 555 perche ho l'esigenza di ridurre al limite il numero di componenti e di costi, avrei pensato di usare un pic e utilizzare l'ingresso analogico per leggere i tasti ma non sono pratico poi per la programmazione. Qualcuno ha qualche alternativa da consigliarmi o eventualmente qualche anima pia mi aiuterebbe nella programmazione? Grazie Luca

Reply to
Luca
Loading thread data ...

ok

per i costi non so poi quanto risparmi...

xchè usare l'ingresso analogico? a te serve un pic con almeno 12 i/o (6 per leggere lo stato pulsanti, 6 per gli impulsi in uscita) con un 16f628A dovresti farcela bene... ha l'oscillatore interno e resistenze di pull-up integrate per cui riduci al minimo il numero di componenti esterni. Costo: circa 2 euro per il firmware è semplicissimo, se hai bisogno te lo scrivo io

facci sapere

ciao!

Reply to
ice

"Luca" ha scritto nel messaggio

Con 6 buffer con RC in ingresso meno di cosi' non si puo'.

Saluti Gianni

Reply to
Gianni

Pensavo di utilizzare l'ingresso analogico perch=E8 pensavo di utilizzare un pic a 8 i/o ma in effetti hai ragione te e il

16f628a =E8 perfetto. Se puoi scrivermi il firmware mi faresti un grosso favore cos=EC avrei anche una base su cui studiare la programmazione e le prossime volte magari me la caver=F2 da solo... :-) Magari se hai voglia scrivimi pure in privato e vediamo come fare. Grazie

Luca

Reply to
Luca

ti rispondo qui xchè così altri possono trarre spunto da quello che stiamo facendo. E soprattutto altri + esperti di me posso correggere se ci sono errori

una possibile soluzione è questa:

- attivo l'oscillatore interno a 4MHz

- attivo i pullups interni della porta_B (quindi i pulsanti NORMALMENTE APERTI andranno connessi tra i pin B7..B2 della porta_B e massa, meglio se tramite una resistenza... 100ohm ad esempio)

- imposto il timer2 per andare in overflow 25 volte al secondo

- aggancio una ISR al timer2 Questa ISR controlla il valore di 6 variabili (1 per ogni uscita). Se una varibile contiene un valore maggiore di zero allora viene decrementata di 1. Quando il valore di tale variabile raggiunge zero allora porto a livello logico basso l'uscita corrispondente sulla porta_A

- il loop principale controlla continuamente lo stato della porta_B Appena si accorge che uno dei bit da 0..5 è a livello logico 1 allora significa che c'è un pulsante premuto. Quando un pulsante è premuto il valore della relativa variabile viene impostato a 25*15=375 (15 sono i secondi che l'uscita deve rimanere alta) Con questo sistema si risolve il problema del debounce per i pulsanti e il conteggio parte quando si rilascia il pulsante

nb: sul pin 4 della porta_A ci vuole un pullup esterno

#include #use delay(clock=4000000) #fuses NOWDT,INTRC_IO, PUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD

#define T2_INTS_PER_SECOND 25 // (4000000/(4*16*250*10)) #define HIGH_FOR_15SEC T2_INTS_PER_SECOND*15 long out0,out1,out2,out3,out4,out5;

#int_timer2 void timer2_ISR() { if (out0>0) { out0--; if (out0==0) output_low(pin_A0); } if (out1>0) { out1--; if (out1==0) output_low(pin_A1); } if (out2>0) { out2--; if (out2==0) output_low(pin_A2); } if (out3>0) { out3--; if (out3==0) output_low(pin_A3); } if (out4>0) { out4--; if (out4==0) output_low(pin_A4); } if (out5>0) { out5--; if (out5==0) output_low(pin_A5); } }

void main() {

int k;

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_16, 250, 10); set_timer2(0); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE);

port_B_pullups(TRUE); output_A(0); out0=0; out1=0; out2=0; out3=0; out4=0; out5=0; enable_interrupts(INT_TIMER2); enable_interrupts(GLOBAL);

while (1) { if (k=(input_B()&0x3f)>0) { if ((k&0x01)==0x01) { output_high(pin_A0); out0=HIGH_FOR_15SEC; } if ((k&0x02)==0x02) { output_high(pin_A1); out1=HIGH_FOR_15SEC; } if ((k&0x04)==0x04) { output_high(pin_A2); out2=HIGH_FOR_15SEC; } if ((k&0x08)==0x08) { output_high(pin_A3); out3=HIGH_FOR_15SEC; } if ((k&0x10)==0x10) { output_high(pin_A4); out4=HIGH_FOR_15SEC; } if ((k&0x20)==0x20) { output_high(pin_A5); out5=HIGH_FOR_15SEC; } } // a key has been pressed (or is being pressed) } // forever loop

} // main

Reply to
ice

Pi=F9 veloce della luce... grazie :-)

ho buttato giu un mezzo schema, se ho ben capito dovrebbe andare.

[FIDOCAD ] LI 185 65 190 65 LI 185 70 190 70 LI 190 70 190 65 MC 120 85 0 0 860 MC 110 80 0 0 860 MC 100 75 0 0 860 MC 90 70 0 0 860 MC 80 65 0 0 860 LI 160 65 80 65 LI 160 70 90 70 LI 160 75 100 75 LI 160 80 110 80 LI 160 85 120 85 MC 130 90 0 0 860 LI 160 90 130 90 MC 130 110 1 0 080 MC 130 125 0 0 045 LI 155 125 130 125 LI 130 125 130 120 LI 130 110 80 110 LI 80 110 80 80 LI 90 110 90 85 LI 100 110 100 90 LI 110 110 110 95 LI 120 110 120 100 LI 130 110 130 105 SA 120 110 SA 130 110 SA 130 125 SA 110 110 SA 100 110 SA 90 110 MC 140 105 3 0 140 LI 160 100 155 100 LI 155 100 155 105 LI 140 105 140 95 MC 155 110 1 0 170 LI 140 110 140 105 LI 155 110 155 105 SA 155 105 SA 140 105 MC 140 110 1 0 170 LI 140 125 140 120 LI 155 125 155 120 LI 160 105 160 125 LI 160 125 155 125 LI 160 95 140 95 SA 140 125 SA 155 125 SA 190 65 MC 190 65 3 0 010 LI 190 80 185 80 LI 190 75 185 75 LI 190 85 185 85 LI 190 90 185 90 LI 190 95 185 95 LI 190 100 185 100 TY 165 110 5 3 0 0 0 * Pic16f628 MC 160 65 0 0 650 TY 165 65 4 3 0 0 0 * RB2 TY 165 70 4 3 0 0 0 * RB3 TY 165 75 4 3 0 0 0 * RB4 TY 165 80 4 3 0 0 0 * RB5 TY 165 85 4 3 0 0 0 * RB6 TY 165 90 4 3 0 0 0 * RB7 TY 165 105 4 3 0 0 0 * Vss TY 165 95 4 3 0 0 0 * CLK TY 165 100 4 3 0 0 0 * CLK TY 195 65 4 3 0 0 0 * Vdd TY 195 70 4 3 0 0 0 * MCLR LI 190 75 220 75 LI 190 80 230 80 LI 190 85 240 85 LI 190 90 250 90 LI 190 95 260 95 LI 190 100 270 100 TY 75 65 4 3 0 0 0 * P1 TY 85 70 4 3 0 0 0 * P2 TY 95 75 4 3 0 0 0 * P3 TY 105 80 4 3 0 0 0 * P4 TY 115 85 4 3 0 0 0 * P5 TY 125 90 4 3 0 0 0 * P6

Non so come ringraziati, se sei delle mie parti almeno un caff=E8 ti =E8 dovuto. .-)

Luca

Reply to
Luca

Pi=F9 veloce della luce... grazie :-)

ho buttato giu un mezzo schema, se ho ben capito dovrebbe andare.

[FIDOCAD ] LI 185 65 190 65 LI 185 70 190 70 LI 190 70 190 65 MC 120 85 0 0 860 MC 110 80 0 0 860 MC 100 75 0 0 860 MC 90 70 0 0 860 MC 80 65 0 0 860 LI 160 65 80 65 LI 160 70 90 70 LI 160 75 100 75 LI 160 80 110 80 LI 160 85 120 85 MC 130 90 0 0 860 LI 160 90 130 90 MC 130 110 1 0 080 MC 130 125 0 0 045 LI 155 125 130 125 LI 130 125 130 120 LI 130 110 80 110 LI 80 110 80 80 LI 90 110 90 85 LI 100 110 100 90 LI 110 110 110 95 LI 120 110 120 100 LI 130 110 130 105 SA 120 110 SA 130 110 SA 130 125 SA 110 110 SA 100 110 SA 90 110 MC 140 105 3 0 140 LI 160 100 155 100 LI 155 100 155 105 LI 140 105 140 95 MC 155 110 1 0 170 LI 140 110 140 105 LI 155 110 155 105 SA 155 105 SA 140 105 MC 140 110 1 0 170 LI 140 125 140 120 LI 155 125 155 120 LI 160 105 160 125 LI 160 125 155 125 LI 160 95 140 95 SA 140 125 SA 155 125 SA 190 65 MC 190 65 3 0 010 LI 190 80 185 80 LI 190 75 185 75 LI 190 85 185 85 LI 190 90 185 90 LI 190 95 185 95 LI 190 100 185 100 TY 165 110 5 3 0 0 0 * Pic16f628 MC 160 65 0 0 650 TY 165 65 4 3 0 0 0 * RB2 TY 165 70 4 3 0 0 0 * RB3 TY 165 75 4 3 0 0 0 * RB4 TY 165 80 4 3 0 0 0 * RB5 TY 165 85 4 3 0 0 0 * RB6 TY 165 90 4 3 0 0 0 * RB7 TY 165 105 4 3 0 0 0 * Vss TY 165 95 4 3 0 0 0 * CLK TY 165 100 4 3 0 0 0 * CLK TY 195 65 4 3 0 0 0 * Vdd TY 195 70 4 3 0 0 0 * MCLR LI 190 75 220 75 LI 190 80 230 80 LI 190 85 240 85 LI 190 90 250 90 LI 190 95 260 95 LI 190 100 270 100 TY 75 65 4 3 0 0 0 * P1 TY 85 70 4 3 0 0 0 * P2 TY 95 75 4 3 0 0 0 * P3 TY 105 80 4 3 0 0 0 * P4 TY 115 85 4 3 0 0 0 * P5 TY 125 90 4 3 0 0 0 * P6

Non so come ringraziati, se sei delle mie parti almeno un caff=E8 ti =E8 dovuto. .-)

Luca

Reply to
Luca

Pi=F9 veloce della luce... grazie :-)

ho buttato giu un mezzo schema, se ho ben capito dovrebbe andare.

[FIDOCAD ] LI 185 65 190 65 LI 185 70 190 70 LI 190 70 190 65 MC 120 85 0 0 860 MC 110 80 0 0 860 MC 100 75 0 0 860 MC 90 70 0 0 860 MC 80 65 0 0 860 LI 160 65 80 65 LI 160 70 90 70 LI 160 75 100 75 LI 160 80 110 80 LI 160 85 120 85 MC 130 90 0 0 860 LI 160 90 130 90 MC 130 110 1 0 080 MC 130 125 0 0 045 LI 155 125 130 125 LI 130 125 130 120 LI 130 110 80 110 LI 80 110 80 80 LI 90 110 90 85 LI 100 110 100 90 LI 110 110 110 95 LI 120 110 120 100 LI 130 110 130 105 SA 120 110 SA 130 110 SA 130 125 SA 110 110 SA 100 110 SA 90 110 MC 140 105 3 0 140 LI 160 100 155 100 LI 155 100 155 105 LI 140 105 140 95 MC 155 110 1 0 170 LI 140 110 140 105 LI 155 110 155 105 SA 155 105 SA 140 105 MC 140 110 1 0 170 LI 140 125 140 120 LI 155 125 155 120 LI 160 105 160 125 LI 160 125 155 125 LI 160 95 140 95 SA 140 125 SA 155 125 SA 190 65 MC 190 65 3 0 010 LI 190 80 185 80 LI 190 75 185 75 LI 190 85 185 85 LI 190 90 185 90 LI 190 95 185 95 LI 190 100 185 100 TY 165 110 5 3 0 0 0 * Pic16f628 MC 160 65 0 0 650 TY 165 65 4 3 0 0 0 * RB2 TY 165 70 4 3 0 0 0 * RB3 TY 165 75 4 3 0 0 0 * RB4 TY 165 80 4 3 0 0 0 * RB5 TY 165 85 4 3 0 0 0 * RB6 TY 165 90 4 3 0 0 0 * RB7 TY 165 105 4 3 0 0 0 * Vss TY 165 95 4 3 0 0 0 * CLK TY 165 100 4 3 0 0 0 * CLK TY 195 65 4 3 0 0 0 * Vdd TY 195 70 4 3 0 0 0 * MCLR LI 190 75 220 75 LI 190 80 230 80 LI 190 85 240 85 LI 190 90 250 90 LI 190 95 260 95 LI 190 100 270 100 TY 75 65 4 3 0 0 0 * P1 TY 85 70 4 3 0 0 0 * P2 TY 95 75 4 3 0 0 0 * P3 TY 105 80 4 3 0 0 0 * P4 TY 115 85 4 3 0 0 0 * P5 TY 125 90 4 3 0 0 0 * P6

Non so come ringraziati, se sei delle mie parti almeno un caff=E8 ti =E8 dovuto. .-)

Luca

Reply to
Luca

Pi=F9 veloce della luce... grazie :-)

ho buttato giu un mezzo schema, se ho ben capito dovrebbe andare.

[FIDOCAD ] LI 185 65 190 65 LI 185 70 190 70 LI 190 70 190 65 MC 120 85 0 0 860 MC 110 80 0 0 860 MC 100 75 0 0 860 MC 90 70 0 0 860 MC 80 65 0 0 860 LI 160 65 80 65 LI 160 70 90 70 LI 160 75 100 75 LI 160 80 110 80 LI 160 85 120 85 MC 130 90 0 0 860 LI 160 90 130 90 MC 130 110 1 0 080 MC 130 125 0 0 045 LI 155 125 130 125 LI 130 125 130 120 LI 130 110 80 110 LI 80 110 80 80 LI 90 110 90 85 LI 100 110 100 90 LI 110 110 110 95 LI 120 110 120 100 LI 130 110 130 105 SA 120 110 SA 130 110 SA 130 125 SA 110 110 SA 100 110 SA 90 110 MC 140 105 3 0 140 LI 160 100 155 100 LI 155 100 155 105 LI 140 105 140 95 MC 155 110 1 0 170 LI 140 110 140 105 LI 155 110 155 105 SA 155 105 SA 140 105 MC 140 110 1 0 170 LI 140 125 140 120 LI 155 125 155 120 LI 160 105 160 125 LI 160 125 155 125 LI 160 95 140 95 SA 140 125 SA 155 125 SA 190 65 MC 190 65 3 0 010 LI 190 80 185 80 LI 190 75 185 75 LI 190 85 185 85 LI 190 90 185 90 LI 190 95 185 95 LI 190 100 185 100 TY 165 110 5 3 0 0 0 * Pic16f628 MC 160 65 0 0 650 TY 165 65 4 3 0 0 0 * RB2 TY 165 70 4 3 0 0 0 * RB3 TY 165 75 4 3 0 0 0 * RB4 TY 165 80 4 3 0 0 0 * RB5 TY 165 85 4 3 0 0 0 * RB6 TY 165 90 4 3 0 0 0 * RB7 TY 165 105 4 3 0 0 0 * Vss TY 165 95 4 3 0 0 0 * CLK TY 165 100 4 3 0 0 0 * CLK TY 195 65 4 3 0 0 0 * Vdd TY 195 70 4 3 0 0 0 * MCLR LI 190 75 220 75 LI 190 80 230 80 LI 190 85 240 85 LI 190 90 250 90 LI 190 95 260 95 LI 190 100 270 100 TY 75 65 4 3 0 0 0 * P1 TY 85 70 4 3 0 0 0 * P2 TY 95 75 4 3 0 0 0 * P3 TY 105 80 4 3 0 0 0 * P4 TY 115 85 4 3 0 0 0 * P5 TY 125 90 4 3 0 0 0 * P6

Non so come ringraziati, se sei delle mie parti almeno un caff=E8 ti =E8 dovuto. .-)

Luca

Reply to
Luca

lo schema di principio è quello... ma così non va, almeno con il programma che ho scritto io...

- abbiamo usato un 16f628A per ridurre il numero di componenti esterni e limitare i costi, no? nei #fuses ho configurato il pic in modo che giri con oscillatore RC interno a 4MHz per cui il quarzo e i 2 condensatori esterni non servono. La differenza di prezzo fra un 16f84a ed un 16f628a è minore del costo di un quarzo + 2 condensatori per cui io userei il 16f628a (il quarzo lo metti se vuoi spingere un micro al massimo o se ti serve molta precisione... tipo se implementi un protocollo con timing molto noiosi...)

- il programma usa i bit della porta_B da 0 a 5 (non da 2 a 7)

- le uscite corrispondenti sono sulla porta_A, bit da 0 a 5. Sul bit 4 devi mettere una resistenza verso VCC xchè questa uscita è open-collector. Il valore della resistenza dipende da cosa devi pilotare... cmq ricorda che MASSIMO disponi di 25mA per uscita... altrimenti distruggi lo stadio di uscita e addio pic

- il MCLR# non collegarlo direttamente al VCC, tiralo su con una R da qualche kilo-ohm (es: 4K7). Siccome usiamo il 16F628A nei #fuses ho disabilitato il MCLR# per cui dall'esterno non lo puoi resettare... TOGLI la resistenza (altro componente esterno in meno) Il reset viene fatto all'accensione, se guardi i #fuses il Power-On-Reset è attivo

- altri accorgimenti dipendono dall'ambiente in cui lo usi...

- LEGGI SEMPRE IL DATASHEET DI UN COMPONENTE PRIMA DI USARLO

- il programma è scritto in C, poi dovrai modificarlo un po' a seconda del compilatore che usi

- NON dare per scontato che funzioni al primo colpo... è meglio se monti prima il tutto su breadbord

ok!!! ma di dove sei? ;)

Reply to
ice

Non so ancora come ringraziarti. Sei stato veramente gentile e prezioso. Purtroppo fino a sabato non posso lavorarci (domani devo partire per lavoro), poi ti far=F2 sapere come va. Io sono di Pesaro ma per lavoro tutte le settimane giro tra Modena, Bologna Reggio Nell'Emilia, Milano, se sei di queste parti fammi sapere. Ciao e grazie ancora.

Luca

Reply to
Luca

Ciao Gianni Non hai ancora capito che le soluzioni troppo semplici non sono gradite !!!!!!!!!!!!!! Scommettiamo ???

Ciao Giorgio

--
non sono ancora SANto per e-mail
Reply to
giorgiomontaguti

"giorgiomontaguti" ha scritto nel messaggio

E' proprio cosi' non c'e' piu' l'elettronica di una volta!

Ciao Ganni

Reply to
Gianni

ice ha scritto:

ramma

rno

un

se

se

vi

Il

la

del

=E8

Ciao, sono ancora fermo in attesa che il mio spacciatore di componenti mi rimedi il PIC. Non ho saputo pi=F9 niente, per il caff=E8 siamo distanti? Grazie ancora Luca

Reply to
Luca

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.