Vai Indietro   PcTuner Forum > Sezione Hardware > Programmazione PIC
PcTuner Overclock
Arcade Registrazione Blogs Regolamento Feedback FAQ Lista Utenti Calendario Segna come Letti

Ultimi 5 blog pubblicati su PcTuner Blog
Data Titolo

Rispondi
 
Strumenti Discussione Modalità Visualizzazione
Vecchio 12-03-2006, 00.57.15   #1
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Volete interfacciare il pic18f4550 al PC???

... arieccomi...

Avevo iniziato qualche giorno fà a fare domande sul pic18f4550 e l'interfacciamento con il PC ... e ora mi trovo a spiegare come si fà! Che strano!

Cosa ci serve per iniziare?

Per prima cosa ci serva scaricare dal link
http://www.microchip.com/stellent/id...param=en022625
un driver da installare nel pc (e dove altrimenti) che serve per far riconoscere il nostro hardware come se fosse una periferica RS232 (strano ma vero!!).
Quando finirete di installare tutte queste cose, e attaccherete per la prima volta la periferica al PC vi verrà chiesto di installare un ulteriore driver che dovrete pescare qui:

C:\MCHPFSUSB\fw\Cdc\inf\win2k_winxp (mchpcdc.inf)

Questa cartella vi verrà creata automaticamente dopo l'installazione del driver per emulare la usb come se fosse una rs232!

Naturalmente vi servirà MPLAB e il C18 (compilatore freeware di c), tutto scaricabile dal mitico sito della microchip!
Infine dovremmo scrivere la nostra applicazione con un'interfaccia utente "simpatica" con la quale diremo al pic cosa fare e acquisire i dati che ci invierà! A tal scopo useremo il VB6 (se non vi piace usate quello che volete basta che riusciate a comunicare con il PIC).




In allegato a questa discussione vi invio due allegati.
Il primo contiene Il file di progetto (MCHPUSB.mcp) di MPLAB con il quale vi verranno caricate tutte le librerie che servono al pic per funzionare in comunicazione USB 2.0.
Il secondo è un esempietto per acquisire dal PIC i dati, scritto in VB6.


Analiziamo Il primo allegato:
Il file che dovrete modificare per far fare al pic quello che volete, è il file user.c. Di seguito ne analizzo un frammento:

Codice:
void UserInit(void)
{
    mInitAllLEDs();
    mInitAllSwitches();
    old_sw2 = sw2;
    old_sw3 = sw3;

// Your initialization codes would be placed here.
    
	TRISDbits.TRISD2 = 0;		// Imposto il Pin RD2 e RD3 in outputs (attivo 2 LED).
	TRISDbits.TRISD3 = 0;

	TRISAbits.TRISA0 = 1;		// Analog Input per il potenziometro
	TRISBbits.TRISB0 = 1;		// Analog Input per il controllo di temperatura (questo lo farò in futuro)

	PORTDbits.RD2 = 0;		// Initially RD2 and RD3 are LOW.
	PORTDbits.RD3 = 0;

	initadc();
	
}//end UserInit

void initadc(void)
{
	ADCON1 = 0b00000000; 	// Vrefs at Vdd and Vss. 1 analog input.
	ADCON0 = 0b00000000;	// Seleziono CHAN0, ADC disabilitato (registro di settaggio adc)
	ADCON2 = 0b00100101;	// 8Tad, Clock = Fosc/16, Left justified.

	ADCON0bits.ADON = 1;	// Attivo ADC.
}


void ProcessIO(void)
{   
    BlinkUSBStatus();
    // User Application USB tasks
    if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return;

	// Your code comes in here onwards.

	if (getsUSBUSART(input_buffer, 1)) // Legge una stringa dalla USB (input_buffer= char* in input,1=numero di byte)
	{
		received_data = input_buffer[0];

		switch (received_data)		// in received_data metto il valore che spedisco dal pc
		{

//************************   PROVA MIA   ****************//
		case 'L':
			// Accendo e spengo 10 volte 2 LED

			for(i=0;i<10;i++){
			
				for(j=0;j<1000;j++);		// Ritardo

				PORTDbits.RD2 = 0;
				PORTDbits.RD3 = 0;

				for(j=0;j<1000;j++);		// Ritardo
		
				PORTDbits.RD2 = 1;
				PORTDbits.RD3 = 1;
			}
				PORTDbits.RD2 = 0;
				PORTDbits.RD3 = 0;
			break;
//****************************************//


// ******************************
// 	Comunicazione con il PIC
// ******************************
		 case 'T' :
			output_buffer[0] = 'X';		// Mi faccio spedire 'X'
			if (mUSBUSARTIsTxTrfReady())
				{
					mUSBUSARTTxRam((byte*)output_buffer,1);
				}
			break;

// ******************************
// 		   Led2 ON/OFF
// ******************************
		 case 'Q' : case 'q' :		// Spengo il LED2
			PORTDbits.RD2 = 0; 	// 
			break;					
		 case 'W' : case 'w' :		// Accendo il LED2
			PORTDbits.RD2 = 1; 		
			break;
// ******************************
// 		   Led3 ON/OFF
// ******************************
		 case 'A' : case 'a' :
			PORTDbits.RD3 = 0;
			break;
		 case 'S' : case 's' :
			PORTDbits.RD3 = 1;
			break;


// ******************************
// 		Acquisizione segnale
// ******************************
		 case 'C' : case 'c' :
			Delay10TCYx(2);

			ADCON0bits.GO_DONE = 1;			// attivazione bit di conversione
			while (ADCON0bits.GO_DONE == 1);
			output_buffer[0] = ADRESH;		// metto l'indirizzo alto nel buffer[0]
			output_buffer[1] = ADRESL;		// metto l'indirizzo alto nel buffer[1]

			output_buffer[2] = 'O';			// metto la lettera O in buffer[2]
			output_buffer[3] = 'K';			// metto la lettera K in buffer[3]

		
			if (mUSBUSARTIsTxTrfReady())
				{
					mUSBUSARTTxRam((byte*)output_buffer,4);	// spedisco tutto
				}
			break;
	
		  default  : break;
		}
	}	
}//end ProcessIO
Le lettere A,S,W,T... della funzione "switch-case" sono i byte che provengono dal Visual Basic.

Ultima Modifica di FluidGuitar : 12-03-2006 04.13.31.
lentz Non in Linea   Rispondi Citando

Advertising
Vecchio 12-03-2006, 01.11.09   #2
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Vediamo ora cosa dobbiamo fare con il VB:

Apritevi un nuovo progetto e inserite il componente MScomm. (Tasto destro nella barra degli oggetti, componenti, e scegliete "Microsoft Comm Control 6.0", fate ok!)
inseritelo nel vostro form e la comunicazione seriale è fatta (più o meno)!

Supposto di aver compilato e programmato il pic correttamente dobbiamo connetterlo al PC!!
Prima di fare ciò, dobbiamo andare a vedere a quale porta la periferica è stata assegnata (Facciamo: Star->Pannello di controllo->Sistema->Hardware->gestione periferiche, clicchiamo su porte(com e LPT) e guardiamo a quale "COMx" è stato associato il nostro PIC ... a me COM5!).

Tornate in Visual Basic e buon divertimento!!!!


Spiegarvi come funzionano tutti i comandi per la comunicazione seriale è un pò lunghetto vista l'ora!
Intanto vi mando Tutti gli allegati e buon divertimento!!


Se avete domande fate pure!!
Immagini Allegate
Tipo di File: jpg Schema circuitale.jpg‎ (72.0 KB, 1274 visite)
Files Allegati
Tipo di File: rar VB6.rar‎ (3.8 KB, 406 visite)

Ultima Modifica di lentz : 12-03-2006 01.22.58.
lentz Non in Linea   Rispondi Citando
Vecchio 12-03-2006, 01.13.28   #3
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Non riesco ad allegare la cartella di progetto del pic (sono 188K) !!
lentz Non in Linea   Rispondi Citando
Vecchio 12-03-2006, 04.19.07   #4
Super Moderator
 
L'avatar di  FluidGuitar
 

Iscritto da: 04-01-2001
Locazione: Torino
Messaggi: 4,024
Feedback: (0)
Quote:
Originariamente inviato da lentz
Non riesco ad allegare la cartella di progetto del pic (sono 188K) !!
Se spedisci a fluidguitar@pctuner.net la metto sul server di pctuner.
__________________

Tu non sai niente, Jon Snow!
FluidGuitar Non in Linea   Rispondi Citando
Vecchio 12-03-2006, 17.47.01   #5
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Ciao Fluid...ti è arrivata la mail?
lentz Non in Linea   Rispondi Citando
Vecchio 12-03-2006, 18.21.46   #6
Super Moderator
 
L'avatar di  FluidGuitar
 

Iscritto da: 04-01-2001
Locazione: Torino
Messaggi: 4,024
Feedback: (0)
Ecco il file:

http://download.pctuner.net/FluidGuitar/public/PIC.rar
__________________

Tu non sai niente, Jon Snow!
FluidGuitar Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 13.00.39   #7
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 1,210
Feedback: (0)
Per fortuna che ogni tanto c'è qualcuno come te che mette le sue cose a disposizione della comunità.
Grazie lentz.
Ho scritto questo perché ho notato che si è un po' restii a pubblicare i propri lavori, forse anche a causa di una certa vergogna di aver fatto male o per paura di essere criticati.
Ancora grazie
__________________
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau.
Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein
Camillo Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 13.27.41   #8
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Grazie per il riscontro favorevole!!
Lo scopo di questo topic è di non far passare a chi volesse iniziare a programmare questi nuovi pic, quello che ho passato io... 2 mesi di paranoiaaaa non riuscivo proprio a capire come si facesse!!!

Tuttavia, sto cercando di sviluppare il software del pic cercando di acquisire due segnali analogici... ma non riesco a settare bene i registri adcon0/1/2, se qualcuno volesse darmi una mano ! se devo essere sincero è la mia prima esperienza nella programmazione dei pic in C (pur conoscendo bene il C) e il tempo a mia disposizione, per motivi di studio, non è che sia molto!

Ciao Ciao
lentz Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 14.00.58   #9
Kill the fight !
 
L'avatar di  Beppe82
 

Iscritto da: 07-09-2001
Messaggi: 9,291
Feedback: (0)
in particolare cosa ti serve dei registri?

cmq in linea generale + campioni lentamente il segnale e + precisione avrai, però a scapito di una banda del segnale ridotta
Beppe82 ora è in linea   Rispondi Citando
Vecchio 14-03-2006, 14.09.10   #10
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Mi serve attivare la conversione in 2 canali. Essendo gli ADC "multiplexati" (ovvero ne funziona uno alla volta) devo settare i registri ADCON0-1-2 in modo che attivino i 2 canali di conversione in modo sequenziale.
lentz Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 14.14.06   #11
Kill the fight !
 
L'avatar di  Beppe82
 

Iscritto da: 07-09-2001
Messaggi: 9,291
Feedback: (0)
pag 263 del PDF

ti illustra un ciclo completo di acquisizione

il punto 7 ti dice di ripartire dal punto 1 o dal 2

nel tuo caso poichè hai bisogno di riconfigurare i bit del canale da acquisire devi ritornare al punto 1 e fare le modifiche, dopodichè stai apposto
Beppe82 ora è in linea   Rispondi Citando
Vecchio 14-03-2006, 14.18.14   #12
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
pag 263 del datasheet del pic 18fxxxx?
lentz Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 14.21.27   #13
Kill the fight !
 
L'avatar di  Beppe82
 

Iscritto da: 07-09-2001
Messaggi: 9,291
Feedback: (0)
ehm scusa, PAG 265 di questo :

http://ww1.microchip.com/downloads/e...doc/39632c.pdf

The following steps should be followed to perform an
A/D conversion:
1. Configure the A/D module:
• Configure analog pins, voltage reference and
digital I/O (ADCON1)
• Select A/D input channel (ADCON0)
• Select A/D acquisition time (ADCON2)
• Select A/D conversion clock (ADCON2)
• Turn on A/D module (ADCON0)
2. Configure A/D interrupt (if desired):
• Clear ADIF bit
• Set ADIE bit
• Set GIE bit
3. Wait the required acquisition time (if required).
4. Start conversion:
• Set GO/DONE bit (ADCON0 register)
5. Wait for A/D conversion to complete, by either:
• Polling for the GO/DONE bit to be cleared
OR
• Waiting for the A/D interrupt
6. Read A/D Result registers (ADRESH:ADRESL);
clear bit ADIF, if required.
7. For next conversion, go to step 1 or step 2, as
required. The A/D conversion time per bit is
defined as TAD. A minimum wait of 3 TAD is
required before the next acquisition starts.
Beppe82 ora è in linea   Rispondi Citando
Vecchio 14-03-2006, 14.28.33   #14
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Cavolo...grazie! Il datasheet che ho io è diverso !! ha anche 4 pagine in meno...che sfiga che ho !

Nel mio a pagina 263 ho : "22.0 COMPARATOR MODULE"

Ora mi leggo un pò questa parte e faccio delle prove...Grazie ancora!
lentz Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 14.29.40   #15
Kill the fight !
 
L'avatar di  Beppe82
 

Iscritto da: 07-09-2001
Messaggi: 9,291
Feedback: (0)
Beppe82 ora è in linea   Rispondi Citando
Vecchio 14-03-2006, 14.42.24   #16
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Guardando bene...il mio datasheet è del 2004, quello che mi hai fatto vedere è del 2006 ........... no comment
lentz Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 17.14.34   #17
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
Ok...rieccomi!
Ho testato il programma per acquisire da due canali analogici...Funziona!!



// IMPOSTO TRISA IN INPUT:

TRISAbits.TRISA0 = 1;
TRISAbits.TRISA1 = 1;
TRISAbits.TRISA2 = 1;
TRISAbits.TRISA3 = 1;


// IMPOSTO:
// 1) I CANALI RA0,RA1,RA2,RA0 ANALOGICI
// 2) Vrefs a Vdd e Vss

ADCON1 = 0b00001011;

ADCON2 = 0b00100101; // 8Tad, Clock = Fosc/16, Left justified.


// CONVERTO DAL CANALE RA0
ADCON0 = 0b00000000; // Select CHAN0, ADC disabled. (registro di settaggio adc)

ADCON0bits.ADON = 1; // ATTIVO ADC.

// VAI CON LA PRIMA CONVERSIONE:

ADCON0bits.GO_DONE = 1; // attivazione bit di conversione
while (ADCON0bits.GO_DONE == 1);
output_buffer[0] = ADRESH; // metto l'indirizzo alto nel buffer[0]
output_buffer[1] = ADRESL; // metto l'indirizzo alto nel buffer[1]

// CONVERTO DAL CANALE RA2
ADCON0 = 0b00001000; // Select CHAN2, ADC disabled. (registro di settaggio adc)

ADCON0bits.ADON = 1; // ATTIVO ADC.

// VAI CON LA SECONDA CONVERSIONE:

ADCON0bits.GO_DONE = 1; // attivazione bit di conversione
while (ADCON0bits.GO_DONE == 1);
output_buffer[2] = ADRESH; // metto l'indirizzo alto nel buffer[2]
output_buffer[3] = ADRESL; // metto l'indirizzo alto nel buffer[3]


if (mUSBUSARTIsTxTrfReady())
{
mUSBUSARTTxRam((byte*)output_buffer,4);
}
lentz Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 18.23.26   #18
Kill the fight !
 
L'avatar di  Beppe82
 

Iscritto da: 07-09-2001
Messaggi: 9,291
Feedback: (0)
domanda curiosa:

esistono in windows delle librerie per poter usare sto pic come dispositivo USB nn tramite emulazione seriale?
Beppe82 ora è in linea   Rispondi Citando
Vecchio 14-03-2006, 19.12.35   #19
Registered User
 
L'avatar di  lentz
 

Iscritto da: 30-08-2005
Locazione: Cagliari
Messaggi: 291
Feedback: (0)
cerca con google EasyHID.
E' un software libero che ti permette di creare facilmente un codice in VB6 e uno codice per il pic (in basic)

Oppure esiste una dll per la comunicazione con la usb rilasciata dalla microchip (la allego, ma non ho molta documentazione a riguardo).

Comunque l'emulazione con la seriale non è limitante dal punto di vista della velocità di trasmissione dei dati ... e in più semplifica la vita rendendo l'interfacciamento molto semplice e "intuitivo"
Files Allegati
Tipo di File: rar mpusbapi.rar‎ (27.4 KB, 215 visite)
lentz Non in Linea   Rispondi Citando
Vecchio 14-03-2006, 19.24.59   #20
Kill the fight !
 
L'avatar di  Beppe82
 

Iscritto da: 07-09-2001
Messaggi: 9,291
Feedback: (0)
ok grazie

cmq era solo una curiosità, visto che tempo fa mi ero cimentato (con scarsi risultati ) con USB e comunicazioni a pacchetti
Beppe82 ora è in linea   Rispondi Citando
Rispondi Per le vostre immagini su questo forum potete usare PcTunerUp!
Iscriviti gratuitamente alla nostra newsletter.


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori)
 
Strumenti Discussione
Modalità Visualizzazione

Regole di scrittura
non Puoi inserire messaggi
non Puoi rispondere ai messaggi
non Puoi inviare allegati
non Puoi modificare i tuoi messaggi

codice vB è Attivo
Smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Disattivato
Pingbacks are Disattivato
Refbacks are Disattivato
Vai al Forum


Tutti gli Orari sono GMT +1. Attualmente sono le 14.06.21.


Powered by vBulletin Versione 3.6.12
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright © 2009 - Master New Media S.r.l. a socio unico - P.I. 02947530784. Tutti i diritti di proprietà letteraria e artistica sono riservati- Privacy
www.pctuner.net è testata telematica registrata presso il Tribunale di Torino, n. 39 del 07.05.2008, Editore Master New Media S.r.l.