Vai al contenuto
PLC Forum


Come Si Programma Un Microcontrollore


elettro89

Messaggi consigliati

Salve a tutti, vorei chiedere se con un microcontrollore si può fare una cosa del genere, io in programmazione non sono capace se c'è una buona anima che mi potrebbe aiutare magari.

Secondo voi si riesce a fare si che, avendo una sequenza di 8 bit variabili come ingressi nel microcontrollore, facendo si che il microcontrollore quando riconosce quella sequenza di bit di ingresso

mi dia una uscita a 1 e con i restanti bit di combinazioni dia 0. Questo e fatibbile con un microcontrollore?. senza stare li a usare più di una porta logica per la soluzione. se non si capisce quello che voglio cercherò di essere più chiaro.

Link al commento
Condividi su altri siti


Mah....se ho capito bene (il chè non è affatto detto) penso non serva affatto scomodare un microcontrollore per una banalità del genere.

Rischi di finire come colui che noleggiò un sommergibile per andare a pesca di trote. :smile:

Saluti

Mirko

Link al commento
Condividi su altri siti

Quale strade alternative ci sono. in fatti sono dei giorni che ci penso, ma le strade erano due o il microcontrollore o qualcosa di simile. In pratica bisogna fare si che tutto questo sia programmabile c'è se in ingresso esempio o questa combinazione binaria es. 01101001 da questa combinazione in poi in uscita deve essere a 1. mentre al disotto di questa combinazione l'uscita deve essere a 0. se un domani lo voglio cambiare c'è che in ingresso non sia più quella combinazione ma che so, 10010110 sempre stessa cosa deve dare in uscita 1 e al disotto 0. Spero che avrai capito. che strade brevi e economiche ci sono? grazzie

Link al commento
Condividi su altri siti

Un paio di contraves binari, ed 8 diodi a formare un And cablato.

Oppure al posto dei contraves, dei Dip Switch (dipende da quanto deve essere comoda la pre-impostazione)

Saluti

Mirko

Link al commento
Condividi su altri siti

capito forse dei Dip Switch da 8 sono comodi. se si riesce e realizzarlo saro felice. io o pensato molti metodi ma non so come metterli in pratica. aspetto tue notizzie grazzie ancora

Link al commento
Condividi su altri siti

Due dip switches da 8 bits: uno come riferimento e l'altro per impostare il codice (oppure un dip switch solo per il codice di riferimento). I due codici entrano in un OR esclusivo; la funzione di OR esclusivo da in uscita "1" se almeno un ingresso è diverso, se tutti gli ingressi sono uguali, l'uscita è "0", Basta negare l'uscita ed hai la funzione che ti necessita.

Se non sai come fare per realizzare la funzione OR esclusivo dillo che ti aiutiamo.

Link al commento
Condividi su altri siti

In pratica il switches da 8 per la regolazione del codice binario, si ok io diciamo che avevo pensato anche con le porte logiche ma mi ero detto tra me forse viene troppo complicato la cosa. La porta nor esclusiva e la stessa della porta logica nor o e diversa, non lo mai sentita nominare. Se mi dici che bisogna solo usare una nor forse ci riusciro, ma se la porta nor esclusiva e diversa mi metti in difficoltà. Nel dubbio io provo a buttare uno schizzo con porta nor, e vedo magari posta se a tempo lo schema del probblema. grazzie

Link al commento
Condividi su altri siti

EXOR, o OR esclusivo, o somma disgiuntiva ha una logica contraria all'OR.

Con l'OR si forzano gli "1", perchè basta avere un solo ingresso a "1" affinchè l'uscita sia a "1"; similmente il NOR forza gli "1", ma l'uscita è negata quindi un solo ingresso ad "1" per avere l'uscita a "0".

Con l'EXOR si forza la diversità tra gli ingressi; infatti basta che un solo ingresso sia di valore differente dagli altri n ingressi per avere l'uscita a "1".

A titolo di esempio guarda questo data sheet.

Questo è uno schema per realizzare XOR tramite NOR; quest'altro è uno schema per realizzare XOR tramite NAND, dalla tabella della verità allaegata al'immagine puoi capire più facilmente il funzionamento di un XOR (XNOR)

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

a ecco la porta nor esclusiva e la exor ora si, io la sopre chiamata exor. allora si grazzie del aiuto, avvendo il manuale esendo che ci sono più di una porta logica in comercio, non sapevo come comportarmi. grazzie

Link al commento
Condividi su altri siti

Beh, solamente a puro titolo pseudo-didattico, posto quello con microprocessore categoria economica e facile da programmare, magari può interessa a qualcuno...

Con il dip-switch a 4 posizioni si possono selezionare 128 combinazioni diverse una volta memorizzato il loro valore nel programma, come esempio ho messo che il LED si accende quando il valore è identico, ma c'è scritto anche come modificare l'istruzione per fare che resti acceso se il valore è anche più alto...

SCHEMA:

BinaryIN-Matches.PNG

CODICE:

(Sono più le spiegazioni che le istruzioni :blink:)

/********************************

*   BINARY IN MATCH by GiRock   *

*********************************

*  MikroC + PIC16F84A XT = 4MHz *

*********************************

*  CFG = WDT=OFF+PUT=ON+CP=OFF  *

*********************************/

// Definizioni associative

#define LED RA0_bit

#define ON  1

#define OFF 0

// Variabili globali

unsigned short AValue = 0x00;

unsigned short BValue = 0x00;

// Costanti globali

// Fino a 128 combinazioni di bits, basta scriverle tutte!!!

const unsigned short XCode[] = {0b01101001, 0b10010110, 0b01101111, 0b11110110};

// Routine principale

void main() {

	// Settaggio porte

	// PORTA tutti ingressi eccetto RA0 uscita per il LED

	TRISA = 0b00011110;

	// Reset della PORTA

	PORTA = 0x00;

	// PORTB tutti ingressi

	TRISB = 0b11111111;

	// Reset della PORTB

	PORTB = 0x00;

	// Ciclo infinito

	while(1) {

		// Leggo i bit su PORTA escludendo RA0,

		// il valore va in base alla selezione

		// del dip-switch a 4 posizioni

		AValue = PORTA >> 1;

		// Leggo i bit su PORTB,

		// il valore va in base alla selezione

		// del dip-switch a 8 posizioni	  

		BValue = PORTB;

		// Se il valore è uguale alla costante

		// selezionata in base al dip-switch a

		// 4 posizioni, accendo il LED solo se

		// questo è spento

		// (>= Se vuoi tenerlo accesso per valori superiori)

		if (BValue == XCode[AValue]) {

			if (!LED) LED = ON;

		} else {

			// altrimeni se non corrispondono

			// i valori, lo spengo solamente

			// se è acceso

			if (LED) LED = OFF;

		}

		// Ritardo di 0.33 sec.

		// 3 letture al secondo

		Delay_ms(333);

	}

	// Fine ciclo

}

// Fine routine principale

Modificato: da GiRock
Link al commento
Condividi su altri siti

Grazzie per lo schema, anche se il codice e arabo per me non avendo mai proggramato un microcontrollore, volevo chiedere qualè il punto da modifficare per il cambio della combinazione? . Vi spiego anche cosa deve fare questa funzione. In pratica o aquistato un conta giri digitale a due ciffre e volevo fare si che quando sul display esempio. apare il valore 78

esendo che nei decodificatori da un valore binario diverso per oggni numero che appare sul display. Volevo fare si che a 78 si eccitava il relè e che quando scendeva al disotto dei 78 il relè si stacchi. Tutto questo proggramato con possibilità di cambiare l'apertura per l'eccitazione del relè, in base a quando voglio fare si che a quei giri mi apre il relè esempio se lo voglio aprire non più a 78 ma a 10. Secondo tè va modificato si riesce a fare una cosa cosi, senza complicazioni. grazzie.

Link al commento
Condividi su altri siti

Prima di tutto dovresti avere a disposizione l'uscita del contasgiri. Se hai a disposizione l'uscita del contagiri è possibile realizzare quello che vuoi fare. Non puoi mettere sul forum il foglio tecnico del contagiri, oppure mettere marca e modello per poterlo vedere?

Link al commento
Condividi su altri siti

Esatto, dovresti fornire più informazioni sul dispositivo, tensione di alimentazione e IC presenti sulla scheda, il PIC è comunque compatibile con le specifiche TTL e si può al limite adattare ad altri protocolli, tutto dipende da come viene pilotato il display...

ATTENZIONE!!!

Le combinazioni possibili sono solo 2 ^ 4 = 16, inizialmente avevo usato un altro micro e mi sono rimaste in testa quelle, poi ho preferito andare sul semplice con il solito 16F84A...

Le combinazioni vanno scritte quì separate da una virgola:

// Fino a 16 combinazioni di bits, basta scriverle tutte!!!

const unsigned short XCode[] = {0b01101001, 0b10010110, 0b01101111, 0b11110110}; 

Link al commento
Condividi su altri siti

Buona sera a tutti, si mi ero ricordato ora nel leggere di poter mettere l'schema elettrico cosi potavate adatarlo alla aplicazione che vorrei ottenere, sperando che sono stato chiare e preciso nella funzione che vorrei ottenere. Vi linko il sito che è http://www.futuraelettronica.net/pdf_ita/8220-K2625.pdf . aspetto vostre notizzie. grazzie ancora

Link al commento
Condividi su altri siti

OK si può fare. Se te la cavi discretamente con saldatore e basette è una cosa moltom semplice

Devi parallelare gli 8 bits che vanno dalla scheda base all'unità dei dispaies, precisamente quelli corrispondenti ai fili 1,2, 6, 7, 9, 10, 11, 12. Questi 8 bits li mandi a 8 ingressi P0 - P7 dello 74LS518, agli ingressi Q0 - Q7 del medesimo colleghi un dip switch da 8 interruttori, con cui imposti il valore. Quando il conteggio del contagiri coincide con quel valore esatto hai l'uscita vera.

Però io ti consiglio di comparare solo i bit di peso più elevato altrimenti l'uscita difficilemte riuscirai a vederla. Comincerei con il comparare i 4 bits di peso maggiore e poi provare pian piano sino a quando si riesce a scendere.

Link al commento
Condividi su altri siti

In pratica vedendo il datashett ieri o capito subito che quell'integrato era da utilizzare. Pero se o capito bene, se montero anche il siplay alle uscite del decodificatore avvro probblemi in lettura, comunque grazzie a tutti del aiuto.

Link al commento
Condividi su altri siti

Ecco il nuovo schema completo con micro dopo che hai postato il tuo, la parte racchiusa nel rettangolo è quella già esistente, il partitore formato da reti resistive (ci sono anche quello con il pin in comune) serve per abbassare la tensione da 8V a 5V, le combinazioni memorizzabili sono 16, questa volta il Relay resta eccitato per valori uguali o superiori alla soglia...

PICBinaryComp.png

CODICE:

/********************************

*   BINARY IN MATCH by GiRock   *

*********************************

*  MikroC + PIC16F84A XT = 4MHz *

*********************************

*  CFG = WDT=OFF+PUT=ON+CP=OFF  *

*********************************/

#define LED RA0_bit

#define ON  1

#define OFF 0

unsigned short AValue = 0x00;

unsigned short BValue = 0x00;

// Fino a 16 combinazioni di bits

const unsigned short XCode[] = {95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20};

// Dip-Switch 4

// 0000 = 95

// 0001 = 90

// 0010 = 85

// 0011 = 80

// 0100 = 75

// 0101 = 70

// 0110 = 65

// 0111 = 60

// 1000 = 55

// 1001 = 50

// 1010 = 45

// 1011 = 40

// 1100 = 35

// 1101 = 30

// 1110 = 25

// 1111 = 20

void main() {

	TRISA = 0b00011110;

	PORTA = 0x00;

	TRISB = 0b11111111;

	PORTB = 0x00;

	while(1) {

		AValue = PORTA >> 1;

		BValue = ((PORTB & 0b00001111) * 10) | (PORTB >> 4);

		if (BValue >= XCode[AValue]) {

			if (!LED) LED = ON;

		} else {

			if (LED) LED = OFF;

		}

		// 3 letture al secondo

		Delay_ms(333);

	}


}

Link al commento
Condividi su altri siti

Volevo chiedere al sig Livio Orsini che il mio fornitore non possiede il 74als518 non possiede neanche i equivalente.come devo fare? realizo lo schema che c'è sul datashett strada secondo mè più veloce.

Link al commento
Condividi su altri siti

realizo lo schema che c'è sul datashett strada secondo mè più veloce.

A parte il fatto che puoi trovare i circuiti da qualche negozio on line (però se compri solo 2 integrati spendi di più per le spese di spedizione che per il materiale), realizzare il circuito a componenti discreti può essere una buona soluzione se non hai problemi di spazio.

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...