Je disais donc...
> Bref, assez de blabla, voici le patch. (en fichier attaché).
Simon
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/aversive/irq_lock.h
aversive/include/aversive/irq_lock.h
--- ../../orig/aversive/include/aversive/irq_lock.h 2007-05-23
19:18:09.000000000 +0200
+++ aversive/include/aversive/irq_lock.h 2009-07-03 20:48:29.000000000
+0200
@@ -40,6 +40,22 @@
#ifndef _AVERSIVE_IRQ_LOCK_H_
#define _AVERSIVE_IRQ_LOCK_H_
+#ifdef DSPIC
+#include "p33fxxxx.h"
+#define GLOBAL_IRQ_ARE_MASKED() (!(SRbits.IPL==7))
+
+#define IRQ_LOCK(flags) do { \
+ flags = SRbits.IPL ; \
+ cli(); \
+ } while(0)
+
+#define IRQ_UNLOCK(flags) do { \
+ SRbits.IPL = flags; \
+ } while ( 0 )
+
+#else
+
+
#ifdef HOST_VERSION
/* we must use 'flags' to avoid a warning */
@@ -62,4 +78,5 @@
#endif /* ! HOST_VERSION */
+#endif /* ! DSPIC */
#endif /* _AVERSIVE_IRQ_LOCK_H_ */
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/aversive/parts.h
aversive/include/aversive/parts.h
--- ../../orig/aversive/include/aversive/parts.h 2009-01-23
23:53:08.000000000 +0100
+++ aversive/include/aversive/parts.h 2009-07-03 20:48:29.000000000 +0200
@@ -269,7 +269,9 @@
#elif defined (__AVR_ATxmega64A3__)
#include <aversive/parts/ATxmega64A3.h>
#else
+#ifndef DSPIC
#error "This arch is not implemented yet"
#endif
+#endif
#endif /* _AVERSIVE_PARTS_H_ */
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/aversive.h
aversive/include/aversive.h
--- ../../orig/aversive/include/aversive.h 2009-05-18 14:19:51.000000000
+0200
+++ aversive/include/aversive.h 2009-07-03 20:48:29.000000000 +0200
@@ -29,10 +29,14 @@
#define _AVERSIVE_H_
#include <autoconf.h>
+#include <math.h>
#ifndef HOST_VERSION
-#include <avr/interrupt.h>
-#include <avr/io.h>
+# ifndef DSPIC
+# define AVR
+# include <avr/interrupt.h>
+# include <avr/io.h>
+# endif
#endif
#include <aversive/types.h>
@@ -44,19 +48,27 @@
#define __AVR_LIBC_VERSION__ 0UL
#endif
-#ifndef HOST_VERSION
+#ifdef AVR
#if __AVR_LIBC_VERSION__ < 10403UL
#include <avr/signal.h>
#endif
#endif
-#define F_CPU ((unsigned long)CONFIG_QUARTZ)
+#ifdef DSPIC
+# define F_CPU ((CONFIG_QUARTZ)/2) /* Do NOT make it unsigned, it breaks
S_MAX(). */
+# define FCY F_CPU
+#else
+# define F_CPU ((unsigned long)CONFIG_QUARTZ)
+#endif
#define Hz 1l
#define KHz 1000l
#define MHz 1000000l
+#ifndef M_PI
+# define M_PI 3.141592653589
+#endif
/*
* a few "mathematical" macros : maximums and minimums
@@ -193,7 +205,7 @@
/* a few asm utilities */
-#ifndef HOST_VERSION
+#ifdef AVR
#ifndef nop
#define nop() __asm__ __volatile__ ("NOP\n") /** nop instruction, 1 CPU cycle
consumed */
#endif
@@ -215,14 +227,21 @@
__asm__ __volatile__ ("ijmp\n"); \
} while(0)
#endif
+#endif /* AVR */
-#else /* HOST_VERSION */
+#ifdef HOST_VERSION
#define nop() do {} while(0)
#define nothing() do {} while(0)
#define cli() do {} while(0)
#define sei() do {} while(0)
#endif /* HOST_VERSION */
+#ifdef DSPIC
+# define nop() do {__asm__ volatile ("nop");} while(0)
+# define nothing() do {} while(0)
+# define cli() do {SRbits.IPL=7;} while(0)
+# define sei() do {SRbits.IPL=0;} while(0)
+#endif /* DSPIC */
/**
* little bit toggeling macro
*
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/dspic/inttypes.h
aversive/include/dspic/inttypes.h
--- ../../orig/aversive/include/dspic/inttypes.h 1970-01-01
01:00:00.000000000 +0100
+++ aversive/include/dspic/inttypes.h 2009-07-02 18:52:14.000000000 +0200
@@ -0,0 +1,13 @@
+#ifndef DSPIC_INTTYPES_H
+#define DSPIC_INTTYPES_H
+
+typedef signed char int8_t;
+typedef unsigned char uint8_t;
+typedef signed int int16_t;
+typedef unsigned int uint16_t;
+typedef signed long int int32_t;
+typedef unsigned long int uint32_t;
+typedef signed long long int64_t;
+typedef unsigned long long uint64_t;
+
+#endif
diff -uNr -x .svn -x '*.o' ../../orig/aversive/include/dspic/stdint.h
aversive/include/dspic/stdint.h
--- ../../orig/aversive/include/dspic/stdint.h 1970-01-01 01:00:00.000000000
+0100
+++ aversive/include/dspic/stdint.h 2009-07-03 20:48:29.000000000 +0200
@@ -0,0 +1,4 @@
+#ifndef DSPIC_STDINT_H
+#define DSPIC_STDINT_H
+
+#endif
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/base/scheduler/scheduler.c
aversive/modules/base/scheduler/scheduler.c
--- ../../orig/aversive/modules/base/scheduler/scheduler.c 2009-01-29
00:26:01.000000000 +0100
+++ aversive/modules/base/scheduler/scheduler.c 2009-07-03 20:48:30.000000000
+0200
@@ -21,15 +21,15 @@
#include <string.h>
-#include <aversive/parts.h>
#include <aversive.h>
+#include <aversive/parts.h>
#include <scheduler.h>
#include <scheduler_private.h>
#include <scheduler_config.h>
-/* this file is compiled for AVR version only */
+/* this file is compiled for AVR/DSPIC versions only */
/** declared in scheduler_host.c in case of host version */
struct event_t g_tab_event[SCHEDULER_NB_MAX_EVENT];
@@ -39,6 +39,18 @@
{
memset(g_tab_event, 0, sizeof(g_tab_event));
+
+#ifdef DSPIC
+ /* Scheduler uses timer1 on dspic33 */
+ T1CON = 0; // Timer reset
+ IFS0bits.T1IF = 0; // Reset Timer1 interrupt flag
+ IPC0bits.T1IP = 4; // Timer1 Interrupt priority level=4
+ IEC0bits.T1IE = 1; // Enable Timer1 interrupt
+ TMR1= 0x0000;
+ PR1 = FCY / SCHEDULER_UNIT;
+ T1CONbits.TON = 1; // Enable Timer1 and start the counter
+#endif
+
#ifdef CONFIG_MODULE_SCHEDULER_USE_TIMERS
SCHEDULER_TIMER_REGISTER();
#endif
@@ -59,3 +71,17 @@
scheduler_interrupt();
}
#endif /* CONFIG_MODULE_SCHEDULER_USE_TIMERS */
+
+
+#ifdef DSPIC
+/* the ISR name is chosen from the device linker script */
+void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)
+{
+ // Interrupt Service Routine code goes here */
+ IFS0bits.T1IF=0;
+
+ scheduler_interrupt();
+ return;
+}
+
+#endif
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/devices/encoders/encoders_igrebot/config/encoders_igrebot_config.h
aversive/modules/devices/encoders/encoders_igrebot/config/encoders_igrebot_config.h
---
../../orig/aversive/modules/devices/encoders/encoders_igrebot/config/encoders_igrebot_config.h
1970-01-01 01:00:00.000000000 +0100
+++
aversive/modules/devices/encoders/encoders_igrebot/config/encoders_igrebot_config.h
2009-07-03 20:48:29.000000000 +0200
@@ -0,0 +1,33 @@
+/*
+ * Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ * Copyright I-Grebot (2009)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Revision : $$
+ *
+ */
+#ifndef _ENCODERS_IGREBOT_CONFIG_H_
+#define _ENCODERS_IGREBOT_CONFIG_H_
+
+
+/* For each encoder input, which programmable pin (RP#) to use */
+#define QUAD_ENCODER_1_PIN_A 6
+#define QUAD_ENCODER_1_PIN_B 7
+
+#define QUAD_ENCODER_2_PIN_A 15
+#define QUAD_ENCODER_2_PIN_B 13
+
+#endif
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.c
aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.c
---
../../orig/aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.c
1970-01-01 01:00:00.000000000 +0100
+++ aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.c
2009-07-03 20:48:29.000000000 +0200
@@ -0,0 +1,115 @@
+/*
+ * Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ * Copyright I-Grebot(2009)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Revision : $$
+ *
+ */
+
+/** \file encoders_Igrebot.c
+ * \brief Implementation for getting motor position
+ *
+ */
+
+#include <aversive.h>
+
+#include <encoders_igrebot.h>
+#include <encoders_igrebot_config.h>
+
+static int32_t value_codeur[2];
+static int16_t value_old[2];
+
+/**
+ * Initialisation of encoders, variables
+ */
+void encoders_igrebot_init(void)
+{
+ POS1CNT=0;
+ POS2CNT=0;
+ QEI1CONbits.QEIM=0b111; //signal x4 + dépassement avec MAXxCNT
+ MAX1CNT=0xFFFF;
+ QEI1CONbits.SWPAB=0; //sens d'avance du codeur
+ QEI1CONbits.PCDOUT=0;//pas de sortie sur UPDNx
+
+ DFLT1CONbits.QEOUT=1; //Activation du filtrage en entrée
+ DFLT1CONbits.QECK=0; //division par 1
+
+ QEI2CON=QEI1CON; //même config pour les deux codeurs
+ MAX2CNT=MAX1CNT;
+ DFLT2CON=DFLT1CON;
+ QEI2CONbits.SWPAB=0;
+
+
+ /* Encodeurs */
+ RPINR14bits.QEA1R = QUAD_ENCODER_1_PIN_A;
+ RPINR14bits.QEB1R = QUAD_ENCODER_1_PIN_B;
+
+ RPINR16bits.QEA2R = QUAD_ENCODER_2_PIN_A;
+ RPINR16bits.QEB2R = QUAD_ENCODER_2_PIN_B;
+}
+
+
+
+/** Extract encoder value.
+ *
+ * \param number : a (void *) that is casted in (int) containing the number
+ * of the encoder to be read.
+ */
+int32_t encoders_igrebot_get_value(void * number)
+{
+ int16_t value;
+ uint8_t flags;
+
+ IRQ_LOCK(flags);
+
+ int num = (int) number;
+
+ value = num ? (int16_t) POS2CNT : (int16_t) POS1CNT;
+
+ int16_t res = value - value_old[num];
+ value_old[num] = value;
+ value_codeur[num] += res;
+
+ IRQ_UNLOCK(flags);
+
+ return value_codeur[num];
+}
+
+/** Set an encoder value
+ *
+ * \param number : a (void *) that is casted in (int) containing the number
+ * of the encoder to be read.
+ * \param v : the value
+ */
+void encoders_igrebot_set_value(void * number, int32_t v)
+{
+ uint8_t flags;
+ int num = (int) number;
+ int val = (int) v;
+
+ IRQ_LOCK(flags);
+
+ value_codeur[num]=val;
+ value_old[num]=val;
+
+ if (num == 0)
+ POS1CNT=val;
+ else
+ POS2CNT=val;
+
+ IRQ_UNLOCK(flags);
+}
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.h
aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.h
---
../../orig/aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.h
1970-01-01 01:00:00.000000000 +0100
+++ aversive/modules/devices/encoders/encoders_igrebot/encoders_igrebot.h
2009-07-02 18:52:14.000000000 +0200
@@ -0,0 +1,47 @@
+/*
+ * Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Revision : $Id: encoders_microb.h,v 1.4 2006-11-03 09:05:12 zer0 Exp $
+ *
+ */
+
+#ifndef _ENCODERS_IGREBOT_H_
+#define _ENCODERS_IGREBOT_H_
+
+/**
+ * Initialisation of encoders, variables
+ */
+void encoders_igrebot_init(void);
+
+
+
+/** Extract encoder value.
+ *
+ * \param data : a (void *) that is casted in (uint8_t) containing the number
+ * of the encoder to be read.
+ */
+int32_t encoders_igrebot_get_value(void * data);
+
+/** Set an encoder value
+ *
+ * \param data : a (void *) that is casted in (uint8_t) containing the number
+ * of the encoder to be read.
+ * \param v : the value
+ */
+void encoders_igrebot_set_value(void * data, int32_t c);
+
+#endif
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/devices/robot/position_manager/position_manager.c
aversive/modules/devices/robot/position_manager/position_manager.c
---
../../orig/aversive/modules/devices/robot/position_manager/position_manager.c
2009-05-18 14:27:26.000000000 +0200
+++ aversive/modules/devices/robot/position_manager/position_manager.c
2009-07-03 20:48:30.000000000 +0200
@@ -20,8 +20,8 @@
*/
#include <string.h>
-#include <math.h>
+#include <aversive.h>
#include <robot_system.h>
#include <position_manager.h>
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/devices/robot/trajectory_manager/trajectory_manager.c
aversive/modules/devices/robot/trajectory_manager/trajectory_manager.c
---
../../orig/aversive/modules/devices/robot/trajectory_manager/trajectory_manager.c
2009-05-18 14:28:36.000000000 +0200
+++ aversive/modules/devices/robot/trajectory_manager/trajectory_manager.c
2009-07-03 20:48:29.000000000 +0200
@@ -176,6 +176,16 @@
return simple_modulo_2pi(res);
}
+
+/** Get total distance travelled by the robot */
+double traj_get_distance(struct trajectory *traj)
+{
+ double d = ABS(rs_get_distance(traj->robot));
+ d = d / traj->position->phys.distance_imp_per_mm;
+ return d;
+}
+
+
/** near the target (dist) ? */
static uint8_t is_robot_in_dist_window(struct trajectory *traj, double d_win)
{
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/devices/robot/trajectory_manager/trajectory_manager.h
aversive/modules/devices/robot/trajectory_manager/trajectory_manager.h
---
../../orig/aversive/modules/devices/robot/trajectory_manager/trajectory_manager.h
2009-05-02 12:03:04.000000000 +0200
+++ aversive/modules/devices/robot/trajectory_manager/trajectory_manager.h
2009-07-03 20:48:29.000000000 +0200
@@ -106,6 +106,9 @@
* parameters */
uint8_t trajectory_in_window(struct trajectory *traj, double d_win, double
a_win_rad);
+/** Get total distance travelled by the robot */
+double traj_get_distance(struct trajectory *traj);
+
/* simple commands */
/** set relative angle and distance consign to 0 */
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/hardware/pwm_igrebot/config/pwm_config.h
aversive/modules/hardware/pwm_igrebot/config/pwm_config.h
--- ../../orig/aversive/modules/hardware/pwm_igrebot/config/pwm_config.h
1970-01-01 01:00:00.000000000 +0100
+++ aversive/modules/hardware/pwm_igrebot/config/pwm_config.h 2009-07-03
20:48:30.000000000 +0200
@@ -0,0 +1,52 @@
+/*
+ * Copyright I-Grebot (2009)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Revision : $Id: $
+ *
+ */
+
+/** \file pwm_config.h
+ \brief Module to operate all PWM outputs
+*/
+
+#ifndef _PWM_CONFIG_
+#define _PWM_CONFIG_
+
+#define MOT_DIR_G LATAbits.LATA2
+#define TRIS_MOT_DIR_G TRISAbits.TRISA2
+
+#define MOT_DIR_D LATBbits.LATB11
+#define TRIS_MOT_DIR_D TRISBbits.TRISB11
+
+
+/* Left motor is PWM1H1 */
+#define MOT_PWM_G P1DC1
+#define TRIS_MOT_PWM_G TRISBbits.TRISB14
+#define MOT_G_FORWARD 1
+
+
+/* Right motor is PWM1H2 */
+#define MOT_PWM_D P1DC2
+#define TRIS_MOT_PWM_D TRISBbits.TRISB12
+#define MOT_D_FORWARD 0
+
+
+#define MOT_G_BACKWARDS (1 - MOT_G_FORWARD)
+#define MOT_D_BACKWARDS (1 - MOT_D_FORWARD)
+
+#endif
+
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/hardware/pwm_igrebot/pwm_igrebot.c
aversive/modules/hardware/pwm_igrebot/pwm_igrebot.c
--- ../../orig/aversive/modules/hardware/pwm_igrebot/pwm_igrebot.c
1970-01-01 01:00:00.000000000 +0100
+++ aversive/modules/hardware/pwm_igrebot/pwm_igrebot.c 2009-07-03
20:48:30.000000000 +0200
@@ -0,0 +1,136 @@
+/*
+ * Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Revision : $Id: pwm.c,v 1.13 2008-04-13 16:55:31 zer0 Exp $
+ *
+ */
+
+/* Droids-corp, Eirbot, Microb Technology 2005 - Zer0
+ * Implementation for PWM
+ */
+/** \file pwm.c
+ * \brief Implementation for the PWM module.
+ *
+ * \todo Test the module.
+ *
+ * \test The modul fonctions and had been tested by Lamygalle.
+ *
+ * This module provides functions for using a pwm
+ */
+
+#include <aversive.h>
+#include <stdio.h>
+
+#include "pwm.h"
+
+#include <aversive/parts.h>
+#include <pwm_config.h>
+
+/***********************************************************/
+
+/* PWM freq: (HZ) */
+#define FPWM 500
+#define PRESC 16
+
+#define PERIOD ((FCY / (FPWM * PRESC)) - 1)
+
+/* Maximum duty cycle :
+ * 100% duty cycle is when PxDCy is PxTPER x2
+ * since bit 0 is compared with the prescaler.
+ * This information is well hidden on figure 14-16
+ * page 14-33 of the PWM module datasheet.
+ */
+#define MAX_DUTY_PERCENT 100
+#define MAX_DUTY (2L * PERIOD * MAX_DUTY_PERCENT / 100)
+
+// global init
+void pwm_igrebot_init(void)
+{
+ P1TCONbits.PTMOD=0;//free running mode !
+ P1TCONbits.PTOPS=0;//postscaler 1:1
+ P1TCONbits.PTCKPS=2;//prescaler 1:16
+
+ P1TPER = PERIOD;
+
+ PWM1CON1=0b0000001100110000; //output PWM1H et 2H
+
+ /* Configure tristates as outputs */
+ TRIS_MOT_DIR_G = 0;
+ TRIS_MOT_DIR_D = 0;
+ TRIS_MOT_PWM_G = 0;
+ TRIS_MOT_PWM_D = 0;
+
+ MOT_DIR_D = 1;
+ MOT_DIR_G = 1;
+
+ P1TCONbits.PTEN=1; //time base Enable
+}
+/***********************************************************/
+
+
+/***********************************************************/
+
+/* global SET FUNCTION : we use a (void *) to be compliant with
+ * control_system functions. For instance pwm_set((void *)(PWM1B_NUM), x)
+ * is equivalent to pwm_set_1B(x) */
+void pwm_igrebot_set(void * data, int32_t value)
+{
+ uint8_t num = (uint8_t)(int)data;
+ S_MAX(value, MAX_DUTY);
+
+ if (num == 1) {
+ /* Left motor */
+ if (value > 0) {
+ MOT_DIR_G = MOT_G_FORWARD;
+ } else {
+ value = -value;
+ MOT_DIR_G = MOT_G_BACKWARDS;
+ }
+ MOT_PWM_G = (unsigned int) value;
+ } else {
+ /* Right motor */
+ if (value > 0) {
+ MOT_DIR_D = MOT_D_FORWARD;
+ } else {
+ value = -value;
+ MOT_DIR_D = MOT_D_BACKWARDS;
+ }
+ MOT_PWM_D = (unsigned int) value;
+ }
+}
+
+
+int32_t pwm_igrebot_get( void* data)
+{
+ uint8_t num = (uint8_t)(int)data;
+ int32_t value;
+
+ if (num == 1) {
+ /* Left */
+ value = MOT_PWM_G;
+ if(MOT_DIR_G == MOT_G_BACKWARDS)
+ value = -value;
+ } else {
+ /* Right */
+ value = MOT_PWM_D;
+ if(MOT_DIR_D == MOT_D_BACKWARDS)
+ value = -value;
+ }
+ return value;
+}
+
+
diff -uNr -x .svn -x '*.o'
../../orig/aversive/modules/hardware/pwm_igrebot/pwm_igrebot.h
aversive/modules/hardware/pwm_igrebot/pwm_igrebot.h
--- ../../orig/aversive/modules/hardware/pwm_igrebot/pwm_igrebot.h
1970-01-01 01:00:00.000000000 +0100
+++ aversive/modules/hardware/pwm_igrebot/pwm_igrebot.h 2009-07-03
20:48:30.000000000 +0200
@@ -0,0 +1,54 @@
+/*
+ * Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Revision : $Id: pwm.h,v 1.12 2008-04-13 16:55:31 zer0 Exp $
+ *
+ */
+
+/* Droids-corp, Eirbot, Microb Technology 2005 - Zer0
+ * Implementation for PWM
+ */
+/** \file pwm.h
+ * \brief Interface for the PWM module.
+ *
+ * \todo Test the module.
+ *
+ * \test No tests for the moment.
+ *
+ * This module provides functions for using a pwm
+ */
+
+#ifndef _PWM_IGREBOT_H_
+#define _PWM_IGREBOT_H_
+
+#include <aversive.h>
+
+#include <pwm_config.h>
+
+/** global functions*/
+extern void pwm_igrebot_init(void);
+
+/** apply a PWM.
+ * \param data is a pointer that is casted in (uint8_t) to
+ * specify the number of the PWM.
+ * \param value is the value of the pwm.
+ */
+extern void pwm_igrebot_set(void * data, int32_t value);
+
+extern int32_t pwm_igrebot_get(void * data);
+
+#endif // _PWM_IGREBOT_H_
_______________________________________________
Avr-list mailing list
[email protected]
CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
WIKI : http://wiki.droids-corp.org/index.php/Aversive
DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
BUGZILLA : http://bugzilla.droids-corp.org
COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog