summaryrefslogtreecommitdiff
path: root/2004/n/asserv
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/asserv')
-rw-r--r--2004/n/asserv/src/main.c61
-rw-r--r--2004/n/asserv/src/motor.c48
-rw-r--r--2004/n/asserv/src/motor.h9
-rw-r--r--2004/n/asserv/src/serial.c10
-rw-r--r--2004/n/asserv/src/serial.h7
5 files changed, 102 insertions, 33 deletions
diff --git a/2004/n/asserv/src/main.c b/2004/n/asserv/src/main.c
index d3c90f4..42b0be6 100644
--- a/2004/n/asserv/src/main.c
+++ b/2004/n/asserv/src/main.c
@@ -27,25 +27,25 @@
/* Pattes
40 b7 : sens compteur gauche
-39 b6 : libre
-38 b5 : libre
+39 b6 : libre ->
+38 b5 : libre ->
37 b4 : sens compteur droit
-36 b3 : libre
-35 b2 : libre
-34 b1 : libre
-33 b0 : libre
+36 b3 : libre ->
+35 b2 : libre ->
+34 b1 : libre ->
+33 b0 : debug
32 Vdd
31 Vss
-30 d7 : libre
-29 d6 : libre
-28 d5 : libre
-27 d4 : libre
+30 d7 : libre <-
+29 d6 : libre <-
+28 d5 : libre <-
+27 d4 : libre <-
26 c7 : rcv
25 c6 : xmit
24 c5 : libre
23 c4 : libre
-22 d3 : libre
-21 d2 : libre
+22 d3 : libre <-
+21 d2 : libre <-
20 d1 : sens moteur gauche
19 d0 : sens moteur droit
@@ -53,23 +53,27 @@
17 c2 : pwm motor gauche
16 c1 : pwm motor droit
15 c0 : compteur droit
-14 osc2
+14 a6, osc2
13 osc1
12 Vss
11 Vdd
10 e2 : libre
-9 e1 : libre
-8 e0 : libre
+9 e1 : libre (lcd e)
+8 e0 : libre (lcd rs)
7 a5 : libre
6 a4 : compteur gauche
-5 a3 : libre
-4 a2 : libre
-3 a1 : libre
-2 a0 : libre
+5 a3 : libre (lcd d7)
+4 a2 : libre (lcd d6)
+3 a1 : libre (lcd d5)
+2 a0 : libre (lcd d4)
1 /MCLR, Vpp
-Libre: a b c d e
- 0123-5 0123-56- ---345-- --234567 012
+Libre: a b c d e
+ ....-5- ....-..- ---345-- --...... ..2
+ ooooiii ioooiooi iooiiioi ooiiiiii ooi
+
+ - : occupé par la carte d'asservissement.
+ . : occupé par les bonus (debug, gpio, lcd).
*/
/* Configuration générale. */
@@ -77,6 +81,10 @@ Libre: a b c d e
#use delay(clock=40000000)
#use rs232(baud=115200,xmit=PIN_C6,parity=N,rcv=PIN_C7,bits=8)
#priority EXT,RDA,TBE,TIMER2
+#use fast_io(A)
+#use fast_io(B)
+#use fast_io(D)
+#use fast_io(E)
#include "motor.c"
#include "serial.c"
@@ -85,6 +93,15 @@ Libre: a b c d e
void
main_init (void)
{
+ /* Comfiguration des GPIO. */
+ output_a (0x00);
+ set_tris_a (0xf0);
+ output_b (0x00);
+ set_tris_b (0x91);
+ //set_tris_c (0xb9);
+ set_tris_d (0xfc);
+ output_e (0x00);
+ set_tris_e (0x04);
/* Configuration de la liaison série. */
setup_psp (PSP_DISABLED);
/* Configuration de l'interface SPI : non utilisée. */
@@ -121,7 +138,7 @@ irq_init (void)
enable_interrupts (INT_RDA);
disable_interrupts (INT_TBE);
enable_interrupts (GLOBAL);
- enable_interrupts (INT_EXT);
+ disable_interrupts (INT_EXT);
}
void
diff --git a/2004/n/asserv/src/motor.c b/2004/n/asserv/src/motor.c
index 242ff74..aab34cf 100644
--- a/2004/n/asserv/src/motor.c
+++ b/2004/n/asserv/src/motor.c
@@ -50,6 +50,10 @@ unsigned int motor_stat_delay; /* Delay between stats. */
unsigned int motor_stat_delay_cpt; /* Delay counter. */
short motor_cpt; /* Report motors counters. */
+/* Entrées. */
+unsigned int motor_gpi_delay; /* Delais entre deux envois. */
+unsigned int motor_gpi_delay_cpt; /* Compteur. */
+
/* Moteurs. */
signed int motor_g_vdes, motor_g_vacc; /* Vitesse désirée, actuelle. */
signed int motor_d_vdes, motor_d_vacc;
@@ -83,6 +87,8 @@ motor_init (void)
motor_stat_delay = 0;
motor_stat_delay_cpt = 0;
motor_cpt = 0;
+ motor_gpi_delay = 0;
+ motor_gpi_delay_cpt = 0;
motor_g_vdes = 0; motor_g_vacc = 0;
motor_d_vdes = 0; motor_d_vacc = 0;
motor_g_cpt_av = 0; motor_g_cpt_ar = 0;
@@ -389,11 +395,19 @@ motor_main (void)
}
}
/* Accélère. */
- if (!--motor_a_cpt)
+ if (motor_a)
+ {
+ if (!--motor_a_cpt)
+ {
+ motor_update_left_speed ();
+ motor_update_right_speed ();
+ motor_a_cpt = motor_a;
+ }
+ }
+ else
{
- motor_update_left_speed ();
- motor_update_right_speed ();
- motor_a_cpt = motor_a;
+ motor_g_vacc = motor_g_vdes;
+ motor_d_vacc = motor_d_vdes;
}
}
/* Le reste. */
@@ -413,6 +427,15 @@ motor_main (void)
serial_send_motor_cpt (motor_g_cpt, motor_d_cpt);
serial_unreliable_send_eob ();
}
+ /* GPI. */
+ if (motor_gpi_delay)
+ {
+ if (!--motor_gpi_delay_cpt)
+ {
+ serial_send_gpi (input_d ());
+ motor_gpi_delay_cpt = motor_gpi_delay;
+ }
+ }
}
motor_pid_int++;
}
@@ -422,6 +445,7 @@ motor_main (void)
short
motor_parse (void)
{
+ int temp;
switch (serial_recv_com ())
{
case 'v':
@@ -472,6 +496,22 @@ motor_parse (void)
motor_toggle_asservi ();
serial_send_ok ();
return 1;
+ case 'h':
+ serial_recv_int (motor_gpi_delay);
+ motor_gpi_delay_cpt = motor_gpi_delay;
+ serial_send_ok ();
+ return 1;
+ case 'k':
+ serial_recv_int (temp);
+ output_b (temp);
+ serial_send_ok ();
+ return 1;
+ case 'D':
+ serial_recv_int (temp);
+ if (temp == 0x42)
+ enable_interrupts (INT_EXT);
+ serial_send_ok ();
+ return 1;
default:
return 0;
}
diff --git a/2004/n/asserv/src/motor.h b/2004/n/asserv/src/motor.h
index d19bc4f..ac94c39 100644
--- a/2004/n/asserv/src/motor.h
+++ b/2004/n/asserv/src/motor.h
@@ -71,12 +71,9 @@ motor_g_pwm (signed long &pwm);
void
motor_d_pwm (signed long &pwm);
-/* Interruptions de comptage moteur. */
-#int_EXT
-EXT_isr();
-
-#int_EXT1
-EXT1_isr();
+/* Met à jour les compteurs. */
+inline void
+motor_update_cpt (void);
/* Interruption de PID. */
#int_TIMER2
diff --git a/2004/n/asserv/src/serial.c b/2004/n/asserv/src/serial.c
index 826539d..06b00c8 100644
--- a/2004/n/asserv/src/serial.c
+++ b/2004/n/asserv/src/serial.c
@@ -248,6 +248,16 @@ serial_send_motor_ttl (void)
serial_send_char (CRLF);
}
+/* Envois la valeur des entrées gpi. */
+void
+serial_send_gpi (int gpi)
+{
+ serial_send_char ('!');
+ serial_send_char ('H');
+ serial_send_int (gpi);
+ serial_send_char (CRLF);
+}
+
/* Envoie un caractère. */
void
serial_send_char (char c)
diff --git a/2004/n/asserv/src/serial.h b/2004/n/asserv/src/serial.h
index 12fb564..99131c3 100644
--- a/2004/n/asserv/src/serial.h
+++ b/2004/n/asserv/src/serial.h
@@ -79,7 +79,8 @@ serial_send_ok (void);
/* Envoie un rapport d'un moteur. */
void
-serial_send_motor_stat (char side, unsigned int vacc, unsigned long &e, unsigned long &pwm);
+serial_send_motor_stat (char side, unsigned int vacc, unsigned long &e,
+ unsigned long &pwm);
/* Envois les compteurs moteurs. */
void
@@ -89,6 +90,10 @@ serial_send_motor_cpt (signed long &g, signed long &d);
void
serial_send_motor_ttl (void);
+/* Envois la valeur des entrées gpi. */
+void
+serial_send_gpi (int gpi);
+
/* Envoie un caractère. */
void
serial_send_char (char c);