Simons Inserito: 31 agosto 2007 Segnala Inserito: 31 agosto 2007 Salve a tutti.Ho sottomano una board che accetta vari minimoduli per funzionare, e ha su di sè un display lcd con i seguenti collegamenti:è usato in modalità 4-bit operationenable -> RB0RS -> RB1D4 -> RA1D5 -> RC4D6 -> RC7D7 -> RC1il mio problema è il come fare a trattare i bit D4-D7 come un nibble.mi spiego...utilizzo CCS C Compiler e c'è già il driver lcd pronto per essere usato, con una differenza. Nel driver pronto utilizza la porta B come dati (o meglio 4 bit della porta quindi indirizza direttamente il nibble alla porta.ma nel mio caso ho impiegate 2 porte per i 4 bit (tra l'altro non sono nemmeno bit consecutivi) quindi come posso fare per far riconoscere la combinazione RA1-RC4-RC7-RC1 come un'unica porta, o meglio i 4 bit più significativi di quella porta??ammetto che la spiegazione non è delle migliori, però se qualcuno ha capito può darmi una mano?graziesimons
accacca Inserita: 31 agosto 2007 Segnala Inserita: 31 agosto 2007 Ciao Simonsse non ho capito male tu hai un valore a 4bit e devi scriverlo su 4 pin del tuo micro che però sono uno qua e uno là per parlare in modo tecnico...Potresti fare cosìAll interno dle programma continui ad utilizzare il dato come nibble Quando lo deviscrivere sulle porte interpojni una piccoal procedura di codifica.Non conosco il tuo compilatore ma sicuramente esiste un estensione del C standard che ti permette di definire variabili di il tipo bit.Perciò potresti scrivereclr bit0 ; if (nibble & 0x01) set bit0 ;o megliobit0 = (nibble & 0x01) ? 1 : 0 ;bit1 = (nibble & 0x02) ? 1 : 0 ;bit2 = (nibble & 0x04) ? 1 : 0 ;bit3 = (nibble & 0x08) ? 1 : 0 ;dove bit0..bit3 sono i bit delle tue porte..se non hai la possibilità di definire il tipo bit devi scrivere di piùsupponendo di voler modificare il bit PA.3if (nibble & 0x01) PortA |= 0x04 ; else PortA &= 0xFB ;e così via per gli altriIn pratica con quatro If testi il valroe dei bit del nibble e aggiorni i 4bit delle porte.
Simons Inserita: 2 settembre 2007 Autore Segnala Inserita: 2 settembre 2007 grazie! ho risolto il problema.ho usato una funzione che shifta i bit del nibble da mandare : output_bit(LINE_DB7,shift_left(&n,1,0)); output_bit(LINE_DB6,shift_left(&n,1,0)); output_bit(LINE_DB5,shift_left(&n,1,0)); output_bit(LINE_DB4,shift_left(&n,1,0));in questo modo, in cima al programma ho definito le varie LINE_X con:#define LINE_x PIN_xora sorge un altro problema, molto simile.Come faccio a decodificare una tastiera 4x4 che ha le 4 colonne (o righe non ricordo) collegate a mezza porta B (B4-5-6-7) e le 4 righe collegate "sparse" come prima?nel file di esempio di ccs c compiler non capisco alcune funzioni, e volevo riscrivermela da capo così anche per fare un po' di pratica.avete suggerimenti?
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora