Vai al contenuto
PLC Forum


Pic16f876a - Analogiche


walterword

Messaggi consigliati

virrei utilizzare i primi 2 ingressi della porta A come ingressi analogici

mentre i rimanenti come uscite per pilotare un lcd a 4 bit

si puo fare ?

adesso utilizzo da ra0 a ra3 per pilotare l'lcd , quindi nel main disabilito le analogiche

come posso abilitare solo i primi 2 ingressi come analogiche ?

uso ccs compiler

ciao

grazie

Link al commento
Condividi su altri siti


Si Walter si può fare, guarda nell'help in linea del CCS, built in function ==> read_AD(), (cito a memoria e ci può essere qualche imprecisione). Nelle funzioni collegate e nella spiegazione di quella funzione è indicato come fare per abilitare solo alcune linee A/D

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

Ciao Walter,

Purtroppo non puoi configurare solo an0 e an1 come entrate analogiche c'e' una tabella nel manuale a pag 112 che ti da tutte le combinazioni disponibli qui un breve riassunto

A = Analog input D = Digital I/O
PCFG3:PCFG0   an7- re2    >   an0-ra0
                                           
0000                A A A A A A A A 
0001                A A A A VREF+ A A A 
0010                D D D A A A A A 
0011                D D D A VREF+ A A A 
0100                D D D D A D A A    ------  tuo caso 
0101                D D D D D D D D 
1000                A A A A VREF+ VREF- A A 
1001                D D A A A A A A 
1010                D D A A VREF+ A A A 
1011                D D A A VREF+ VREF- A A 
1100                D D D A VREF+ VREF- A A 
1101                D D D D VREF+ VREF- A A 
1110                D D D D D D D A 
1111                D D D D VREF+ VREF- D A 
Come vedi , in base alla config dei bit PCFG3:PCFG0 del registro ADCON1 puoi decidere quali entrate devono essere analogiche e quali digitali. Nel tuo caso la config che piu' si avvicina e la 0100 due analogiche una dig una analogica tutte le altre dig. Per il ccs devi usare
setup_adc_ports( RA0_RA1_RA3_ANALOG );

Link al commento
Condividi su altri siti

grazie per le gentili informazioni

praticamente come dice dlgcom devo utilizzare almeno 3 analogiche

per la porta A .

Nel mio caso setup_adc_ports( RA0_RA1_RA3_ANALOG ); come dice giustamente luca

bene adesso provo solo che pero porca miseria sto gia usndo

ciao e grazie

walter

Link al commento
Condividi su altri siti

ho fatto le modifiche ma non funziona piu bene

vi posto il codice :

#include "Prova.h"

#include <string.h>

#include "MyLCD4.h"

unsigned long QuotaEncoder; // Quota Globale dell'encoder

unsigned char mem;

// Define dei segnali dell'encoder (Ingressi)

#bit ENC_UP = 0x6.1 // PIN_B1 (1 = Up / 0 = Down)

#bit ENC_Z = 0x6.2 // PIN_B2 (1 = Z)

#bit ENC_ZERO = 0x6.3 // PIN_B3 (1 = Micro di Zero)

#bit INC_PAGE = 0x6.4 // PIN_B4 (1= Incrementa pagina LCD)

#bit DEC_PAGE = 0x6.5 // PIN_B5 (1= Decrementa pagina LCD)

#bit MEM1 = mem.0 //Memoria fronte di salita

#bit MEM2 = mem.1 //Memoria fronte di salita

unsigned char PAGE;

// Definizioni per l'LCD

//#bit DATA_PIN_4 = 0x5.0 // PIN_A0

//#bit DATA_PIN_5 = 0x5.1 // PIN_A1

//#bit DATA_PIN_6 = 0x5.2 // PIN_A1

//#bit DATA_PIN_7 = 0x5.3 // PIN_A3

#bit DATA_PIN_4 = 0x5.2 // PIN_A2

#bit DATA_PIN_5 = 0x5.4 // PIN_A4

#bit DATA_PIN_6 = 0x5.5 // PIN_A5

#bit DATA_PIN_7 = 0x7.0 // PIN_C0

#bit E_PIN = 0x7.1 // PIN_C1 Port for E

#bit RS_PIN = 0x7.2 // PIN_C2 Port for RS

#bit TRIS_DATA_PIN_4 = 0x85.2 // TRIS A0

#bit TRIS_DATA_PIN_5 = 0x85.4 // TRIS A1

#bit TRIS_DATA_PIN_6 = 0x85.5 // TRIS A2

#bit TRIS_DATA_PIN_7 = 0x87.0 // TRIS A3

#bit TRIS_E = 0x87.1 // TRIS C0 TRIS for E

#bit TRIS_RS = 0x87.2 // TRIS C1 TRIS for RS

.......

void main(void)

{

char Buff[17];

set_tris_a(0b00001011);

// In: PA0 analog RA0

// In: PA1 analog RA1

// Out:PA2 DATA_PIN_4 LCD

// In: PA3 analog RA1

// Out:PA4 DATA_PIN_5 LCD

// Out: PA5 DATA_PIN_6 LCD

set_tris_c(0b10000000);

// Out : PC0 DATA_PIN_7 LCD

// Out:PC1 LCD E_PIN

// Out:PC2 LCD RS_PIN

// PC3 SCL (Pin 15 Mainboard)

// PC4 SDA (Pin 27 Mainboard)

// PC5 (Pin 28 Mainboard)

// Out : PC6 Tx Seriale (Pin 29 Mainboard)

// In : PC7 Rx Seriale (Pin 30 Mainboard)

setup_adc(RA0_RA1_RA3_ANALOG);

while(1)

{

.......................

}

//Non riesco a capire cosa possa sfuggire , cioe l'LCD funziona ma butta fuori qualche carattere strano

e non visualizzo piu la quota dell'encoder

:(:(:(

Modificato: da walterword
Link al commento
Condividi su altri siti

ifachsoftware

Con che compilatore stai lavorando e con che PIC ; inoltre quale e' il problema ?

Perche' se usi il compilatore della CCS con le stringhe spesso fa dei casini e se usi le analogiche a seconda del modello devi specificare i bit della risoluzione con apposito define.

Ciao B)

Link al commento
Condividi su altri siti

ho spostato le porte dell' lcd

funziona ma non bene , cioe escono alcuni caratteri farlocchi

e non visualizzo piu la quota encoder

livio non famri dire cose che poi vengono censurate per favore

:rolleyes::rolleyes:

Link al commento
Condividi su altri siti

claudio ho modificato il programma lcd + encoder aggiungendo nuove pagine all' lcd

e tutto funzionava egregiamente

siccome pero sto ancora aspettando il passaporto e il visto per l'india , pensavo

di colorare un po aggiungengo 2 nuove pagine all'lcd che visualzizassero

i valori analogici in Ra0 e RA1

visto che pero il buon luca guerra mi ha elencato il settaggio della porta A

ho scelto quello che piu si addice , ma per far cio ho dovuto spostare

i fili e la configurazione dell' lcd per quanto riguarda i 4 bit di dati , l'enable e RS

solo che pero mi escono dei caratteri strani

ho postato il settaggio della porta A , con i rem era prima , senza e' adesso

ma non capisoc se c'e' qualcosa che v ain conflitto

:rolleyes:

....caro fratellino ifach

ciao

walter

Link al commento
Condividi su altri siti

in poche parole

lcd a 4 bit di dati di cui 3 bit in porta A e 1 bit in porta C

RS e enable in porta C

Porta A con 2 analogiche (Ra0 e Ra1 )

non vorrei che ci sia qualche conflitto (di interessi)

:blink:

Link al commento
Condividi su altri siti

La butto li ...

Non e' che nella tua routine mylcd4 usi uno swap per trasmettere il primo nibble e poi il secondo ?

cambiando i fili , forse ora non c'e' piu' corrispondenza tra i bit.

Link al commento
Condividi su altri siti

ciao luca

in sostanza non ho fatto altro che shiftare i fili e di conseguenza i settaggi dei pins delle porte

cioe l'lcd funziona , per esempio la scritta 'encoder' la visualizza correttamente

mentre visualizza la 'X' al posto della ' Z'

i numeri proprio non li visualizza assolutamente

non capisco , ma credo che possa essere un conflitto nel compialatore

ho anche aggiunto la direttiva #device pic16f876a adc=10 , con relativi settaggi ma

non cambia niente

boh ... oggi pomeriggio faro altre prove <_<

ciao e grazie

walter

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