partie’1:’comment’construire’un’port’usb’’avec’un’pic ... ·...
Post on 15-Dec-2018
217 Views
Preview:
TRANSCRIPT
Partie 1: Comment construire un port USB avec un PIC 18F4550 ou 18F2550
vue d'ensemble
PIC 18F4550 et 18F2550 sont des microcontrôleurs puissantes, comprenant une interface compatible USB pleine vitesse V2.0.
Avec ces MCU il est très facile pour l'amateur de concevoir des périphériques USB avec très peu de composants.
Dans cette page, je vais décrire comment utiliser le firmware CDC de Microchip. Il permet d'émuler un port série avec un PC sous Windows ou Linux. Il est également très facile de construire des périphériques HID.
La carte 18F4550 d'expérimentation
Voici une photo de la carte d'expérimentation:
Le schéma suivant est très simple, peu de composants sont nécessaires. Il s'agit d'un périphérique USB auto-‐alimenté.
noter que j'utilise la Olimex petit-‐ICSD programmeur, si vous souhaitez utiliser un autre programmeur PIC ICSP,
vous devez supprimer D1 et D2 et changer le connecteur
Cet appareil est compatible avec le chargeur de démarrage puce USB
noter C5 est de 470nF (la fiche recommande 220nF mais plus c'est mieux) et devrait être faible ESR (pour par exemple un multi-‐couche de céramique). N'oubliez pas les découplages 100nF.
Voici une mise en œuvre possible
Vous pouvez regarder la couleur du fil de votre câble USB: Noir = masse, rouge = + 5V, Vert = Data +, blanc = Data-‐
le logiciel
Vous pouvez télécharger MCHPFSUSB_Setup sur le site de Microchip. C'est une fenêtre .exe :(. Le firmware va utiliser est écrit en C (pour le compilateur C18 de Microchip). Ce code est (royaltyes) libre, mais ce n'est pas un logiciel gratuit, il n'est donc pas possible de redistribuer le code source modifié dans cette archive, vous trouverez:
• Le son code source en C18 bootloader USB • Des fenêtres un utilitaire pour le chargeur de démarrage • Le code source du firmware CDC (émulation de série) en C18. Il peut être utilisé
avec le chargeur de démarrage USB sans modification
• Un autre le micrologiciel du périphérique HID • Un pilote Windows A pour CDC (sous linux CDC-‐ACM est supporté nativement)
Quelques conseils pour vos prototypes:
Le code source est dans le fw / répertoire cdc / MCHPUSB.mcw
Vous devez commenter les lignes suivantes dans usbcfg.h pour un dispositif usb auto-‐alimenté:
#define USE_SELF_POWER_SENSE_IO
#define USE_USB_BUS_SENSE_IO
Sur mon schéma, LED sont connectés sur le port B. Donc, vous devriez modifier io_cfg.h
#define mLED_1 LATBbits.LATB0
#define mLED_2 LATBbits.LATB1
#define mLED_3 LATBbits.LATB2
#define mLED_4 LATBbits.LATB3
Vous pouvez mettre votre propre code sur user.c. Par exemple, regardez Exercise_Example () dans user.c.
Les Fonctions utiles sont getsUSBUSART () (obtenir des données) et putrsUSBUSART () (mis données d'autres le port série)
Ne pas oublier de vérifier mUSBUSARTIsTxTrfReady () avant d'envoyer des données.
ce sont quelques exemples dans le répertoire de l'exercice. Par exemple, le programme suivant (à mettre dans user.c) passer au nombre de LED 4 lorsque vous appuyez sur la touche "1" dans le terminal
Ce sont quelques exemples dans le répertoire d'exercice. Par exemple, le programme suivant (à mettre dans user.c) passer au nombre de LED 4 lorsque vous appuyez sur la touche "1" dans le terminal
void Exercise_03 (void) {
si (getsUSBUSART (input_buffer, 1))
{
si (input_buffer [0] == "1")
mLED_4_Toggle ();
}
Sous Windows, vous devez installer le pilote fourni et vous pouvez utiliser l'utilitaire hyperterminal (19200bd avec un cristal de 20MHz). Sous Linux, consultez le module cdc-‐acm, un nouveau périphérique / dev / ttyACM0 devrait apparaître.
Si vous ne souhaitez pas utiliser le chargeur de démarrage, vous devez supprimer le vecteur remappage section dans main.c et modifier le script de linker (voir important.readme.txt dans le répertoire des sources)
-‐ Partie 2 -‐ Application: Comment construire un thermomètre USB
Nous allons ajouter un capteur de température pour le circuit décrit dans la première partie. Vous pouvez utiliser le circuit LM35 (Fiche technique), ou bien d'autres circuits comme MCP9701, TC1047 ...
Le spectacle schéma suivant comment brancher le capteur sur notre carte USB d'expérimentation:
le firmware
Nous allons ajouter du code pour la conversion analogique au numérique et de calcul de la température dans le fichier user.x
// Ajoutons includes pour ADC et manipulations de chaines
# include
# include
# include
// [...]
// Nous allons écrire les données de sortie dans cette chaîne
char input_buffer [64];
// [...]
Void Exercise_Example vide (void)
{
int température;
// [...]
else if (== start_up_state 3)
{
if (mUSBUSARTIsTxTrfReady ())
{
// A0 en entrée
TRISAbits.TRISA0 = 1;
memset (output_buffer, '\ 0', 64);
output_buffer [(6 * 5)] = '\ r';
output_buffer [(6 * 5) +1] = '\ n';
OpenADC (ADC_FOSC_8 & ADC_RIGHT_JUST & ADC_0_TAD,
ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD &
ADC_VREFMINUS_VSS,
0b1011);
SetChanADC (ADC_CH0);
Delay10TCYx (50);
ConvertADC (); // Démarrer la conversion
while (BusyADC ()); // Attendre pour la conversion de l'ADC
temp = ReadADC (); // Lire la suite et mettre en température
CloseADC (); // Désactiver convertisseur A / D
temp = temp / 7; // Convertir en degrés centigrade
itoa (temp, output_buffer); // Convertir en une chaîne
mUSBUSARTTxRam ((octet *) output_buffer, (6 * 5) 2);
start_up_state = 0;
}
}
//} fin Exercise_Example
La valeur en degrés Celsius sera envoyé sur le bus USB lorsque le bouton sur RB4 sera enfoncé.
Sous Windows, vous pouvez utiliser l'utilitaire hyperterminal (19200bd avec un cristal de 20MHz) pour voir la valeur. Sous Linux, vous pouvez utiliser cat / dev / ttyACM0.
Comment utiliser un 18F2550
Vous pouvez utiliser le code source pour 4550 avec très peu de modifications. Il suffit de sélectionner le dispositif approprié dans le menu de configuration MPLAB. Modifier le script de liaison, et régler les bits de configuration. Supprimer toute référence au port D dans io_cfg.h.
Quelques liens sur USB
Donner un sens à la norme USB (Beyomg logic)
Comprendre USB (usbdeveloper)
USB 2.0 (usb.org)
Les spécifications USB 1.1 (fichier pdf)
top related