Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ognigiorno.com/wp-content/plugins/math-comment-spam-protection/math-comment-spam-protection.php:1) in /var/www/html/ognigiorno.com/wp-includes/feed-rss2.php on line 8 Protocollo – OgniGiorno.com https://www.ognigiorno.com insieme tutti i giorni Sun, 29 Apr 2012 20:53:39 +0000 en-US hourly 1 https://wordpress.org/?v=5.8.9 Un’architettura completa https://www.ognigiorno.com/2009/09/08/un%e2%80%99architettura-completa.html https://www.ognigiorno.com/2009/09/08/un%e2%80%99architettura-completa.html#respond Tue, 08 Sep 2009 11:00:29 +0000 http://www.ognigiorno.com/?p=358 Read More »Un’architettura completa]]> Vediamo come realizzare una scheda flessibile e potente utilizzando il PIC16F887. Tramite questa scheda riusciamo a realizzare quasi ogni circuito, basando la struttura su un BUS con cui interfacciare le varie periferiche.
arch

Qui viene presentata l’architettura e descritto il funzionamento di massima. Da qui si può partire poi per la personalizzazione, in base ai desideri di ciascuno.

La mia scelta è stata quella di utilizzare un controllore abbastanza potente, da essere considerata davvero una soluzione universale. Comprato direttamente da microchip spendiamo meno di 3 auro, quindi non considero uno “spreco” quando la realizzazione ci porta a realizzazioni semplici.
Esempi di utilizzo sono i classici ed ormi inflazionati robot, antifurto, centraline di controllo, più o meno tutto, limitatamente alla nostra capacità e voglia di scrivere firmware e pensare a periferiche da collegare.

Lo schema di massima è visibile in figura e mostra una configurazione abbastanza utilizzabile: tastiera e display sono quasi onnipresenti nei nostri circuiti, quindi sono collegati e gestiti direttamente dal controllore. Le altre due porte del processore servono per la realizzazione del BUS e del canale di interrupt. In questo modo realizziamo un BUS multiprotocollo con la gestione di interrupt.

Multiprotocollo perché sono inserite le linee seriali e i2c, ma anche i restanti 4 pin che permettono uno scambio di 4 bit. Ogni connettore al BUS ha inoltre un collegamento ad un diverso pin della porta B che gestisce gli interrupt. busIn questo modo ogni scheda può prevedere un pin di segnalazione e il software sulla mainboard ne riconosce la segnalazione, in base alla posizione.

]]>
https://www.ognigiorno.com/2009/09/08/un%e2%80%99architettura-completa.html/feed 0
Utilizzare le tastiere a matrice https://www.ognigiorno.com/2009/03/23/utilizzare-le-tastiere-a-matrice.html https://www.ognigiorno.com/2009/03/23/utilizzare-le-tastiere-a-matrice.html#respond Mon, 23 Mar 2009 10:37:10 +0000 http://www.ognigiorno.com/?p=209 Read More »Utilizzare le tastiere a matrice]]> Vediamo in questo articolo come utilizzare le tastiere a matrice tramite un controllore PIC. Queste tastiere si possono trovare in commercio, o si possono far realizzare su misura a costi piuttosto bassi (meno di 8 euro l’una). Permettono di ottimizzare il numero di piedini utilizzati per i tasti, in quanto per NxM tasti sono necessari solo N+M connessioni al microprocessore.
Nell’immagine è poi visibile un esempio di come montare la tastiera.

tastiera_muro

Utilizzando la placca BTicino delle prese shuko ho installato la tastiera al muro con un lavoro praticamente invisibile, dalla resa altamente professionale. La tastiera utilizzata è di quelle a membrana con adesivo sul retro. Per l’installazione ho incollato la tastiera al supporto nero (quello su cui solitamente si incastrano gli interruttori o le prese) e applicato la placca. Il circuito è inserito nella scatola all’interno del muro.
Le tastiere a matrice le possiamo anche reperire in un qualsiasi mercatino, per esempio acquistando un vecchio telefono, o possiamo realizzarle noi stessi, collegando gli interruttori in uno schema righe/colonne.

La logica consiste nel raggruppare righe e colonne della tastiera e collegare tutti i terminali a porte di I/O del controllore. Le porte vanno quindi configurate in Input per le colonne e Output per le righe (o viceversa). Le linee in ingresso dovrebbero avere una resistenza di pull-up (o pull-down, se preferiamo. Il codice va poi scritto di conseguenza).

tastiera_matrice
La routine che legge il tasto premuto deve ciclare sui piedini attestati alle righe, portando a livello basso uno alla volta. Leggendo le colonne in assenza ti tasto premuto, si leggerà 1 su tutti i piedini. Quando la lettura è 0 significa che è stato premuto il tasto corrispondente all’incrocio riga/colonna (riga portata bassa, colonna letta).

Le tecniche per ciclare sulle righe sono differenti: nell’esempio da me riportato vengono modificate una per una direttamente. In alternativa si può utilizzare l’operatore si shift. Dipende da quali sono i terminali a cui sono collegate. Ne dobbiamo tenere conto (se possibile) in fase di progettazione. Non sempre è possibile perché ormai i controllori hanno molti piedini dedicati a funzioni speciali (UART, SPI, I2C, convertitori A/D, PWM, …) per cui non sempre riusciamo dedicare alla tastiera piedini contigui della stessa porta.

Immediatamente dopo aver effettuato la lettura va inserito un piccolo ritardo come antirimbalzo.
Nel codice sorgente che ho allegato vediamo un altro controllo sulla pressione, inserito solo per un tasto, ma utilizzabile tranquillamente per tutti. Associato alla pressione di un tasto ho due differenti codici di ritorno in caso di pressione breve o prolungata.

unsigned char ReadKey (void) {
unsigned char tt;

for (;;) {
PORTC = 0xff;

RC5 = 0;
if (RB5 == 0)
return 0x0b;
if (RB4 == 0)
return 0;
if (RB3 == 0) {
tt = 0;
while (!RB3) {
DelayMs (2);
tt++;
if (tt > 200)
return 0x1a;
}
return 0x0a;
}

RC5 = 1;
RC4 = 0;
if (RB5 == 0)
return 9;
if (RB4 == 0)
return 8;
if (RB3 == 0)
return 7;

RC4 = 1;
RC3 = 0;
if (RB5 == 0)
return 6;
if (RB4 == 0)
return 5;
if (RB3 == 0)
return 4;

RC3 = 1;
RC1 = 0;
if (RB5 == 0)
return 3;
if (RB4 == 0)
return 2;
if (RB3 == 0)
return 1;
}

...

c = ReadKey();
DelayMs (200);

]]>
https://www.ognigiorno.com/2009/03/23/utilizzare-le-tastiere-a-matrice.html/feed 0
Un protocollo di comunicazione seriale https://www.ognigiorno.com/2009/03/08/un-protocollo-di-comunicazione-seriale.html https://www.ognigiorno.com/2009/03/08/un-protocollo-di-comunicazione-seriale.html#respond Sun, 08 Mar 2009 17:02:05 +0000 http://www.ognigiorno.com/?p=92 Read More »Un protocollo di comunicazione seriale]]> Vediamo come realizzare un semplice protocollo di comunicazione basato sul trasferimento seriale. Si tratta di un protocollo basato su messaggi, implementabile in tutti i circuiti basati su controllore, in modo da riuscire a modula rizzare la progettazione.

Costruire circuiti o semplici robot ci porta sempre ad avere bisogno delle stesse periferiche: schede display, tastiera, RTC, …

Lavorando in questo modo, per ogni progetto dobbiamo occuparci della progettazione della scheda madre e di come interagisce con le sue periferiche.

Il protocollo qui descritto offre alcuni vantaggi che lo rendono applicabile anche sui controllori pi piccoli. Ecco le caratteristiche principali:

  • Protocollo single master/multi slave
  • Basato su messaggi a risposta singola: ogni comando è costituito da un messaggio di andata (da master verso slave) e una risposta
  • Previsto indirizzamento. Il messaggio contiene l’indirizzo del destinatario. È possibile quindi avere più periferiche sulla stessa linea.
  • Ogni messaggio contiene più controlli di integrità. Viene garantita una buona qualità della trasmissione tramite il byte di vli (indica la lunghezza del messaggio) e il check
  • Esiste un indirizzo di broadcast
  • Assegnamento dinamico dell’indirizzo delle periferiche

Formato dei messaggi

Comando: [stx][vli][1][cmd][addr]…data…[crc][etx]

Risposta: [stx][vli][0][cmd][addr]…data…[crc][etx]

stx: 0x02

vli: Variable length indicator

cmd: codice che identifica il comando da inviare o a cui si risponde

addr: indirizzo di destinazione o sorgente, in caso di risposta

data: eventuali dati aggiuntivi. Dipende dal comando.

crc: controllo sui dati trasmessi. Io ho implementato XOR su tutti i byte

Etx: 0x03

]]>
https://www.ognigiorno.com/2009/03/08/un-protocollo-di-comunicazione-seriale.html/feed 0