mercredi 11 septembre 2013

VPC-32, progression

Cette semaine j'ai travailler sur le code pour la console texte ainsi que sur le système de fichier sur carte SD. Grâce au code emprunté au projet Pinguino j'ai progressé rapidement en ce qui concerne l'accès à la carte SD et au système de fichier FAT. Donc actuellement je suis capable d'utiliser les fonctions de l'API du système FAT qui se trouve dans le fichier ff.c du projet Pinguino. Je n'ai pas tester la fonctionnalité de toute l'interface mais j'arrive à ouvrir un fichier obtenir ses statistiques, lire, me déplacer dans le fichier et le modifier. La carte de 2Go que j'utilise est formatée en FAT16. Je n'arrive pas cependant à utiliser une carte formatée en FAT16 sur mon laptop qui est en Windows 7. La fonction mount() ne reconnaît pas le système de fichier dans ce cas. Je n'ai pas d'ordinateur en Windows xp. Je ne sais si ça fonctionnerais si la carte était formatée sous ce système d'exploitation pas plus sous quel système d'exploitation la carte que j'utilise présentement a été formatée. La différence doit se située au niveau du système de fichier.

Donc je progresse, il me reste à créer la librairie graphique, un shell de commandes basique, l'interpréteur pour le langage (python ou autre) et à intégrer tout ça ensemble. Pour l'intégration je vais peut-être installer un noyau exécutif pour céduler les tâches.

Je suis satisfait du rythme de progression actuel.

dépôt: https://github.com/Picatout/VPC-32

mardi 3 septembre 2013

VPC-32, prototype #1

J'ai complété le montage du prototype #1 du VPC-32 modèle 1. Réussi à faire le montage sur une carte à bandes avec grille de 100mils même si les connecteurs RJ-11, PS/2 et carte SD n'était pas conçus pour ça. Pour le RJ-11 il y a 2 rangés de 3 broches espacées de 100mils avec une distance 100mils entre chaque rangée mais les 2 rangés sont décalées de 50mils. J'ai du percé de petits trous entre ceux déjà existant pour la deuxième rangée. Pour la base SDCard les 7 premiers contacts sont à 100mils mais les autres sont plus rapprochés. Mais comme je ne me sert pas des contacts 8,9, du détecteur de carte et du détecteur de protection contre l'écriture qui sont les contacts rapprochés j'ai pus ignorer ces contacts. Je suis soulagé de ne pas avoir eu à fabriquer un circuit imprimé.

Autres photos sur https://github.com/Picatout/vpc-32/tree/master/resources/prototype

Pour le pilote de carte SD je vais essayé de trouver du code open-source adaptable facilement à ce MCU. C'est la prochaine étape.

Liste matériel

  • 1 carte de prototypage à bandes 4" x 5" (10cm x 12,5cm).
  • C1 électrolytique 47µF/16Volt
  • C2, C3 céramique 22pF
  • C4,C5,C6,C7 céramique 100nF
  • C8 électrolytique 10µF/16Volt
  • C9 céramique 4,7nF
  • C10 céramique 2,2nF
  • D1 diode rectification 1N4001
  • D2 Status LED 2mm vert
  • D3 Power LED 2mm rouge
  • D4,D5 diode commutation 1N4148
  • J1 base carte SD, Digikey P/N A101492CT-ND
  • J2 base miniDIN-6 contact (PS/2), Digikey P/N 5749180-1-ND
  • J3 prise RCA jaune, Digikey P/N CP-1462-1-ND
  • J4 base RJ11, Digikey P/N A31422-ND
  • J5 prise RCA noire, Digikey P/N CP-1459-1-ND
  • K1 (3 contacts), P1 (2 contacts), P3 (5 contacts), barrette contacts 100mils, Digikey P/N SAM1035-50-ND
  • P2 5 contacts) barrette contacts 100mils angle 90degrés
  • Q1 transistor PNP 2N3906
  • Q2 transistror NPN 2N3904
  • R1,R2 résitance 1/4W 5% 51k
  • R3,R4,R6,R11,R15,R17 résistance 1/4W 5% 10k
  • R5,R7 résitance 1/4W 5% 150 ohm
  • R8,R19 résistance 1/4W 5% 1K
  • R9 680R
  • R10 10R
  • R12 120R
  • R13,R14,R16 résistance 1/4W 5% 4k7
  • R18 résistance 1/4W 5% 3k3
  • SW1 bouton contact momentané N/O
  • U1 régulateur de tension 3,3Volt LDO LM3940-3.3
  • U2 Microcontrôleur Microchip PIC32MX150F128B
  • X1 crystal 10Mhz

dimanche 1 septembre 2013

VPC-32, pourquoi ça ne fonctionnait pas!

Dans la chronique précédente je parlais du casse-tête que j'ai eu avec les interruptions. J'ai trouvé pourquoi ça ne fonctionnait pas. Les PIC32MX1xxx/2xxx n'ont pas de Shadow Register Set. C'est fou le temps qu'on perd lorsqu'on ne prends pas le temps de lire la documentation au complet.

Depuis la dernière chronique j'ai testé le code pour le clavier PS/2 tout semble OK. J'ai aussi complété la table de caractères dans font.h pour les 127 premiers codes ASCII.

Finalement à la fin de ma dernière chronique je mentionnais que l'interruption du coretimer introduisait du bruit dans le signal vidéo. Je mentionnais aussi dans cette même chronique à quel point l'option IPLxSOFT dans la déclaration des ISR introduit un overhead incroyable lorsque l'ISR appelle une sous-routine. Puisque tmr2_isr utilise l'ensemble de registres normal (n'ayant pas de SRS) et que tmr2_isr appelait la fonction DmaChnEnable() le temps de latence était énorme. Ce problème est réglé j'ai simplement remplacé l'appel à la sous-routine DmaChEnable() par une simple affectation au registre DCH0CON. Ce qui a eu pour effet de réduire la latence de tmr2_isr et de faire disparaître le bruit dans le signal vidéo.

DCH0CON |= 128; // remplace DmaChEnable(0);

Je suis prêt maintenant à commencer le travail sur le pilote de périphérique pour la carte SD. Mais avant je dois fabriquer un prototype du VPC-32.

Mise à jour de https://github.com/Picatout/VPC-32.