Omarro Inserito: 28 novembre 2004 Segnala Share Inserito: 28 novembre 2004 Ciao,sto realizzando un orologio-termometro-sveglia con il ds1629 della dallas, i componenti che utilizzo sono questi4 pulsanti1 entra nel menu2 freccia in su3 freccia in giù4 okpoi utilizzo l'I2C per comunicare con il ds1629e un display BLU hd44780 2x16 caratteriil mio primo problema è questo,voglio utilizzare la comunicazione a 8 bit con il display e userei pure la PORTB del PIC se non fosse che è l'unica che mi permette di avere un interrupt su i suoi pin in modo di attivare il tasto menu e cambiare l'ora o settare la sveglia oppure cambiare la scala di lettura dei gradi di temperatura da celsius a kelvin o Faraneith quando viene premuto senza effettuare un controllo software, allora avevo pensato a una cosa simile....RA0 ~ RA3 RB4 ~ RB7controllo il display in modo 8 bit e RB0 ~ RB3 controllo i pulsanti, il problema è il seguente...se in linguaggio C scrivo una funzione tipoinvia_carattere(0x48); che richiama la funzione per l'invio del carattere e invia il carattere H (in esadecimale 0x48) a fare in modo che i primi quattro BIT vadano da RA0 ~ RA3 e gl'ultimi quattro da RB4 ~ RB7?Voi mi direte ma llora trasmetti in modalita 4 bit al display, ma non voglio perchè devo occupare tutti i piedini del PIC.....Cosa mi dite?Ho speranza di realizzare una cosa simile?GRAZIE MILLE CIAOOO Link al commento Condividi su altri siti More sharing options...
wnc Inserita: 28 novembre 2004 Segnala Share Inserita: 28 novembre 2004 Leggi un pò sulle struct e risolvi il problema. Ciao Link al commento Condividi su altri siti More sharing options...
giacomo56 Inserita: 29 novembre 2004 Segnala Share Inserita: 29 novembre 2004 (modificato) TRISB = 0x0f;...void invia_carattere(char c){ PORTB = c; PORTB <<= 4; // carica la parte bassa di c PORTA &= 0x10; // azzera la parte bassa di PORTA PORTA |= (c >> 4) ; // carica la parte alta di c // scrittura ...}L'ordine è: RA3:RA0 RB7:RB4Dovrebbe andare.Io però, invece di usare le interruzioni per leggere i tasti, programmerei un timer per avere un'interruzione ogni 20 msec circa e leggerei i tasti nella routine d'interruzione in modo da ottenere anche una funzione antirimbalzo.Ciao. Modificato: 29 novembre 2004 da giacomo56 Link al commento Condividi su altri siti More sharing options...
Omarro Inserita: 29 novembre 2004 Autore Segnala Share Inserita: 29 novembre 2004 ok grazie, adesso vedo di studiare quello che hai scritto.Ciao Link al commento Condividi su altri siti More sharing options...
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