1

J'ai créé ce forum pour regrouper les sujets concernant la programmation embarquée, pour parler de programmation de microcontrôleurs, pour que vous y exposiez vos problèmes et que l'on vous réponde.
Si vous ne savez pas ce que c'est qu'un PIC ou un 8051, bienvenue! On va vous l'expliquer.
Si vous êtes un boss, bienvenue aussi, vos conseils nous seront utiles.

Ce forum est en relation avec le forum TI-HardWare.
En attendant que l'on réussisse à se connecter efficacement sur le bus interne de la TI, qui possède d'ailleurs un processeur 68000, on peut s'entrainer à utiliser ceux des microcontrôleurs plus simples, qui fonctionnent toutefois sur le même principe.

-------------------------------------------------------------------------
J'ai déja réalisé quelques montages à base de PIC16F84, donc je peux vous conseiller un programmateur facile à réaliser, qui fonctionne.
Je m'intéresse actuellement à la famille du 8032 (Intel) et son dérivé le DS80C320 (datasheets officielles), car il existe un bon compilateur: SDCC, qui est gratuit et compile le C ANSI.

J'étudie actuellement comment réaliser une carte à peu près universelle qui mette à disposition RAM, ROM et périphériques.

Si ça vous intéresse, on peut faire un projet rigolo comme un ultra petit linux qui gère une compact flash ou un dur IDE.
Déjà, faut gérer le disque dur, ça existe déjà.
Les documentations sont dispobibles:
Interface IDE
Interface ATAPI
C'est les docs ANSI officielles. LE premier est un .doc, pour qu'il soit accessible facilement à tous je vous ferai un PDF.

2

Bravo pour ton forum, mais ce forum ne serai pas un cousin de la partie HardWare ???

3

la différence c'est qu'ici on ne se place pas dans le domaine de la ti smile

ici, comme l'indique squalyl dans son post on parle principalement de montages autonomes, c'est à dire de carte avec ram / rom / proc + interfaces variées.
des "mini-ordi" que tu programme ensuite ( C ou ASM ou basic parfois ) pour faire des montages embarqués, ie: des robots grin ( c le domaine qui m'interesse principalement )

squalyl > bonne idée ce forum : je connais pas grand choses, mais on est là pour apprendre et faire une petite carte universelle c top.
Si le projet se fait, j'en suis !

4

Autant pour moi smile
Bravo pour ce forum encore (moi j'y connai rien du tout, mais C un moyen de rentrer dedant)

5

pour l'instant on a l'air d'etre 2-3 interessé par cette partie smile
faudrait que ca monte un peu et on pourrait essayer de faire des bons trucs

6

Ce projet ne mini-linux, il est actif ???
Moi ca m'interreserait (je suis assez limite en C est Asm nunux, ca pourait me permetre de me perfectionner et d'apprendre beaucoup de chose)

7

il est actif dans le sens ou ca existe déjà oui

y doit y avoir des infos sur google la dessus.
tu fais un linux from scratch en installant le strict minimum et tu as un mini linux adapté a ce genre de carte. apres tu rajoutes en fonction de tes besoins

8

ah, moi je croyais que C T pour develloper un cht'it nunux

9

bah
tu peux reprendre un mini linux existant ou faire un lfs miniature

au choix

10

Le linux original sera très difficile à porter parce que ces microprocesseurs ne comportent pas de gestionnaire de mémoire paginée: ie tu as 64 kO de RAM point barre.
Sinon faut faire des bidouillages monstrueux mais pas irréalisables.
Moi je pensais utiliser comme RAM des barrettes SIMM 30 broches (j'en ai récupéré pas mal) mais le pb c'est que c'est de la RAM dynamique qu'il faut valider toutes le n millisecondes. Donc faut un chip qui gère cette mémoire.

Sinon pour commencer:
Je vous propose d'étudier une carte qui comporte juste le micro et sa circuiterie obligatoire (reset, alim, oscillateur) avec un connecteur d'extension qui comporte tous les signaux nécessaires pour y brancher ce qu'on veut. Ca pue l'UTIB vous trouvez pas? Evidemment!

Je veux juste vous dire un truc avant de continuer:

Si quelqu'un ne comprend pas ce que je dis, qu'il me demande de préciser.


Ca parait évident mais certains seraient tentés de dire d'aller chercher dans les docs externes. C'est pas du tout le but. Moi je voudrais que toutes les docs nécessaires à la compréhension et à l'élaboration du projet soient directement accessibles par lien hypertexte direct (comme j'i fait plus haut).

Autre chose: Pour faire un projet suivi, faut pas partir de la fin. Alors Linux, on le mettra dedans quand on arrivera à faire marcher un programme monotache correctement.
Par exemple, pour notre robot E=M6, certains de notre club voulaient que je fasse l'asservissement tout de suite alors que le système de retournement des palets ne marche pas encore (Pour ceux qui connaissent pas: Le site de l'ANSTJ.

Mais retournons à nos moutons.

Pour commencer, sachez que le 8052 (et dérivés) a 3 espaces de mémoire séparés.
La RAM interne (256 octets)
La ROM (EPROM) externe 64 KB au maximum car il y a 16 lignes d'adresse.
La RAM externe: 64 KB max mais il faut laisser de la place en utiliser une partie en ports d'E/S.

Donc au début on utilisera juste:
Une EPROM de 32 kilo-octets. Si vous avez accès à des programmateurs c'est OK sinon quand vous voudrez passer à la pratique il vous faudra un émulateur, c'est plus pratique.
Koik-c'est? Un montage qui vous évite d'effacer votre EPROM à chaque modification de programme. On gagne bcp de temps, puisque la ROM est simulée par une RAM.

Moi j'ai fait celui d'ELEKTOR de Janvier 2001 , il marche très bien.
Il ne demande aucun composant exotique sauf un microcontrôleur qui vaut dans les 20€, qu'il vous faut commander chez elektor. Ils peuvent aussi vous envoyer le circuit imprimé:
Circuit imprimé émulateur
Programme original
Nouveau prog bien mieux

Pour les achats allez voir sur leur site aussi.
Voici les références en provenance de leur site:

Simulateur d'EPROM
000153-1 circuit imprimé 28,05€
000153-11 disquette (programme + source) 7,50€ mais gratuit à télécharger lol! cher la disquette!
000153-41 AT89C2051 programmé 14,55€

Le CI est cher, peut-être que je peux en faire un ou deux sur la graveuse de l'école:
Vous m'envoyez une plaque de CI présensibilisée positive deux faces, je vous la renvoie gravée et éventuellement percée si vous avez pas de perceuse. Par contre les trous sont pas métallisés donc il faut jouer du fer à souder pour souder les composants des deux côtés. Ca se fait bien.

Pour le compilateur SDCC ce serait bien de rajouter une RAM de 32 kilo-octets aussi.

Pour le moment donc, ce que vous avez à faire si vous voulez m'aider, c'est comprendre comment marche le microprocesseur (imprimez la datasheet du 8052 qui est bien faite). Posez moi des questions pour ce qui coince, je crois que je pourrai vous expliquer.

Il pourrait être super bien d'écrire un simulateur sur PC qui interprète les programmes asm pour les tester: Je suis en train de le faire, mais j'ai un petit problème:
pour l'instruction ADD (cf datasheet, c'est celle que je suis en train de coder en ce moment) il me faut activer les flags du microcontroleur virtuel selon le résultat que j'obtiens. Mais comment faire pour détecter que j'ai un carry, ou un overflow? Je sais juste que:

ADD adds the byte variable indicated to the Accumlator, leaving the result in the Accumulator.
> ADD ajoute la variable octet indiquée à l'accumulateur, et laisse le résultat dans l'accumulateur

The carry and auxiliary-carry flags are set, respectively, if there is a carry-out from bit 7 or bit 3, and cleared otherwise.
>Les indicateurs "retenue" et "retenue auxiliaire" sont activés, respectivement, si il y a eu une retenue après l'addition des bits 7 ou des bits 3, sinon ils ne sont pas activés.

When adding unsigned integers, the carry flag indicates an overflow occured.
>Quand on ajoute des entiers non signés, l'indicateur de retenue indique qu'il s'est produit un dépassement.

OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not bit 6; otherwise OV is cleared.
>L'indicateur de dépassement (OVerflow) est activé si il y a une retenue après l'ajout des bits 6 mais pas après des bits 7, ou si il y a une retenue après les bits 7 mais pas après les bits 6.

When adding signed integers, OV indicates a negative number produced as the sum of two positive operands or a positive sum from two negative operands.
>Quand on ajoute des entiers signés, OV indique qu'un nombre négatif a été produit par la somme de deux entiers positifs, ou qu'un nombre positif a été produit alors qu'il était la somme de deux négatifs.

On fait comment pour détecter qu'il y a eu un indicateur mis? C'est pas si évident.

Les entiers signés s'entendent codés en complément à deux:
0x00 ----- 0x7F 0x80 ----- 0xFF
0 ---------- 127 -128 ----- -1

Autre note:
Je rapatrie chez moi toutes les docs de ce forum, sur un CD. Quand il sera plein (ce sera vite fait), je l'enverrai aux membres du projet.

11

moi je veux bien participer niveau programmation ( C ) , mais pour ce qui est de l'electronique c'est un peu plus dure pour moi:
peu de connaissance, peu de matos chez moi

je vais regarder ce que vaut le compilo C que tu as mis en lien plus haut.
ASM je ne connais pas donc je peux difficilement t'aider pour réaliser le simulateur.
bref, comme tu l'a compris, moi je peux faire quelque chose lorsque le projet sera un peu avancé.

J'ai jamais fait de C embarqué pour l'instant. je suppose qu'il y a quelques spécifités pour indiquer au compilo quel quantité de ram/rom tu as etc, quels interface tu utilises.
si tu peux m'indiquer ça ca devrait aller smile

12

Bon, je vous signale:
- qu'il y a des microcontrôleurs pour lesquels on peut programmer avec GCC.
- qu'il existe une version de Linux pour microcontrôleurs ou autres machines sans MMU: http://www.uclinux.org.
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

Kevin Kofler a écrit :
Bon, je vous signale:
- qu'il y a des microcontrôleurs pour lesquels on peut programmer avec GCC.


tu as des références ?
- qu'il existe une version de Linux pour microcontrôleurs ou autres machines sans MMU: http://www.uclinux.org.


mouais, mais vu la faible puissance et surtout la faible mémoire dont on disposera a début je ne suis pas sur que linux soit indispensable. linux peut etre interessant si tu as beaucoup de mémoire de masse ( donc il faut de l'IDE ) et pas mal de ram aussi je suppose, je ne connais pas les spé de cette version de linux


14

Microbug
a écrit : tu as des références ?

http://subversions.gnu.org/cgi-bin/viewcvs/gcc/gcc/gcc/config/
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

15

Attention Kevin là je parle de systèmes de base qui au max ont 64 KO de ROM et 64KO de RAM, et en plus c'est deux espaces d'adresse différents et séparés.
Alors pour le départ ce sera TRES limité.
La deuxième phase sera l'étude d'un bootloader qui permette de mélanger données et code, mais on n'aura que 64 KO de mémoire au total.
Mais après ce sera très dur, vu que la relocation du code est difficile (pas d'instructions prévues pour l'adressage indexé).
Ces projets seront donc limités à des applications simples (relativement) et jamais autant que ce qui est possible sur TI (ou alors à peine).
Mais on n'aura jamais de multitâche.

Sinon j'ai trouvé comment obtenir les bits de retenue, donc je continue à programmer le simulateur.
Pour le moment tout le code est en VB6 mais quand le noyau de simulation fonctionnera j'en ferai une DLL avec Dev-C++. Elle sera programmée en C en fait.

16

Au fait j'en profite pour préciser un truc:
Emulateur != Simulateur.

Simulateur = faire fonctionner le proc en virtuel comme VTI (bé oui c'est pas un émulateur, c'est un simulateur).

Emulateur = Pour notre cas c'est un circuit qui contient une RAM, qui est connectée au circuit comme si c'était une EPROM, mais dont tu mets à jour le contenu par un port série au lieu de l'effacer aux UV puis de la reprogrammer.

C'est vrai qu'il existe des émulateurs en circuit (ICE) qui ont une partie HW reliée au montage d'étude et une partie soft qui interprète les instructions. C'est un simulateur de microprocesseur, et le nom est anglais d'où la confusion.

17

ué eux le hard la je suis dépassé :]

1 de ces 4 je telecharge le compilo et je regarde la tete que ca a.
il y a des spécificite a indiquer au compilo pour la compilation ?

18

Bin non pas beaucoup. Tout ça est dans les options de ligne de commande.
Note que quant tu l'installeras il faut que ce soit dans c:\sdcc.
Pour voir les options tu fait:
c:\sdcc\bin\>sdcc -h
C'est très noc.

Ya un autre compilo pas mal mais payant, c'est le compilateur keil C51.
Je regarde sur kazaa.

19

Je viens de trouver keil c51 cracké par mcu-tech.com
Ici
Taille: 14 MO
Bande passante: 30 KO/s (je le sais parce que dans mon école, la vitesse de téléchargement n'est pas limité par notre connection, mais par celle de l'envoyeur lol!)

Je l'ai mis sur kazaa il est partagé avec les mots clés keil c compiler 8051.
Le nom d'utilisateur de mon PC est abyss38@KazaA.
Si vous pouvez, téléchargez le pour qu'il se diffuse sur plusieurs utilisateurs et soit téléchargeable plus rapidement.

Sur ce site en espagnol ya des liens intéressants, vous devriez pas avoir de mal à comprendre:

20

je comprends pas: au début on parlait de 8032 maintenant de 8051.
c'est le même asm pour les deux ?

PS: j'ai pas trouvé le compilateur sur kazaa avec tes mots clés, je le télecharge sur le site donné au dessus.

faudra que tu m'expliques les options de compilation en fonction du hw que l'on aura

edit: j'ai les 2 compilo la, faut mieux utiliser lequel ?

21

rotfl
Oui!
8031, c'est la version Sans rom interne avec 128 octets de RAM interne.
8032, c'est la version Sans rom interne avec 256 octets de RAM interne.
8051, c'est la version avec rom interne de 4 ko et 128 octets de RAM interne.
8052, c'est la version avec rom interne de 8 ko et 256 octets de RAM interne.

J'utiliserai un 8032, en fait son équivalent Dallas DS80C320.

Retenez bien ça:
Tous les dérivés du 8031 utilisent les mêmes instructions asm.
La différence entre tous ces micros se fait au niveau des registres de fonctions spéciales (SFRs).

Il est indispensable que vous lisiez les datasheets une fois (en diagonale, mais quand même)
ALLEZ VOIR LE PROGRAMME KEIL C51! A mon avis c'est l'outil indispensable.
Il y a un simulateur/débogueur qui vous permet de tester des programmes en software. Donc je vais plus me casser le luc pour finir mon simulateur!

J'ai fait un PCB pour ceux qui peuvent le graver. C'est une carte standard 16*10.
Pistes
Composants

22

Mouais...

J'aime pas la série intel, je suis motorola pour ma part...


Enfin si je peux aider...


(j'ai insoleuse graveuse et tout le tralala mais je ne m'en suis pas servi depuis si longtemps qu'il serait cool que qqn me refile le modop)
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

23

Pour graver:
1) Tu dessines ton circuit sur ordi;
2) Tu l'imprimes sur un transparent (si possible à la laser, c'est plus précis);
3) Tu prends une plaque de CI présensibilisée positive;
4) T'enlèves le film de protection, tu poses dessus le transparent dans le bon sens (c'est pas noc d'écrire un texte sur le circuit, comme ça tu sais si le transparent est pas à l'envers).
5)Tu mets le tout dans ton insoleuse pendant 50 secondes à une minute selon l'opacité du transparent;
6) Tu révèles la plaque en la plongeant dans un bain de révélateur qui n'est autre que de la soude diluée à 0,1 mol/l je crois, jusqu'à ce que tu vois apparaitre le dessin des pistes correctement;
7) Tu nettoies ça super bien à la flotte;
8) Tu plonges ta plaque dans un bain de perchlorure de fer (ya d'autres produits, je sais plus lesquels) en remuant la plaque. Il faut que tout le cuivre soit bouffé sauf là où la résine n'a pas été insolée ie sur le tracé des pistes.
Attention aux taches avec le perchlo: sur le tissu ça fait des traces de rouille qui partent jamais.
Attention également de pas trop le laisser trop longtemps dans le bain sinon le perchlo commence à traverser la résine de protection qui est restée, ce qui produit des micro-coupures.
A l'inverse si on le laisse pas assez longtemps il peut rester des trainées de cuivre microscopiques qui font des courts-circuits.

Aujourd'hui j'ai acheté une plaque pour faire le PCB que j'ai mis au dessus.

24

sur le PCB que tu as mis y a la ROM / RAM ( y a pas adobe à l'iut...... )

le compilateur keil C51 permet donc de tester ses programmes avant de les envoyer en ROM. c'est fiable ?

tu comptes mettre quel type de ROM sur la carte: effacable par uv ou eeprom ?
plutot eeprom sinon ca demande du matos en plus sad

vince: t sur paris ? moi j'ai rien pour graver les circuits et souder je suis pas contre un peu d'aide, j'ai plus de matos non plus grin et j jamais fait des trucs aussi compliquer

25

C'est pas très compliqué en fait! Je vais mettre un schéma de la carte vous comprendrez mieux.

Sur le PCB ya pas la ROM ya pas la RAM ya un connecteur d'extension pour y brancher ce qu'on veut. Donc ce soir je fait le PCB de base avec une ROM&RAM pour tester les programmes. J'ai séparé les trucs pour que ce soit évolutif. Genre si on fait un bootloader après il faudrait un autre pcb alors que là yaura qu'à refaire la carte "mémoire".

Le compilo keil 51 est fiable. Et le débogueur est très pratique.

Sur ma carte j'utiliserai mon émulateur d'EPROM, sinon c'est une UVPROM justement. Avez vous accès à un programmateur dans le cadre personnel ou de votre lieu d'études?

Eventuellement une eeprom si tu as ou une flash c'est à envisager. En plus avec mon premier proto, je peux justement en faire un de programmateur d'EPROM!
Faut juste du 12.5 volts... et les bons algorithmes!

Pour les circuits imprimés, je dois pouvoir les faire si vous m'envoyez une plaque de CI présensibilisée positive de 10cm x 16cm. Ca rentre dans une enveloppe.

Sur Paris, il doit bien avoir des revendeurs de composants. Je me souviens que pendant un séjour, j'en avais vu un à côté du métro Nation. Je sais pu comment qu'il s'appelle, mais c'est pas le seul c'est sûr. Voyez l'annuaire page jaunes à Electronique-Détail.

26

les composants c pas dur.
mais je n'ai aucun endroit que je connaisse pour faire les circuits, et même reprogrammer une EEPROM


( question qui m'interesse pas mal: tu comptes programmer quoi avec tout ça ? ) grin

27

bon et puis faudrait quand meme faire la carte avec une EEPROM non ?
c'est plus pratique d'une rom effacable par UV.
y a des schéma tout fait sur le net, tu connectes ca sur le bus d'extention de ta carte 'mere' et c bon smile
faudrait aussi rajouter un peu de ram non ?

28

Pour les circuits je l'ai déja dit.
Pour les EEPROM quand ma carte marchera je vous les programmerai.
Essayez de trouver un site de fabricant elec où ils en envoient en samples gratos.
->AMD.com, stm.com, national.com, dalsemi.com, philips.com, etc.
Si vous voulez participer au projet, faites ça. C'est indispensable si on veut faire des essais.

Ce que je compte programmer c'est:
1) notre robot pour la coupe E=M6 (ie dans mon école d'ingé)
2) n'importe quoi qui puisse montrer à mon prof d'info qu'on peut faire du C en µcontroleurs.
3) J'ai déja programmé des PICs, alors je veux passer au niveau au dessus
4) Les études de drivers hardware faites avec ce processeur seront particulièrement utiles pour passer au bidouillage sur TI. N'oubliez pas que mon but c'est de connecter un disque dur sur une HW2.

La carte avec une EEPROM: je la ferai APRES! Pour le moment ça marche pas encore impec je vous explique.
Si vous trouvez un programmateur d'EEPROM externe OK c'est cher mais ça doit exister sur le NET. La réalisation d'une carte d'extension interne à un PC est emme*dante parce qu'il faut faire un circuit double face, j'aime mieux éviter, même si c'est possible c'est très chiant.

Moi je vous dis j'ai un émulateur d'EPROM. Donc j'en ai pas besoin de programmateur pour le moment. Je le ferai rapidement dès que la carte de base sera prête. Vous m'enverrez vos puces vierges et je vous les programmerai, au moins celle qui fait marcher le programmateur.

Pratiquement, voila le déroulement de ma journée d'hier.

Mardi aprem, 16h00: après avoir fini mon projet d'elec (18/20!) j'ai gravé le PCB du dessus.

18h00: J'ai acheté les composants que j'ai pas pu récupérer et je les ai soudé (fini à 21h00, j'ai fait plein de trucs entre temps)

21h00: Après pour l'utilisation j'ai explosé une nappe de dur que j'ai enfiché dans mon connecteur 40 broches et de l'autre côté dans mon émulateur (ya plein de fils à souder).

21h30: Première étape: Je crame une grosse piste du CI: Court-circuit franc entre le +12V (je l'ai mis au cas où, même si le reste du système est en +5V) et la masse. C'est ma faute, je m'étais trompé dans le câblage de l'adapteur pour l'émulateur. Du coup, je répare la piste avec un fil, j'explose le 74HCT573 de la carte, et un transistor de l'émulateur qui servait à faire un reset automatique de la carte.

23h00: Deuxième étape: Je répare, je change les explosures. Après une dizaine d'essais infructueux avec un programme "hello world" de Keil, je renonce, car il est tout de même 2h40, j'ai pas bouffé, et mercredi (nowaday) je commence à 8h00.
Mercredi:
Je me lève à 7h35 pour être en cours à 8h00 avec 1/4 d'heure de trajet (c'est chaud), et je vais en cours d'espagnol smile .

A 10h j'ai fini la matinée donc kfet café croissant puis direction les salles de TP.

Là un oscillo me dit que le circuit que j'ai utilisé pour le remplacement était aussi explosé, d'où le vasouillage de hier soir.
Après avoir fait le tour des labos de l'école, j'en trouve un qui marche.
A l'oscillo j'ai pu observer que l'oscillateur marchait correctement (c'est déja ça lol) et que certains signaux de contrôle marchent aussi. Donc j'en ai déduit que c'est mon émulateur qui déconne à moitié, donc il me faut comprendre où est la panne dans ce dernier.
Voila où j'en suis.
Vous voyez une fois de plus que la théorie des bouquins et des datasheets est largement très loin devant les réalités expérimentales. Donc apparamment ma carte marche mais pas l'émulateur.
Cet aprem j'ai cours d'info mais ce soir je vais trouver la panne, (mais si, mais si), et ce week-end, j'espère que la carte avec simplement l'émulateur connecté comme mémoire de programme fonctionnera.
L'étape suivante sera l'adjonction de mémoire RAM externe, microbug, mais ne brûlons pas les étapes!


Si vous voulez m'aider dans l'avancement du projet, trouvez comment obtenir gratuitement des EEPROMs, mémoires FLASH et RAM statiques avec bus parallèle de type intel (c'est à dire avec des signaux RD, WR, CS et éventuellement ALE.

29

donnez moi juste une confirmation
les µc ATMEL sont-ils bien bofs?

30

Tu entends quoi par bof? Ya des atmels compatibles 8051/52 avec mémoire flash intégrée mais faut un programmateur spécial.