Vai al contenuto
PLC Forum


Selettore E Pulsantini


Francesco_Guerra

Messaggi consigliati

Francesco_Guerra

Salve sono nuovo nel forum e vorre porvi una questione:

dispongo di un pic16f876 e vorrei collegarvi un selettore a 4 vie e due pulsantini da pannello.

il selettore (che a seconda della posizione "shifta" nelle varie modalità) dovrebbe funzionare in interrupt, quindi l'ho collegato ai pin RB4:RB7 con resistenza a massa da 12k; i pulsanti da pannello invece servono a incrementare o decrementare alcune variabili diverse a seconda della posizione del selettore e sono collegati ai pin RA0 e RA2 sempre con resistenza a massa da 12k

Ad es:

selettore posizione 0:

- pulsante 1 x = x+1

- pulsante 2 x = x-1

selettore posizione 1:

- pulsante 1 y = y+1

- pulsante 2 y = y-1

e così via

ho definito

#byte port_a=0x05

#byte port_b=0x06

ho settato

set_tris_a(0b00000101);

set_tris_b(0b11110000);

nel main ho abilitato prima gli interrupt global, poi int_rb

ma non funziona!!!!

allego anche la porzione di codice di interesse

*****************************************

void main() {

restart_wdt();

lcd_init(); // inizializza l'LCD

delay_seconds(2);

printf(lcd_putc,"\fWNG_SW1.0");

printf("\n\r wng sw 1.0");

delay_seconds(2);

printf(lcd_putc,"\f");

enable_interrupts(GLOBAL); // Interruzioni abilitate

enable_interrupts(int_rb);

printf("abilitati interrupt\n");

set_tris_a(0b00000101);

set_tris_b(0b11110000);

printf("settate porte\n");

while (true) {

restart_wdt();

if (overrun) { // serve per sbloccare la seriale se

// si è verificato un overrun

cren=0;

cren=1;

}

printf(lcd_putc,"\f");

generazione();

}

}

**********************************************

#INT_RB

rb_isr(){

// memorizza i fronti di salita nela variabile modalita che funziona da

// condizione dello switch

if (bit_test(port_b,4)) // piedino NULL

modalita = 0;

if (bit_test(port_b,5)) // piedino ALGORITMO

modalita = 1;

if (bit_test(port_b,6)) // piedino SEED

modalita = 2;

if (bit_test(port_b,7)) // piedino PRODUZIONE

modalita = 3;

switch (modalita) {

case 0:

printf(lcd_putc,"\f");

printf(lcd_putc,"\n\r WGNG1.0");

printf("\n\r WGNG1.0 "); //hyperterminal

break;

case 1:

printf(lcd_putc,"\f");

printf(lcd_putc,"\n\r select algo");

printf("\n\r select algo"); //hyperterminal

if (bit_test(port_a,0)){

aumenta_config();

}

if (bit_test(port_a,2)){

decrementa_config();

}

break;

case 2:

printf(lcd_putc,"\f");

printf(lcd_putc,"\n\r select seed");

printf("\n\r select seed"); //hyperterminal

if (bit_test(port_a,0)){

aumenta_seed();

}

if (bit_test(port_a,2)){

decrementa_seed();

}

break;

case 3:

printf(lcd_putc,"\f");

printf(lcd_putc,"\n\r start/stop");

printf("\n\r start/stop"); //hyperterminal

if (bit_test(port_a,0)){

produzione_start();

}

if (bit_test(port_a,2)){

produzione_stop();

}

break;

}

Link al commento
Condividi su altri siti


Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...