Aller au contenu


Photo
- - - - -

HELP première programmation


  • Veuillez vous connecter pour répondre
11 réponses à ce sujet

#1 Alex68

Alex68

    Membre

  • Membres
  • 54 messages

Posté 12 novembre 2010 - 10:23

Salut,
J'ai fait un programmateur maison sur une plaque sans soudure et j'ai simplement essayé d'envoyer un petit programme avec Flowcode, mais évidemment ça n'a pas marché...mais je crois que la puce à quand même été détectée...c'est déjà ça. Quelqu'un peut m'expliquer comment faire avec Flowcode ou MPLAB ou Icprog (ou autre ?) à partir du fichier hex ou C ?
Merci !

#2 Alex68

Alex68

    Membre

  • Membres
  • 54 messages

Posté 15 novembre 2010 - 07:03

Salut,
Désolé, le premier message est très imcomplet...
Donc j'aimerais programmer un 16F88 avec une communication série RS-232 (avec un MAX232 et un connecteur DB9) fait maison (je ne sais pas s'il fonctionne) mais je ne sais pas du tout comment envoyer un fichier hex ou C sur le PIC (logiciel, configurations)...
Quelqu'un pourrait me guider ?
Merci beaucoup !

#3 Prinz metal ex-neo

Prinz metal ex-neo

    > Membre d'honneur <

  • Membres
  • PipPipPip
  • 463 messages
  • Gender:Male
  • Location:Algérie

Posté 16 novembre 2010 - 10:24

salut

tu sais il y a un problème avec les programmateurs fait maison des fois tout a l'aire bien mais ça ne marche pas, tu peux garder la même installation et une seconde aprés ça marche sans avoir touchez a quoi que ce soit.... donc faut acheter un programmateur, ta vie sera beaucoup plus facile ^^

a+ neo

#4 Alex68

Alex68

    Membre

  • Membres
  • 54 messages

Posté 17 novembre 2010 - 01:25

OK, je vais sûrement faire ça...je ne dois pas trop traîner...mais j'ai pas beaucoup de sous.
Qu'est-ce que vous pensez de ça, ça ou ce qu'on trouve ?
Ce sont vraiment des programmateurs ? Il n'y a rien besoin d'autre ? Parceque ça m'a l'air très peu cher par rapport à ce qu'on trouve sur d'autres sites...

#5 Alex68

Alex68

    Membre

  • Membres
  • 54 messages

Posté 09 décembre 2010 - 06:32

Salut,
Je pense que l'on a tout ce qu'il faut pour programmer enfin ce PIC mais puisqu'on est complètement néophyte en la matière, on espère que quelqu'un puisse nous guider :

On s'est procuré deux PIC 16F88 et un clone du PICkit2. On a trouvé le fichier HEX du Tinybootloader version 16F88 pour 8MHz interne et celui pour 20MHz (mais on ne sait pas si CCP1 est sur B3).

On a aussi téléchargé le logiciel PICkit2 et programmé (in-circuit) les bootloader sur chaque PIC sans problème.

Au niveau de la conception du vrai programme, on a je pense compris le principe (en même temps avec Flowcode…). Le simulateur nous dit que cela fonctionne (mais on n'a pas encore testé réellement).
Avec Flowcode, on arrive à traduire l'algo en C et normalement en HEX (je dis normalement parce que parfois ça ne marche pas ; on a d'ailleurs téléchargé MPLAB + HI TECH C, Code Blocks...mais on ne sait pas s'en servir.)

Le seul problème, c’est que lorsqu’on met le programme en HEX sur le PIC avec le logiciel PICkit2, le bootloader déjà installé est supprimé… Comment faire ?

Merci beaucoup !

#6 eihis

eihis

    Membre

  • Membres
  • 63 messages
  • Gender:Male
  • Location:bordeaux

Posté 10 décembre 2010 - 10:53

Salut,
Je pense que l'on a tout ce qu'il faut pour programmer enfin ce PIC mais puisqu'on est complètement néophyte en la matière, on espère que quelqu'un puisse nous guider :

On s'est procuré deux PIC 16F88 et un clone du PICkit2. On a trouvé le fichier HEX du Tinybootloader version 16F88 pour 8MHz interne et celui pour 20MHz (mais on ne sait pas si CCP1 est sur B3).

On a aussi téléchargé le logiciel PICkit2 et programmé (in-circuit) les bootloader sur chaque PIC sans problème.

Au niveau de la conception du vrai programme, on a je pense compris le principe (en même temps avec Flowcode…). Le simulateur nous dit que cela fonctionne (mais on n'a pas encore testé réellement).
Avec Flowcode, on arrive à traduire l'algo en C et normalement en HEX (je dis normalement parce que parfois ça ne marche pas ; on a d'ailleurs téléchargé MPLAB + HI TECH C, Code Blocks...mais on ne sait pas s'en servir.)

Le seul problème, c’est que lorsqu’on met le programme en HEX sur le PIC avec le logiciel PICkit2, le bootloader déjà installé est supprimé… Comment faire ?

Merci beaucoup !


kikou !

Le role du bootloader est justement de charger un programme en mémoire du pic sans passer par l'ICSP : souvent le bootloader utilise la liaison série pour recevoir le programme en mettre en mémoire.
Si tu programme un pic en ICSP, tu efface forcément le bootloader puisque dans ce mode de programmation, on doit envoyer exactement la quantité d'octet correspondant a la totalité de l'espace mémoire (une sorte "d'image mémoire",contenant les datas et le code programme :c'est le fichier 'HEX' généré par le compilateur.

Pour verifier que le programme est envoyé sur le pic en ICSP, il faut regarder a l'oscillo si tu as bien des signaux sur les broches d'ICSP (broches PGC,PGM,PGD) et que la broche VPP est bien mise a l'état haut (tension de programmation).
dans le cas d'un bootloader, il faut lire sa documentation , pour savoir la manip. a suivre afin de mettre le pic en mode 'load' et accueillir ton programme.

@+
37 sont visibles, 19 sont cachés

Sachez qu'il y a seulement 10 types de personnes : ceux qui comprennent le binaire et les autres.

#7 eihis

eihis

    Membre

  • Membres
  • 63 messages
  • Gender:Male
  • Location:bordeaux

Posté 10 décembre 2010 - 11:23

OK, je vais sûrement faire ça...je ne dois pas trop traîner...mais j'ai pas beaucoup de sous.
Qu'est-ce que vous pensez de ça, ça ou ce qu'on trouve ?
Ce sont vraiment des programmateurs ? Il n'y a rien besoin d'autre ? Parceque ça m'a l'air très peu cher par rapport à ce qu'on trouve sur d'autres sites...


concernant ces programmateurs, ils sont tous fonctionnels.
j'utilise un prog. sur port parallele , mais pour pic 18F.
le prog. sur port parallele utilise les tensions disponibles sur le port : elles sont suffisantes pour programmer , ce qui explique le peu de composants nécéssaires ( en général, on retrouve 3 ou 4 diodes et 3 ou 4 transistors et quelques résistances) : c'est simple,et très robuste.
Par contre, il ne faut pas espérer ajouter un cable au bout : tu auras trop de parasites et tes progs vont etre mal chargés, ce qui impose de brancher ta carte supportant le pic directement 'au cul' de ton pc ( sur la fameuse carte dont on parle, branchée sur le port parallèle)

Si ces programmateurs sont simples, c'est parceque l'ICSP (In-Circuit-Serial-Programming) est simple :

si un pic a 32Ko de mémoire, il suffit pour le programmer de lui envoyer les 32Ko EXACTEMENT sur les connections prévues pour ça : une horloge (PGC) + les datas série (PGD).
2 autres broches sont utilisée : PGM (qui fait entrer le pic a l'etat 'programmation' quand elle est a l'état haut, avant de lui transferer le programme complet,
et VPP qui est la tension de programmation.
VPP peut etre : la tension normale , ou la tension 'low voltage', dans le cas des pic18 (je n'ai pas le datasheet des 16F/C et je ne sais pas si ce mode existe chez eux..)

Voila pourquoi ces montages sont si simples.
Attention quand meme, car une autre nécéssité est d'avoir une alimentation 5V extérieure pour alimenter le pic lors de la programmation (certains montages pompent les 5V sur le port parallèle, mais c'est plutot risqué)

@+
37 sont visibles, 19 sont cachés

Sachez qu'il y a seulement 10 types de personnes : ceux qui comprennent le binaire et les autres.

#8 Alex68

Alex68

    Membre

  • Membres
  • 54 messages

Posté 10 décembre 2010 - 08:01

Merci beaucoup pour ton aide ! Je commence à y voir plus clair.
Par contre mon programmateur n'utilise pas la patte PGM mais le bootloader semble quand même installé.

J'ai réalisé cela, c'est avec ça et les pattes Tx Rx que je peux installer mon programme ? Avec quel logiciel ? J'ai aussi besoin du programme sous forme de fichier HEX ?

Sinon, comment faire sans le bootloader ?
Merci

#9 eihis

eihis

    Membre

  • Membres
  • 63 messages
  • Gender:Male
  • Location:bordeaux

Posté 11 décembre 2010 - 07:03

Merci beaucoup pour ton aide ! Je commence à y voir plus clair.
Par contre mon programmateur n'utilise pas la patte PGM mais le bootloader semble quand même installé.

J'ai réalisé cela, c'est avec ça et les pattes Tx Rx que je peux installer mon programme ? Avec quel logiciel ? J'ai aussi besoin du programme sous forme de fichier HEX ?

Sinon, comment faire sans le bootloader ?
Merci


salut !
Le bootloader, c'est un mini programme qui reste en permanence dans le PIC.
Son role est de charger un programme principal en mémoire, et de le 'lancer' : il utilise a ma connaissance toujours les broches rx/tx série du PIC.
Le bootloader occupe très peu de mémoire dans le pic,et si tu choisis d'en utiliser un, tu dois aussi en connaitre le mode de fonctionnement afin
d'initier le téléchargement d'un nouveau programme, ainsi que l'emplacement mémoire ou le bootloader va charger ce programme.

si ton bootloader utilise la liaison série du pic (ce qui doit etre le cas..),alors c'est par cette liaison que tu dois lui envoyer
les données de ton programme (le bootloader va se charger de les ecrire dans la mémoire du pic au fur et a mesure : il jour le role
d'intermediaire, qui t'évite de 'flasher' ton pic entièrement.

Le bootloader a des avantages (rapidité/simplicité) mais aussi des inconvénients : il faut utiliser un logiciel dédié pour envoyer le programme.
Pour que le bootloader entre en mode 'programmation' et attende l'envoi de ton programme par la liaison série, il y'a plusieurs méthodes
possibles comme par exemple un strap a mettre ou enlever sur ta carte , ce qui le met en état 'attente de données a charger en mémoire'.


L'autre type de programmateur utilise les broches PGxxx , et se branche sur ton pc via le port LPT ou série ou encore un port USB ,
et sur ta carte par un connecteur au broches 'normalisées' par Microchip.
Ce connecteur de programmation comporte 6 broches :

br1- VPP ----> MCLR/VPP du PIC
br2- VCC ----> vers le +5 de ta carte
br3- GND ----> GND de ta carte
br4- DATA ----> PGD du PIC
br5- CLOCK ---> PGC du PIC
br6- LVP ----> PGM du PIC

(attention, il en existe des variantes...).

Si tu programmes ton pic avec ce genre de programmateur, il te suffit d'un logiciel freeware (il en existe un bonne quantité) ,
qui demandera un fichier .HEX comme source a charger dans le pic.
J'utilise pour ma part PP18 , version 2.02 qui est sous license libre GPL, en ayant correctement configuré les signaux nécéssaire ( ce réglage dépend du montage utilisé).
Il detecte automatiquement la présence de la carte de programmation sur le port parallèle,
et la fameuse carte comporte en tout et pour tout 4 transistors + 8 résistances.

@+ !
37 sont visibles, 19 sont cachés

Sachez qu'il y a seulement 10 types de personnes : ceux qui comprennent le binaire et les autres.

#10 Alex68

Alex68

    Membre

  • Membres
  • 54 messages

Posté 13 décembre 2010 - 11:42

Salut,
Merci encore !
J'ai téléchargé le logiciel allant avec le Tinybootloader, mais il ne reconnaît pas le PIC.
Je vais donc essayer sans. Je fais mon programme avec Flowcode. Quand je compile l'organigramme, j'obtiens d'abord le fichier C

//************************************************************************************
//**
//** File name: C:\Documents and Settings\Standard\Mes documents\Flowcode1.c
//** Generated by: Flowcode v4.3.7.63
//** Date: Monday, December 13, 2010 23:12:41
//** Licence: Demo
//**
//** ***DEMO VERSION***
//**
//**
//** POUR UN USAGE NON COMMERCIAL
//**
//** http://www.matrixmultimedia.com
//************************************************************************************


#define MX_PIC

//Définir pour microcontrôleur
#define P16F88
#define MX_EE
#define MX_EE_TYPE2
#define MX_EE_SIZE 256
#define MX_SPI
#define MX_SPI_B
#define MX_SPI_SDI 1
#define MX_SPI_SDO 2
#define MX_SPI_SCK 4
#define MX_UART
#define MX_UART_B
#define MX_UART_TX 5
#define MX_UART_RX 2
#define MX_I2C
#define MX_I2C_B
#define MX_I2C_SDA 1
#define MX_I2C_SCL 4
#define MX_PWM
#define MX_PWM_CNT 1
#define MX_PWM_TRIS1 trisb
#define MX_PWM_1 0
#define MX_PWM_TRIS1a trisb
#define MX_PWM_1a 3

//Fonctions
#define MX_CLK_SPEED 20000000
#ifdef _BOOSTC
#include <system.h>
#endif
#ifdef HI_TECH_C
#include <pic.h>
#endif

//Données de Configuration
#ifdef _BOOSTC
#pragma DATA 0x2007, 0x2f2a
#endif
#ifdef HI_TECH_C
__CONFIG(0x2f2a);
#endif
#ifdef _BOOSTC
#pragma DATA 0x2008, 0x3ffc
#endif
#ifdef HI_TECH_C
__CONFIG(0x3ffc);
#endif

//Fonctions internes
#include "C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h"

//Déclarations de fonction Macro


//Déclarations de Variable



//Implémentations Macro

void main()
{

//Initialisation
ansel = 0;
cmcon = 0x07;


//Code d'initialisation d'Interruption
option_reg = 0xC0;


//Boucle
//Boucle: Tant que 1
while (1)
{
//Sortie
//Sortie: 0 -> A0
trisa = trisa & 0xfe;
if (0)
porta = (porta & 0xfe) | 0x01;
else
porta = porta & 0xfe;


//Pause
//Pause: 200 ms
delay_ms(200);


//Sortie
//Sortie: 1 -> A0
trisa = trisa & 0xfe;
if (1)
porta = (porta & 0xfe) | 0x01;
else
porta = porta & 0xfe;


//Pause
//Pause: 200 ms
delay_ms(200);


}


mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}


Ensuite j'obtiens le fichier HEX et un message avec :

Warning unreferenced functions removed:

FCI_FLOAT_TO_STRING in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h

FCI_NUMBER_TO_HEX in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h

FCI_STRING_TO_INT in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h

FCI_STRING_TO_FLOAT in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h

Wdt_msDelay in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h

Wdt_Delay_S in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h

Wdt_Delay_Ms in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h

isinf in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h


Le programme est-il viable ?

#11 eihis

eihis

    Membre

  • Membres
  • 63 messages
  • Gender:Male
  • Location:bordeaux

Posté 14 décembre 2010 - 07:41

salut !

Tu cherches a faire clignoter un led sur le port A , bit 0 :P
..ca doit marcher sur le papier,et vu le code ( meme s'il est sacrement étrange et peu optimisé ).

Les warning sont la pour te signaler que les fonctions non utilisées provenant du fichier 'include' ne sont pas compilées :
Le but est de gagner de la place mémoire . Rien d'anormal .

niveau code, TRISx sert a determiner le 'sens' d'un port (entrée ou sortie) :
il n'est pas nécéssaire de le redéclarer a chaque fois que tu accede au port ( ca n'a pas lieu d'etre sauf si tu as modifié depuis le dernier accès le 'sens' du port [lecture->ecriture et vice- versa])
A part ça, tu devrais prendre l'habitude d'écrire les variables/mots cles en majuscule pour différencier tes variables propres des variables 'reservées'.
ecrire TRISA au lieu de trisa , par exemple, ou 'PORTA' plutot que porta. c'est con, mais ca aide bcp a clarifier le programme quand on le relit :D

A part ça,attention aux bits de config, au moment de transferer le prog. (ne pas mettre par exemple le WatchDog en route si ton programme ne le gère pas (ce qui est ton cas il me semble, avec ce bout de code) ^^ ..
EN ICSP, ca tourne surement, moyennant une config correcte sur les fameux bits 'de config'.

...avec un bootloader, ces bits ne sont surement pas utilisés (mais j'en suis pas sur.. a toi de fouiner dans la config du logiciel )
egalement, voit dans le compilateur si tu peux (ou dois) cocher l'option 'code relocatable' (c'est a mon avis nécéssaire pour envoyer un programme a l'aide d'un bootloader)

@+!
37 sont visibles, 19 sont cachés

Sachez qu'il y a seulement 10 types de personnes : ceux qui comprennent le binaire et les autres.

#12 Alex68

Alex68

    Membre

  • Membres
  • 54 messages

Posté 14 décembre 2010 - 11:00

Yahou ! J'ai réussi à faire clignoter ma LED ! (sans le bootloader) Merci encore. Par contre le programmation ne fonctionne pas tout le temps...peut-être à cause de faux contacts. Je n'arrive pas non plus à utiliser le PWM...je réessayerai demain.

salut !

Tu cherches a faire clignoter un led sur le port A , bit 0 :P
..ca doit marcher sur le papier,et vu le code ( meme s'il est sacrement étrange et peu optimisé ).


C'est juste un test.
Pour le code, je ne l'ai pas fait moi-même, j'ai fait un organigramme que Flowcode a traduit. Je m'intéresserai au C quand j'aurai plus de temps.




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users