summaryrefslogtreecommitdiff
path: root/2004
diff options
context:
space:
mode:
authorprot2004-03-21 22:55:06 +0000
committerprot2004-03-21 22:55:06 +0000
commit8b0e1a0e7af7bb25e414f696f80548b358474675 (patch)
tree2a4efda1aa807b1c14f612379197f1a586bfe6ea /2004
parent962bf7ae901393e89c683f0460024e89d99fc377 (diff)
.
Diffstat (limited to '2004')
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/Makefile18
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/image.pngbin0 -> 18419 bytes
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/io.c171
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/io.h15
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/ov6620.fig200
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/ovcam.c47
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/ovcam.tex122
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/ovcam1.fig67
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/ovcam2.fig140
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/rdcam.c124
-rw-r--r--2004/n/fpga/doc/dcd/ovcam/rdcam.h18
-rw-r--r--2004/n/fpga/doc/dcd/portserie/images/Makefile7
-rw-r--r--2004/n/fpga/doc/dcd/portserie/images/rxserie.pdfbin0 -> 14895 bytes
-rw-r--r--2004/n/fpga/doc/dcd/portserie/images/rxserie.sxdbin0 -> 8738 bytes
-rw-r--r--2004/n/fpga/doc/dcd/portserie/images/txserie.pdfbin0 -> 15083 bytes
-rw-r--r--2004/n/fpga/doc/dcd/portserie/images/txserie.sxdbin0 -> 8689 bytes
16 files changed, 929 insertions, 0 deletions
diff --git a/2004/n/fpga/doc/dcd/ovcam/Makefile b/2004/n/fpga/doc/dcd/ovcam/Makefile
new file mode 100644
index 0000000..221bd36
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/Makefile
@@ -0,0 +1,18 @@
+SUBDIR=
+
+all: ovcam2.pdf ov6620.pdf
+ for i in $(SUBDIR); do (cd $$i; $(MAKE) all); done
+ $(MAKE) rapport.pdf
+
+%.pdf: %.tex
+ pdflatex $<
+ pdflatex $<
+ pdflatex $<
+
+%.pdf: %.fig
+ fig2dev -L pdf -p dummy $< $@
+
+clean:
+ for i in $(SUBDIR); do (cd $$i; $(MAKE) clean); done
+ rm -f *.dvi *.aux *.log *.toc *.eps *.pdf *.ps
+
diff --git a/2004/n/fpga/doc/dcd/ovcam/image.png b/2004/n/fpga/doc/dcd/ovcam/image.png
new file mode 100644
index 0000000..130b1f4
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/image.png
Binary files differ
diff --git a/2004/n/fpga/doc/dcd/ovcam/io.c b/2004/n/fpga/doc/dcd/ovcam/io.c
new file mode 100644
index 0000000..0fd6d21
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/io.c
@@ -0,0 +1,171 @@
+/* io.c contient la procedure pour configurer la camera
+ * (I2C)
+ */
+
+#include "io.h"
+#include <sys/ports.h>
+
+#include <sys/sio.h>
+#include <sys/interrupts.h>
+
+#define I2CCLK BITN(3)
+#define I2CDATA BITN(4)
+
+void
+i2c_init (void)
+{
+ // 1 ---> ouput
+ // 0 ---> input
+ // configuration des lignes en sortie
+ _io_ports[M6811_DDRA] = I2CCLK | I2CDATA;
+ // mise à 1 des lignes dans (libération du bus
+ _io_ports[M6811_PORTA] |= I2CCLK |I2CDATA;
+}
+
+/*
+ * Start procedure
+ * Data ---------------\________________
+ * Clk --------------------\___________
+ *
+ */
+
+void
+i2c_start(void)
+{
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+}
+/*
+ * End procedure
+ * Data ___________________/-----
+ * Clk _________/---------------
+ *
+ */
+
+void
+i2c_end(void)
+{
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] |= I2CDATA;
+ wait_2v5us();
+}
+
+ void
+wait_2v5us(void)
+{
+ unsigned char i;
+ for (i=0;i<200;i++)
+ {
+ __asm__("nop");
+ }
+}
+
+void
+i2c_send_charnl (unsigned char data)
+{
+ unsigned char cmpt;
+ for (cmpt=0;cmpt<8;cmpt++)
+ {
+ if (data & 0x80) // si le bit de poids fort est 1, il faut mettre 1 sur la ligne
+ {
+ _io_ports[M6811_PORTA] |= I2CDATA;
+ }
+ else
+ {
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ }
+ wait_2v5us();
+ wait_2v5us();
+ // on s'occupe de produire un front d'horloge
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ /* Nous avons traité le bit de poid le plus fort
+ * continuons */
+ data = data << 1;
+ }
+ wait_2v5us();
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+}
+
+unsigned char
+i2c_read_char (void)
+{
+ char cmpt;
+ unsigned char data = 0;
+ // configuration de la ligne data en entré
+ _io_ports[M6811_DDRA] &= ~I2CDATA;
+ for (cmpt=0; cmpt<8;cmpt++)
+ {
+ _io_ports[M6811_PORTA] |=I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA];
+ if (_io_ports[M6811_PORTA] & I2CDATA) //si ligne data est à 1
+ data++;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &=~I2CCLK;
+ wait_2v5us();
+ data = data<<1;
+ }
+ // traitement de l'ack dans le cas d'une derniere lecture
+ _io_ports[M6811_DDRA] |= I2CDATA;
+ _io_ports[M6811_PORTA] |= I2CDATA;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ return data;
+}
+
+void
+i2c_send (unsigned char reg,unsigned char data)
+{
+ // on déclanche un procedure de start
+ i2c_start();
+ // C0 est l'adresse d'ecriture de l'ov6620
+ i2c_send_charnl(0xc0);
+ // On specifie le registre
+ i2c_send_charnl(reg);
+ // on donnee la valeur
+ i2c_send_charnl(data);
+ // procedure de stop
+ i2c_end();
+}
+
+unsigned char
+i2c_recv(unsigned char reg)
+{
+ unsigned char data;
+
+ /* pour lire un registre particulié, il faut commencer par
+ * ecrire le registre que l'on veut lire
+ */
+
+ i2c_start();
+ i2c_send_charnl(0xc0);
+ i2c_send_charnl(reg);
+ i2c_end();
+
+
+ i2c_start();
+ i2c_send_charnl(0xC1);
+ data = i2c_read_char();
+ i2c_end();
+ return data;
+
+}
+
+void
+i2c_dump(unsigned char * tab)
+{
+}
diff --git a/2004/n/fpga/doc/dcd/ovcam/io.h b/2004/n/fpga/doc/dcd/ovcam/io.h
new file mode 100644
index 0000000..8ea9221
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/io.h
@@ -0,0 +1,15 @@
+#ifndef IO_H
+#define IO_H
+
+#define BITN(x) (1<<(x))
+
+void i2c_init (void);
+void i2c_send_charnl (unsigned char mot);
+unsigned char i2c_read_char (void);
+void i2c_start (void);
+void i2c_end (void);
+void wait_2v5us (void);
+void i2c_send (unsigned char reg, unsigned char data);
+unsigned char i2c_recv ( unsigned char reg);
+void i2c_dump (unsigned char * tab);
+#endif
diff --git a/2004/n/fpga/doc/dcd/ovcam/ov6620.fig b/2004/n/fpga/doc/dcd/ovcam/ov6620.fig
new file mode 100644
index 0000000..bd11f82
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/ov6620.fig
@@ -0,0 +1,200 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+0 32 #c6b694
+0 33 #eff7ff
+0 34 #decba5
+0 35 #424142
+0 36 #848284
+0 37 #bdbebd
+0 38 #dedfde
+0 39 #8c8e8c
+0 40 #adaaad
+0 41 #525552
+0 42 #424142
+0 43 #848284
+0 44 #bdbebd
+0 45 #848284
+0 46 #bdbebd
+0 47 #dedfde
+0 48 #8c8e8c
+0 49 #8c8e8c
+0 50 #424142
+0 51 #848284
+0 52 #bdbebd
+0 53 #dedfde
+0 54 #424142
+0 55 #848284
+0 56 #bdbebd
+0 57 #dedfde
+0 58 #848284
+0 59 #bdbebd
+0 60 #dedfde
+0 61 #c6b694
+0 62 #eff7ff
+0 63 #decba5
+0 64 #c6b694
+0 65 #eff7ff
+0 66 #decba5
+0 67 #adaaad
+0 68 #525552
+0 69 #8c8e8c
+0 70 #d6d7d6
+0 71 #8c8e8c
+0 72 #424142
+0 73 #848284
+0 74 #bdbebd
+0 75 #dedfde
+0 76 #adaead
+0 77 #424142
+0 78 #848284
+0 79 #bdbebd
+0 80 #dedfde
+0 81 #848284
+0 82 #bdbebd
+0 83 #dedfde
+0 84 #424142
+0 85 #848284
+0 86 #bdbebd
+0 87 #adaead
+0 88 #8c8e8c
+0 89 #8c8e8c
+0 90 #8c8e8c
+0 91 #424142
+0 92 #bdbebd
+0 93 #dedfde
+0 94 #424142
+0 95 #848284
+0 96 #bdbebd
+0 97 #8c8e8c
+0 98 #424142
+0 99 #848284
+0 100 #bdbebd
+0 101 #dedfde
+0 102 #424142
+0 103 #848284
+0 104 #bdbebd
+0 105 #dedfde
+0 106 #bdbebd
+0 107 #525152
+0 108 #e7e3e7
+0 109 #00004a
+0 110 #525152
+0 111 #bdbebd
+0 112 #7b797b
+0 113 #313431
+0 114 #525152
+0 115 #bdbebd
+0 116 #7b797b
+0 117 #313431
+0 118 #525152
+0 119 #424142
+0 120 #c6b694
+0 121 #bdbebd
+0 122 #7b797b
+0 123 #313431
+0 124 #525152
+0 125 #313431
+0 126 #525152
+0 127 #8c8e8c
+0 128 #424542
+0 129 #8c8e8c
+0 130 #bdbebd
+0 131 #7b797b
+0 132 #313431
+0 133 #525152
+0 134 #bdbebd
+0 135 #7b797b
+0 136 #313431
+0 137 #525152
+0 138 #7b797b
+0 139 #313431
+0 140 #525152
+0 141 #424142
+0 142 #848284
+0 143 #bdbebd
+0 144 #dedfde
+0 145 #c6c3c6
+0 146 #6b6d6b
+0 147 #c6c3c6
+0 148 #6b6d6b
+0 149 #424542
+0 150 #8c8e8c
+0 151 #6b6d6b
+0 152 #8c8e8c
+0 153 #737173
+0 154 #adaead
+0 155 #313431
+0 156 #949294
+0 157 #737173
+0 158 #525552
+0 159 #b5b2b5
+0 160 #c6c3c6
+0 161 #424542
+0 162 #6b6d6b
+0 163 #424542
+0 164 #6b6d6b
+0 165 #c6c3c6
+0 166 #6b6d6b
+0 167 #424542
+0 168 #8c8e8c
+0 169 #c6c3c6
+0 170 #6b6d6b
+0 171 #c6c3c6
+0 172 #424542
+0 173 #8c8e8c
+# Camcorder
+# drawn by W. Chimiak
+6 1275 2400 2250 3675
+6 1504 2963 1952 3400
+1 2 0 1 -1 7 2 0 0 0.000 1 0.0000 1728 3182 224 219 1504 2963 1952 3400
+-6
+1 4 0 1 -1 7 0 0 20 0.000 1 0.0000 1839 3262 238 238 1814 3026 1864 3499
+1 4 0 1 -1 150 1 0 20 0.000 1 0.0000 1837 3262 338 338 1499 2924 2175 3600
+2 3 0 1 -1 149 4 0 20 0.000 0 0 -1 0 0 5
+ 2015 3475 2015 2794 1462 2794 1459 3475 2015 3475
+2 3 0 1 0 148 4 0 20 0.000 0 0 -1 0 0 5
+ 2015 2798 1455 2798 1275 2438 1775 2438 2015 2798
+2 3 0 1 0 7 4 0 20 0.000 1 0 -1 0 0 5
+ 1463 2794 1283 2442 1283 3072 1465 3470 1463 2794
+2 2 0 1 -1 7 3 0 5 0.000 0 0 -1 0 0 5
+ 1515 2918 1965 2918 1965 3371 1515 3371 1515 2918
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 600 1800 3000 1800 3000 4350 600 4350 600 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1800 825 1800 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1575 5775 1575 4350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 2625 4200 2625
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 3075 4200 3075
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 3525 4125 3525
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 3900 4200 3900
+4 0 0 50 -1 0 12 0.0000 4 135 1950 750 2025 Carte d'\351valuation ov6620\001
+4 0 0 50 -1 0 12 0.0000 4 135 225 1950 825 5V\001
+4 0 0 50 -1 0 12 0.0000 4 180 1260 1725 5175 configuration via\001
+4 0 0 50 -1 0 12 0.0000 4 135 270 1725 5400 I2C\001
+4 0 0 50 -1 0 12 0.0000 4 180 900 3225 3450 Vsync_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 750 3225 3000 Href_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 3225 2550 Pclk_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 1140 3225 3825 data_cam [7-0]\001
+4 0 0 50 -1 0 12 0.0000 4 180 5490 4575 2550 L'horloge, \340 chaque front montant les donn\351es sur data_cam sont valides\001
+4 0 0 50 -1 0 12 0.0000 4 180 4950 4575 3000 L'orsque c'est 1 \340 chaque Pclk_cam correspond un pixel d'un ligne\001
+4 0 0 50 -1 0 12 0.0000 4 180 2835 4575 3375 Passe \340 1 lorsque l'on change d'image\001
+4 0 0 50 -1 0 12 0.0000 4 135 2295 4575 3825 donn\351e de la camera sur 8 bits\001
diff --git a/2004/n/fpga/doc/dcd/ovcam/ovcam.c b/2004/n/fpga/doc/dcd/ovcam/ovcam.c
new file mode 100644
index 0000000..f5ddfd8
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/ovcam.c
@@ -0,0 +1,47 @@
+/* Programme ovcam.c pour 68hc11f1
+ * compile avec gcc pour 68HC11 et la librairy GEL
+ */
+
+#include <sys/sio.h>
+#include <sys/interrupts.h>
+#include <unistd.h>
+#include "io.h"
+#include "rdcam.h"
+
+int main (void);
+
+void
+_start (void)
+{
+ set_bus_expanded ();
+ _io_ports[M6811_CSCTL] &= 1<<3;
+ main();
+}
+
+unsigned char tab[25344];
+
+int
+main (void)
+{
+ int i, j, k;
+
+ serial_init ();
+ i2c_init();
+ cam_init();
+ /*configuration*/
+ i2c_send(0x12,0x80);
+ i2c_send(0x11,0x3f);
+ //i2c_send(0x12,0x26);
+ cam_skip_frames (2);
+ /*attrappe l'image et l'envoie*/
+ for (i = 0; i < 4; i++)
+ {
+ for(j=0;j<25344;j++)
+ tab[j] = 0;
+ cam_get(tab, i);
+ for(j=0;j<25344;j++)
+ serial_send (tab[j]);
+ }
+ while(1);
+ return 0;
+}
diff --git a/2004/n/fpga/doc/dcd/ovcam/ovcam.tex b/2004/n/fpga/doc/dcd/ovcam/ovcam.tex
new file mode 100644
index 0000000..274a551
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/ovcam.tex
@@ -0,0 +1,122 @@
+
+\subsection{Gestion de la caméra}
+
+
+\subsubsection{Comment fonctionne la caméra ?}
+
+La caméra produit un flot de données incessant. Elle fournit aussi des
+signaux de synchronisation. Ceux-ci nous permettent de savoir quand est-ce
+qu'une nouvelle image commence, quand est-ce que l'on change de ligne. De
+cette manière nous pouvons reconstituer une information cohérente avec
+notre vision.
+
+\begin{figure}[htbp]
+\caption{La caméra}
+\includegraphics[width=\textwidth]{./ovcam/ov6620.pdf}
+\label{schema1}
+\end{figure}
+
+Pour vérifier que nous avions bien compris le fonctionnement de la caméra,
+nous avons écrit un programme pour micro-contrôleur qui saisie une image.
+
+Pour réaliser cette application teste, nous avons utilisé une carte à base
+de 68HC11F1 à 8MHz doté de 64Ko de mémoire. Voici le résultat: figure
+\ref{image_test} page \pageref{image_test}.
+
+\begin{figure}[htbp]
+\caption{L'image test}
+\includegraphics[]{./ovcam/image.png}
+\label{image_test}
+\end{figure}
+
+Pour obtenir cette image nous avons écrit un programme en C avec gcc pour
+68HC11. Ce programme prend 72 lignes d'une première image puis les envoie
+à l'ordinateur à 9600 baud (c'est très lent) puis attend une nouvelle
+image, saute les 72 premières lignes et enregistre les 72 lignes
+suivantes puis les envoie. Ainsi de suite 4 fois par image car Le
+microcontroleur n'a pas assez de mémoire pour enregistrer l'image entière.
+Il faut donc la "tronçonner". En effet l'image fait normalement 352
+par 288 pixel et chaque pixel est codé sur 8 bits.
+
+La caméra dispose d'un réglage de gain automatique c'est pour cela que les 4
+parties ont des contrastes différents.
+
+Bien que l'on ait ralentit au maximum la fréquence de Pclk, nous
+n'arrivons à obtenir que 72 point par lignes au lieu de 288.
+Comme l'image reste "compréhensible" nous pouvons croire que le
+microcontroleur n'est pas assez rapide pour lire plus de points. Et du
+coups il fait un "sample régulier" de la ligne, ce qui nous donne cette
+impression d'image comprimé en largeur.
+
+Tout ceci nous laisse croire que nous maitrisons la capture d'une image.
+
+\subsubsection{Comment implémenter la récupération d'image dans un fpga ?}
+
+Le principe utilisé est simple, il s'agit de remplir une mémoire avec les
+données provenant de la caméra. Un compteur peut incrémenter l'adresse et
+ainsi parcourir la mémoire. Nous allons utilisé les macros que fournit
+Xilinx pour réaliser des DPRAMs : qui sont des mémoires ram à double
+ports, permettant une lecture et une écriture sur deux ports differents.
+
+Nous utiliserons 2 DPRAM afin que l'ordinateur puisse lire un bank mémoire
+alors que l'automate de récupartion de donnée caméra en remplit un autre.
+
+\begin{figure}[htbp]
+\caption{Synoptique d'implémentation}
+\includegraphics[width=\textwidth]{./ovcam/ovcam2.pdf}
+\label{ovcam}
+\end{figure}
+
+Ce système est ordonné par un séquenceur. Cette machine d'état aura la
+charge de choisir le bank à remplir, la gestion de la ligne d'interruption
+( moyen d'avertir d'ordinateur pour qu'il vienne lire) et le registre de
+contrôle avec ses quelques bits:
+\begin{itemize}
+\item Un bit disant quel bank doit être lu.
+\item Un bit disant si l'interruption est levée, c'est dire si le bit
+précédent est valide.
+\item Un bit disant s'il y a eu écrasement d'un bank, dans le cas ou
+l'ordinateur ne serait pas venu suffsament tôt.
+\item un bit de reset pour remettre à zero la machine d'état les différents
+compteurs et convertisseur.
+\item Un bit servant à dire que l'ordinateur va bientot lire un bank et
+donc, que le sequenceur doit baisser sa ligne d'interruption. Cette
+dernière fonction pourrait être remplacée par un système qui détecte la
+lecture du bank.
+\end{itemize}
+
+
+D'autres indicateurs pourraient être donnsé, par exemple : un flag pourrait se
+lever pour marquer que le bank de remplissage est déjà à moitié rempli.
+
+
+\subsubsection{Le driver}
+
+Avec le fonctionnement décrit si dessus, Le driver devra réaliser la
+sous-routine suivante:
+\begin{itemize}
+\item Détecter une interruption caméra
+\item Lire le registre de la caméra pour savoir si il y a bien eu une
+interruption, et connaitre le bank à lire.
+\item Ecrire dans le registre le bit correspondant à "lecture imminente"
+\item Lire le bank, le placer en mémoire, incrémenter une variable. Lorsque
+cette variable sera égale à 50, l'ordinateur aura récupéré une image
+complète.
+\end{itemize}
+
+Bien sûr, si la cadence des images est trop rapprochée dans le temps, Une
+fois que l'on a récupéré une image complète, on peut ne pas écrire le bit
+"lecture imminente", ce qui aura pour conséquence de ne pas baisser la
+ligne d'interruption et de ne plus être dérangé.
+Pour reprendre la capture, il suffit de faire un reset avec le bit prévu
+dans le registre de contrôle.
+\pagebreak
+
+\section{Réalisation de la carte }
+
+La principale difficulté provient du logiciel. Toutefois cela avance,
+à en voir les documents produits. Ceux-ci sont encore tres incomplet. Toutefois
+ils permettent de déceler les premières grosses erreurs.
+
+
+
diff --git a/2004/n/fpga/doc/dcd/ovcam/ovcam1.fig b/2004/n/fpga/doc/dcd/ovcam/ovcam1.fig
new file mode 100644
index 0000000..8fb8bb4
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/ovcam1.fig
@@ -0,0 +1,67 @@
+#FIG 3.2
+Portrait
+Flush left
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1425 1200 3325 1200 3325 2138 1425 2138 1425 1200
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 2375 3313 2375 3313 3313 1438 3313 1438 2375
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6637 4013 8287 4013 8287 6151 6637 6151 6637 4013
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6625 1400 8275 1400 8275 3538 6625 3538 6625 1400
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 4025 4025 4025 4025 6375 1438 6375 1438 4025
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3338 1888 6613 1888
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5450 1913 5450 4725 6638 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 1888 1438 1888 1425 1888
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3313 2825 6638 2825
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 1
+ 5200 2838
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5200 2813 5200 5175 6638 5175
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 1425 1425 1425
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 4263 1438 4263 1425 4275
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 4725 1425 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 225 5200 1438 5200 1413 5200
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 1886 4013 1886 3322 1894 3322
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 2833 3330 2833 4013 2833 4028
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 5
+ 1545 4005 1545 3648 1094 3648 1094 2010 1413 2010
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 248 2833 1428 2833 1335 2724
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 2833 1343 2934
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1420 1343 1327
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1428 1358 1521
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1878 1343 1762
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1894 1343 1948
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4253 1312 4145
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4261 1319 4346
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 4727 1343 4626
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 4735 1327 4789
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 5192 1327 5076
diff --git a/2004/n/fpga/doc/dcd/ovcam/ovcam2.fig b/2004/n/fpga/doc/dcd/ovcam/ovcam2.fig
new file mode 100644
index 0000000..beb374d
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/ovcam2.fig
@@ -0,0 +1,140 @@
+#FIG 3.2
+Portrait
+Flush left
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+0 32 #636163
+0 33 #cecbce
+0 34 #cecbce
+0 35 #6b6d6b
+# Right brace
+6 8370 2206 8910 9405
+3 4 0 1 0 7 50 0 -1 0.000 0 0 0 7
+ 8370 9405 8640 9405 8640 5806 8910 5806 8640 5806 8640 2206
+ 8370 2206
+ 0.000 1.000 1.000 0.000 1.000 1.000 0.000
+-6
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1425 1200 3325 1200 3325 2138 1425 2138 1425 1200
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 2375 3313 2375 3313 3313 1438 3313 1438 2375
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6637 4013 8287 4013 8287 6151 6637 6151 6637 4013
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6625 1400 8275 1400 8275 3538 6625 3538 6625 1400
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 4025 4025 4025 4025 6375 1438 6375 1438 4025
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3338 1888 6613 1888
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5450 1913 5450 4725 6638 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3313 2825 6638 2825
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 1
+ 5200 2838
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5200 2813 5200 5175 6638 5175
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 1425 1425 1425
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 4263 1438 4263 1425 4275
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 4725 1425 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 225 5200 1438 5200 1413 5200
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 1886 4013 1886 3322 1894 3322
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 2833 3330 2833 4013 2833 4028
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 5
+ 1545 4005 1545 3648 1094 3648 1094 2010 1413 2010
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 248 2833 1428 2833 1335 2724
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 2833 1343 2934
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1420 1343 1327
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1428 1358 1521
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1878 1343 1762
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1894 1343 1948
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4253 1312 4145
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4261 1319 4346
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 4727 1343 4626
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 4735 1327 4789
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 5192 1327 5076
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 4050 4365 6615 3105
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 4050 5580 6615 5580
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 315 5805 1395 5805
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+ 0 0 1.00 60.00 120.00
+ 2430 6390 2430 9900 4320 9900
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 3015 6615 7830 6615 7830 8865 3015 8865 3015 6615
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 1845 1438 1845 1425 1845
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1620 765 1620 1215
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 765 2475 1440 2475
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 630 6165 1440 6165
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3
+ 1440 5220 1260 5355 1260 5400
+4 0 0 50 -1 0 12 0.0000 4 135 1110 1575 1440 Convertisseur \001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 1575 1665 8bits to 16 bits\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 450 1305 Pclk_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 1110 1800 2745 compteur 1024\001
+4 0 0 50 -1 0 12 0.0000 4 180 780 3915 1800 data[15-0]\001
+4 0 0 50 -1 0 12 0.0000 4 180 690 4230 2745 addr[9-0]\001
+4 0 0 50 -1 0 12 0.0000 4 135 480 6885 1935 Bank0\001
+4 0 0 50 -1 0 12 0.0000 4 135 660 6885 2385 DPRAM\001
+4 0 0 50 -1 0 12 0.0000 4 135 630 6885 2610 1024x16\001
+4 0 0 50 -1 0 12 0.0000 4 135 870 1890 4320 sequenceur\001
+4 0 0 50 -1 0 12 0.0000 4 135 480 6975 4320 Bank1\001
+4 0 0 50 -1 0 12 0.0000 4 135 660 6975 4770 DPRAM\001
+4 0 0 50 -1 0 12 0.0000 4 135 630 6975 4995 1024x16\001
+4 0 0 50 -1 0 12 0.0000 4 180 750 4410 5490 En_bank1\001
+4 0 0 50 -1 0 12 0.0000 4 180 600 1890 3510 enb_cpt\001
+4 0 0 50 -1 0 12 0.0000 4 135 390 2880 3780 carry\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 405 4185 Pclk_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 750 405 4590 Href_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 900 405 5130 Vsync_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 1530 3105 6840 Registre de controle\001
+4 0 0 50 -1 0 12 0.0000 4 180 2175 3105 7290 BK : bit indique le bank \340 lire\001
+4 0 0 50 -1 0 12 0.0000 4 180 3525 3105 7515 INT : indique qu'il y a un bank \340 lire. bit est \340 1 \001
+4 0 0 50 -1 0 12 0.0000 4 180 3225 3105 7740 lorsque la ligne d'interruption est \340 1.\001
+4 0 0 50 -1 0 12 0.0000 4 180 3555 3105 7965 ERR : indique qu'il y a eu ecrasement d'un bank\001
+4 0 0 50 -1 0 12 0.0000 4 180 3090 3105 8190 RST : permet de faire un reset du system\001
+4 0 0 50 -1 0 12 0.0000 4 180 4620 3105 8415 RDB : doit etre mis \340 1 avant de lire un bank. Le sequenceur \001
+4 0 0 50 -1 0 12 0.0000 4 180 4470 3105 8640 utilisera ce signal pour baisser la ligne d'interruption.\001
+4 0 0 50 -1 0 12 0.0000 4 180 885 2610 9810 Interruption\001
+4 0 0 50 -1 0 12 0.0000 4 135 360 8865 4680 BUS\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 8865 5130 ISA\001
+4 0 0 50 -1 0 12 0.0000 4 180 2010 4545 9900 Gestionnaire d'interruption\001
+4 0 0 50 -1 0 12 0.0000 4 180 1095 180 1800 data_cam[7-0]\001
+4 0 0 50 -1 0 12 0.4363 4 180 720 4320 4140 en_bank0\001
+4 0 0 50 -1 0 12 0.0000 4 180 660 450 5760 Chip_clk\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 315 2790 Pclk_cam\001
+4 0 0 50 0 0 12 0.0000 4 135 270 1665 900 Rst\001
+4 0 0 50 0 0 12 0.0000 4 135 270 720 2430 Rst\001
diff --git a/2004/n/fpga/doc/dcd/ovcam/rdcam.c b/2004/n/fpga/doc/dcd/ovcam/rdcam.c
new file mode 100644
index 0000000..8584282
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/rdcam.c
@@ -0,0 +1,124 @@
+/* rdcam.c contient les fonctions qui enregistre l'image
+ */
+
+#include "rdcam.h"
+#include <sys/ports.h>
+#include <sys/sio.h>
+#include <sys/interrupts.h>
+
+#define CAM_PCLK BITN(1)
+#define CAM_HREF BITN(2)
+#define CAM_VSYNC BITN(3)
+
+void
+cam_init(void)
+{
+ // configuration des lignes en entrée;
+ //_io_ports[M6811_DDRA] &= ~0x07 ;
+ _io_ports[M6811_DDRG] = 0;
+}
+
+unsigned char
+test_portcam(unsigned char bit)
+{
+ if ((_io_ports[M6811_PORTA] & bit) !=0)
+ return 1;
+ else
+ return 0;
+}
+
+/* 352*288 = 101376 octect
+ * le 68 hc ne dispose que de 64ko de RAM !!! PB --> on segmente en 4
+ * parties :
+ * 288 /4 = 72
+ *
+ * 352 * 72
+ */
+
+void
+cam_get(unsigned char * tab, unsigned char part)
+{
+ unsigned char ligne;
+ unsigned char *p;
+ // attend que CAM_VSYNC passe à 1
+ while (!(_io_ports[M6811_PORTA] & 0x04))
+ ;
+ for (ligne=0;ligne < 72 * part;ligne++)
+ {
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ // attend que CAM_HREF passe à 0
+ while((_io_ports[M6811_PORTA] & 0x02))
+ ;
+ }
+ for (ligne=0;ligne<72;ligne++)
+ {
+ p = tab;
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ // tant que CAM_HREF est à 1
+ while(_io_ports[M6811_PORTA] & 0x02)
+ {
+ // si CAM_PCLK passe à 1
+ if(_io_ports[M6811_PORTA] & 0x01)
+ {
+ *p++ = _io_ports[M6811_PORTG];
+ // attend que CAM_PCK passe à 0
+ while(_io_ports[M6811_PORTA] & 0x01)
+ ;
+ }
+ }
+ tab += 352;
+ }
+}
+
+void
+cam_count_href_pclk(int *tab)
+{
+ int i = 0;
+ int c;
+ // attend que CAM_VSYNC passe à 1
+ while (!(_io_ports[M6811_PORTA] & 0x04))
+ ;
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ // attend que CAM_HREF passe à 0
+ while(_io_ports[M6811_PORTA] & 0x02)
+ ;
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ for (i = 0; i < 288; i++)
+ {
+ c = 0;
+ // tant que CAM_HREF est à 1
+ while(_io_ports[M6811_PORTA] & 0x02)
+ {
+ // attend que PCLK passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x01))
+ ;
+ // attend que PCLK passe à 0
+ while(_io_ports[M6811_PORTA] & 0x01)
+ ;
+ c++;
+ }
+ *tab++ = c;
+ }
+}
+
+void
+cam_skip_frames(int n)
+{
+ int i;
+ for (i = 0; i < n; i++)
+ {
+ // attend que CAM_VSYNC passe à 1 puis 0
+ while (!(_io_ports[M6811_PORTA] & 0x04))
+ ;
+ while ((_io_ports[M6811_PORTA] & 0x04))
+ ;
+ }
+}
diff --git a/2004/n/fpga/doc/dcd/ovcam/rdcam.h b/2004/n/fpga/doc/dcd/ovcam/rdcam.h
new file mode 100644
index 0000000..1544641
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/ovcam/rdcam.h
@@ -0,0 +1,18 @@
+#ifndef RDCAM_H
+#define RDCAM_H
+
+#define BITN(x) (1<<(x))
+
+
+void
+cam_init(void);
+void
+cam_get(unsigned char * tab, unsigned char part);
+unsigned char
+test_portcam(unsigned char bit);
+void
+cam_count_href_pclk(int *tab);
+void
+cam_skip_frames(int n);
+
+#endif
diff --git a/2004/n/fpga/doc/dcd/portserie/images/Makefile b/2004/n/fpga/doc/dcd/portserie/images/Makefile
new file mode 100644
index 0000000..f1dd4bd
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/portserie/images/Makefile
@@ -0,0 +1,7 @@
+all: txserie.pdf rxserie.pdf
+
+%.pdf: %.fig
+ fig2dev -L pdf -p dummy $< $@
+
+clean:
+ rm -f *.eps
diff --git a/2004/n/fpga/doc/dcd/portserie/images/rxserie.pdf b/2004/n/fpga/doc/dcd/portserie/images/rxserie.pdf
new file mode 100644
index 0000000..5ee93de
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/portserie/images/rxserie.pdf
Binary files differ
diff --git a/2004/n/fpga/doc/dcd/portserie/images/rxserie.sxd b/2004/n/fpga/doc/dcd/portserie/images/rxserie.sxd
new file mode 100644
index 0000000..cc63937
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/portserie/images/rxserie.sxd
Binary files differ
diff --git a/2004/n/fpga/doc/dcd/portserie/images/txserie.pdf b/2004/n/fpga/doc/dcd/portserie/images/txserie.pdf
new file mode 100644
index 0000000..0432e28
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/portserie/images/txserie.pdf
Binary files differ
diff --git a/2004/n/fpga/doc/dcd/portserie/images/txserie.sxd b/2004/n/fpga/doc/dcd/portserie/images/txserie.sxd
new file mode 100644
index 0000000..c087515
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/portserie/images/txserie.sxd
Binary files differ