Vai al contenuto
PLC Forum


Multiplexing - Codice o soluzione + semplice ??


rasega

Messaggi consigliati

Ciao,

sto cercando di gestire 8 sonar tramite un 68HC11,multiplexandoli.

Le routine di lettura del singolo sonar son già pronte,

ma ora dovrei capire come fare ad unire gli 8 valori (binari) che i

sensori mi forniscono :

- uso 3 bit (PB3, PB4 e PB5) per scegliere il sonar tramite il

multiplexer (LS238) che ho montato sulla scheda:

000 - sonar1

001 - sonar2

...

111 - sonar8

- ho pensato di utilizzare una variabile a 8 bit mettendo ad 1 il bit

corrispondente al sensore se questo rileva un oggetto (entro il range

da me definito) :

es : 00101000 ---> attivi sonar 4 e 6 (conto dal LSBit)

Che codice assembly dovrei usare secondo voi per settare il bit

corrispondente senza doverlo ripetere 8 volte, una per ogni sonar ??

C'è una soluzione + semplice altrimenti ??

Link al commento
Condividi su altri siti


Da quello che scrivi sembra che i sonar diano un livello 1 se c'è presenza di ostacoli nella gamma coperta.

Il sistema più semplice è mantenere i sonar sempre attivi e usare il miltiplexer per leggere in sequenza le uscite dei sensori.

Link al commento
Condividi su altri siti

Problema di sfruttamento delle risorse del robot a parte (8 sonar richiedono un po' troppa potenza...) ,

il multiplexer voglio effettivamente che selezioni uno alla volta i sonar, ma non è neppure fattibile che essi funzionino continuamente, si distrurberebbero a vicenda non sapendo più quale sia l'echo giusto che sto ricevendo,

di conseguenza devo x forza usarne uno alla volta !!

In ogni caso il mio problema al momento è principalmente di puro assembler :

- come setto i bits di ingresso del multiplexer in modo da fare 8 cicli in ogniuno dei quali seleziono 1 sonar in base al suo codice binario ?? (in pratica vorrei contare da 000 a 111 sui bit PB3,4,5)

- come setto il bit corrispondente al sonar su una variabile ad 8 bit ??

Altra soluzione sarebbe inviare al programma di controllo i dati del singolo sonar volta x volta, ma questo sarebbe uno spreco di banda e risorse, no ??

Link al commento
Condividi su altri siti

Scusa la domanda banale, ma tu conosci l'assembler e, in particolare, quello del 68HC11?

Perchè alzare o abbassare un bit è un'operazione banale. Tutti i microcontrollori e microprocessori si dividono un due categorie, da qusto punto di vista: quelli che hanno istruzioni dedicate al bit (come i PIC) e quelli che non ce l'hanno (come il classico 8052).

Se il 68HC11 ha le sistruzioni dedicate devi solo sfogliarti l'elenco istruzioni per reperire il mnemonico, l'equivalente delle BCF(bit clear) e BSF(bit set) dei PIC.

Se non ha questo tipo di istruzioni si usa il classico metodo: l'OR forza gli "1" e l'AND forza gli "0". Quindi se devi settare il bit 3 della variabile Pippo esegui Pipppo OR b'00001000'; mentre per azzerare il bit 3 della variabile Pippo esegui Pippo AND b'11110111'.

Queste sono le regole elementari dell'algebra di bool.

Link al commento
Condividi su altri siti

In effetti ho problemi proprio xè non conosco tanto bene l'assembler, ma le istruzioni base ci sono (bset, bclr) e le conosco,

scusa mi son spiegato male :

il problema non è tanto del settaggio dei bit, quanto della gestione del ciclo :

se devo fare un ciclo da 1 a 8 (o da 0 a 7) ed uso 3 bits (3,4 & 5) di un registro a 8 bit (PORT B !!) così :

xx000xxx

xx001xxx

xx010xxx

...

...

xx111xxx

Come dovrei fare a creare questo ciclo (ovvero incrementare la "variabile", ovvero settare i 3 bits) ??

In effetti in questo caso non conosco il codice assembler che dovrei utilizzare :( ,

la logica mi dice che potrebbe funzionare aggiungendo 4 (00001000) e verificando il raggiungimento della fine ciclo con una maschera (xx111xxx), ma non ne sono molto convinto !! :rolleyes:

Modificato: da rasega
Link al commento
Condividi su altri siti

Che software posso usare per debuggare il codice scritto in assembler per favore ??

L'assemblatore asmhc11 che uso mi dice solamente quanti errori ci sono, ma non dove si trovano e di che tipo sono :blink::rolleyes:

Link al commento
Condividi su altri siti

se devo fare un ciclo da 1 a 8 (o da 0 a 7) ed uso 3 bits (3,4 & 5) di un registro a 8 bit (PORT B !!) così :

xx000xxx

xx001xxx

xx010xxx

...

...

xx111xxx

Link al commento
Condividi su altri siti

  • 2 weeks later...
Dal tenore delle tue domande pare di capire che tu non abbia una grande dimestichezza con queste tecniche. Forse sarebbe il caso che tu ti faccia una cultura.
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...