Costruire tastiera a 5 tasti che invia segnali esadecimali

Ho la necessit=E0 di costruire una tastiera a 5 tasti che invii a seconda della pressione di uno dei tasti un segnale esadecimale, ad esempio se si preme il tasto A viene inviato il segnale AA, se si preme il tasto B viene inviato il segnale FF e cos=EC via. Per la funzione che dovr=E0 avere questa tastiera devo per forza di cose usare come connettore di uscita un plug telefonico in modo da avere 4 fili, due per l'alimentazione + e -, 1 per i dati e 1 che avanza e che potrebbe far comodo in futuro. Pensate si possa fare con un PIC? Se qualcuno pu=F2 aiutarmi gliene sono grato, anzi se pensate che il PIC sia una soluzione valida e se qualcuno vuole occuparsi della scrittura del codice assembler che andr=E0 nel PIC possiamo anche stabilire un compenso per il lavoro.

grazie antiticipatamente.

Reply to
VirtualDj
Loading thread data ...

VirtualDj ha scritto:

Si, si puo fare con il PIC. LEggi i tasti in polling, poi salta alla routine relativa a quello premuto (controllo antirimbalzo). Nella routine carica il valore relativo in W (esempio FF) e lo trasmette sulla linea seriale TX (con la routine di trasmissione).

Emanuele

--
*** YOUR ELECTRONICS OPEN SOURCE ***

http://dev.emcelettronica.com;---------------------------------------------------------
Progetti Completi (Full Projects):

[IperKEY-ResKEY] Chiave elettronica a microcontrollore
(Microcontroller Electronics Key and key reader)
//TAGS:Pic, Eeprom, ADconverter, I2C

[IperCODE] Ricevitore RADIOCOMANDI e decodifiche
(Remote Control Receiver and decoder)
//TAGS:Pic, Radio control, routines, rolling code, UART, CCP1, LCD
Reply to
Emanuele

con che protocollo vanno trasmessi i dati ? manca questa informazione fondamentale

usare un tipo di connnettore od un altro e' invece un fatto marginale nel progetto

comunque con PIC anche di quelli piccolini non ci dovrebbero essere grossi proglemi

Reply to
mmm
*Ho la necessità di costruire una tastiera a 5 tasti che invii a seconda della pressione di uno dei tasti un segnale esadecimale* in realtà tu invii un'informazione binaria appoggiandoti, nel tuo caso, ad un protocollo seriale asincrono (perchè dici di lasciare un filo libero)

ora devi dire:

- che tipo di protocollo seriale intendi utilizzare (es: rs232, ps2)

- se intendi effettuare controllo di errore (a correzzione, a ritrasmissione oppure nessun tipo di controllo)

- a che distanza devi portare l'informazione

- chi riceve l'informazione (il pc, un altro micro, ecc...)

  • esempio se si preme il tasto A viene inviato il segnale AA, se si preme il tasto B viene inviato il segnale FF e così via.* nessun problema fare questo con un micro... basta una lookup

*connettore di uscita un plug telefonico in modo da avere 4 fili, due per l'alimentazione + e -, 1 per i dati e 1 che avanza e che potrebbe far comodo in futuro* il 4^ filo resta libero solo se usi un protocollo asincrono se invece devi spedire i dati ad un PC (ad esempio) e ti serve implementare il ps/2 (sincrono) allora sei costretto as impiegare anche il 4^ filo xchè ti serve per il clock

  • Pensate si possa fare con un PIC? * certo

*codice assembler che andrà nel PIC possiamo anche stabilire un compenso per il lavoro.* se parliamo di trasmettere tramite rs232 per il codice posso scriverti qualcosa in C... è questione di poche linee cmq su questo in rete trovi molto! se intendi fare tutta la scheda è ovvio che gratis non è possibile ;)

-ice-

Reply to
ice

ice ha scritto:

rs232

one

nessun controllo

15-20 metri

facciamo cos=EC almeno =E8 pi=F9 chiaro: una tastiera va collegata direttamente via seriale al pc, poi a cascata ne posso collegare altre alla prima, sono tutte identiche tranne per il fatto che ognuna ha un identificativo quindi il segnale esadecimale che invia il singolo tasto incorpora anche l'identificativo progressivo del numero di tastiera. In sostanza, per capirci, queste tastiere mi servono per fare un gioco di gruppo simile a quelli che fanno nei pub, a risposta multipla.

il mio scopo finale =E8 fare tutta la scheda, il materiale ce l'ho in toto, ho gi=E0 fatto fare anche la scatolina in plastica che conterr=E0 il tutto. Io direi di partire col definire bene che segnale spedisce ogni singolo tasto.

Reply to
VirtualDj

ice ha scritto:

rs232

one

nessun controllo

15-20 metri

facciamo cos=EC almeno =E8 pi=F9 chiaro: una tastiera va collegata direttamente via seriale al pc, poi a cascata ne posso collegare altre alla prima, sono tutte identiche tranne per il fatto che ognuna ha un identificativo quindi il segnale esadecimale che invia il singolo tasto incorpora anche l'identificativo del numero di tastiera. In sostanza, per capirci, queste tastiere mi servono per fare un gioco di gruppo simile a quelli che fanno nei pub, a risposta multipla.

il mio scopo finale =E8 fare tutta la scheda, il materiale ce l'ho in toto, ho gi=E0 fatto fare anche la scatolina in plastica che conterr=E0 il tutto. Io direi di partire col definire bene che segnale spedisce ogni singolo tasto.

Reply to
VirtualDj
*facciamo così almeno è più chiaro: una tastiera va collegata direttamente via seriale al pc, poi a cascata ne posso collegare altre alla prima* NO :)

il protocollo rs232:

- ha un limite (come specifica) di 15 metri se ben ricordo. Per andare oltre bisognerebbe bufferizzare... ma si complicano molto le cose

- serve il cavo schermato per renedere minimi gli errori in trasmissione (che su 15mt ci sono, vai tranquillo)

- lavora con voltaggi diversi rispetto al pic (devi aggiungere un traslatore di livello tipo max232)

- non supporta il punto/multi-punto... quindi puoi solo fare master(pc)slave(pic)

o cambi protocollo (tipo rs485) oppure devi per forza:

- implementare una doppia porta rs232 su ogni pic (il picA trasmette al pc e allo stesso tempo riceve dal picB che a suo volta riceve da picC ecc...)

- implementare un CRC per tenere conto degli errori

secondo me non è questa la soluzione domani magari ne riparliamo

-ice-

Reply to
ice

ice ha scritto:

Con l'RS232 si possono raggiungere anche piu di 15 metri, diminuendo la velocità, però è un po rischioso, anche perche non si sa mai come è l'ambiente dove sarà installata, se il cavo è di qualità etc.... Meglio non rischiare! Inoltre se devono essere collegate piu tastiere escluderei definitivamente RS232. (Anche se avevo pensato subito a RS232 quando hai detto un filo solo di TX, ma non avevi specificato la distanza)

La soluzione è RS485 (come già accennato)

Io ho realizzato un controllo MIXER AUDIO gestito da un protocollo seriale su RS485 (per le scuole private) e non ho avuto nessun problema di disturbo..... non ho usato il CRC ma ho ottimizzato il protocollo per l'esigenza di progetto.

Inoltre se hai 4 fili, li userei tutti, anche perche puoi avere una risposta di conferma dato arrivato... quindi VCC TX RX GND

Emanuele

--
*** YOUR ELECTRONICS OPEN SOURCE ***

http://dev.emcelettronica.com;---------------------------------------------------------
Progetti Completi (Full Projects):

[IperKEY-ResKEY] Chiave elettronica a microcontrollore
(Microcontroller Electronics Key and key reader)
//TAGS:Pic, Eeprom, ADconverter, I2C

[IperCODE] Ricevitore RADIOCOMANDI e decodifiche
(Remote Control Receiver and decoder)
//TAGS:Pic, Radio control, routines, rolling code, UART, CCP1, LCD
Reply to
Emanuele

stando cos=EC le cose effettivamente non =E8 una soluzione, cosa mi suggerisci??

Reply to
VirtualDj
*suggerisci??* se intendi rimanere il più vicino possibile alle richieste che hai fatto direi RS485 (anche perchè è largamente usato e quindi trovi molte info)

altrimenti bisogna ripensare il tutto (tipo una configuarazione a stella con n tastiere ed n cavi + una board principale che riceve tutte le tastiere e poi comunica col pc)... ma c'è parecchio lavoro da fare, dipende soprattutto da quanto affidabile vuoi il sistema

-ice-

Reply to
ice

con

tutto

se facendo n fili per n tastiere =E8 pi=F9 semplice dal punto di vista logico ed eliminiamo errori e ritardi dovuti alla soluzione con le tastiere in cascata per me va bene lo stesso. Per il resto consideriamo che =E8 un gioco, deve essere ffidabile ma =E8 pur sempre un gioco

Reply to
VirtualDj

con

tutto

se facendo n fili per n tastiere =E8 pi=F9 semplice dal punto di vista logico ed eliminiamo errori e ritardi dovuti alla soluzione con le tastiere in cascata per me va bene lo stesso. Per il resto consideriamo che =E8 un gioco, deve essere ffidabile ma =E8 pur sempre un gioco

Reply to
VirtualDj

scusate vorrei capire una cosa, forse a me più tile didatticamente che per la realizzazione pratica del tutto, sto prendendo un pò di informazioni in rete in merito al PIC 16F84 e per vedere se ho capito alcune cose base vi pongo un quesito:

se io decidessi di usare le porte da RA0 a RA4 come ingresso per i 5 tasti, le porte da RA5 a RA7 e le RB0 e RB1 come uscite per fare accendere dei led in in corrispondenza alla pressione dei tasti e la porta RB4 come uscita per spedire il segnale binario sul TX.... sarebbe fattibile ? Ho visto un pò di esempi qui:

formatting link
e qui:
formatting link

Reply to
vritualdj

  • se facendo n fili per n tastiere è più semplice dal punto di vista logico ed eliminiamo errori e ritardi dovuti alla soluzione con le tastiere in cascata* gli errori non li puoi mai eliminare con certezza metematica ma solo "correggerli"... ci sono libri e libri sulle reti di telecomunicazioni!

la cosa fondamentale è accorgersi che l'errore c'è stato... poi il resto dipende se usi un sistema a ritrasmissione oppure a correzzione

ti faccio un esempio: l'rs232 permette di aggiungere il bit di parità... questo è già qualcosa ma permette di capire che l'errore c'è stato solo se si verifica un numero dispari di errori (un bit cambia stato oppure 3 bit cambiano stato, ecc...) mentre se si verifica un numero pari di errori (2 bit cambiano stato) con il parity-check non ti accorgi di nulla e l'informazione viene presa per buona mentre non lo è!!!

invece il crc-16 permette di accorgersi ti tutti gli errori (a burst) con lunghezza fino a 16 bit e anche di quelli di lunghezza superiore con probabiltà maggiore del 99%

per i ritardi intendevo dire che se tu hai 10 tastiere e la 10^ (l'ultima) fa partire un dato, questo ci mette un po' ad arrivare alla borad principale perchè deve essere letto e ritrasmesso da 9 tastiere... ecco, se nel frattempo la 1^ tastiera trasmette, il suo dato arriva certo prima a fine percorso! considero invece nulli i ritardi della trasmissione sul cavo perchè su distanze così piccole anche se si viaggia con v=60%c (velocità luce) non ha senso considerarli

la mia idea era quella di usare (sulla main board) un MUX da scansionare in sequenza e fare così scattare l'interrupt di ricezione da seriale la ISR riceverà il carattere solo dalla tastiera che ha cominciato a trasmettere per prima è ovvio che ci saranno delle tolleranze da calcolare e poi decidere se per te sono accettabili inoltre questo sistema è, con un piccolo sforzo a livello firmware, estendibile per far si che tu possa sapere anche l'ordine degli utenti che si sono prenotati per la risposta non ho capito però se a te interessa sapere il primo oppure la sequenza... e quante tastiere hai in mente di gestire, almeno indicativamente

-ice-

Reply to
ice

ok, devi però metterci un pull-up esterno per ogni pulsante perchè se questa porta il pic non ha pull-up integrati poi devi prevedere un debounce via firmware

, le porte da RA5 a RA7 e le RB0 e RB1 come uscite per fare

si... però il pic che hai scelto non ha la uart integrata e le routine di tramissione seriale devi scriverla a mano (ma non è così difficile) il pic che riceve le tastiere invece è meglio che abbia la uart hardware altrimenti sei costretto a fare polling

-ice-

Reply to
ice

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.