Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fa013d7

Browse files
author
yannick.le.ny.56
committed
update file after Servo lib patched and adding ServoTimer2 lib
git-svn-id: http://duinos.googlecode.com/svn/trunk@24 542b9b23-42aa-b9a1-add2-148d3e16e5b3
1 parent 1ad45ff commit fa013d7

File tree

1 file changed

+140
-1
lines changed

1 file changed

+140
-1
lines changed

howto-new-duinos-release.txt

Lines changed: 140 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ heap_3.c
3535
c) from FreeRTOSVx.x.x/Source/portable/GCC/ATMega323/
3636
port.c
3737
portmacro.h
38-
dont port.c a été mis à jour pour supporter les microcontroleurs Atmel
38+
port.c (file updated to add support for Atmel AtMega chips
3939

4040
3) Now you need to patch DuinOS_v0.X/arduino.DuinOS/DuinOS/port.c with the following patch :
4141

@@ -532,6 +532,145 @@ and copy them in DuinOS_v0.X/arduino.DuinOS folder.
532532
+NORMAL_PRIORITY LITERAL1
533533
+HIGH_PRIORITY LITERAL1
534534

535+
9) Copy arduino-00xx/libraries/Servo/Servo.h in DuinOS_v0.x/libraries/Servo folder and patch it with the following patch :
536+
Disable Timer1 because DuinOS uses the timer 1 for its kernel in this file
537+
538+
--- Servo.h.ORI 2010-10-02 22:17:42.000000000 +0200
539+
+++ Servo.h 2010-12-20 22:52:10.000000000 +0100
540+
@@ -59,29 +59,38 @@
541+
// Say which 16 bit timers can be used and in what order
542+
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
543+
#define _useTimer5
544+
-#define _useTimer1
545+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
546+
+#define _useTimer1 */
547+
#define _useTimer3
548+
-#define _useTimer4
549+
-typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
550+
+#define _useTimer4
551+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
552+
+typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ; */
553+
+typedef enum { _timer5, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
554+
555+
#elif defined(__AVR_ATmega32U4__)
556+
#define _useTimer3
557+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
558+
#define _useTimer1
559+
-typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
560+
+typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ; */
561+
+typedef enum { _timer3, _Nbr_16timers } timer16_Sequence_t ;
562+
563+
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
564+
#define _useTimer3
565+
-#define _useTimer1
566+
-typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
567+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
568+
+#define _useTimer1
569+
+typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ; */
570+
+typedef enum { _timer3, _Nbr_16timers } timer16_Sequence_t ;
571+
572+
#elif defined(__AVR_ATmega128__) ||defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
573+
#define _useTimer3
574+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
575+
#define _useTimer1
576+
+typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ; */
577+
typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
578+
579+
#else // everything else
580+
-#define _useTimer1
581+
-typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ;
582+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
583+
+typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ; */
584+
#endif
585+
586+
#define Servo_VERSION 2 // software version of this library
587+
588+
589+
10) Copy arduino-00xx/libraries/Servo/Servo.cpp in DuinOS_v0.x/libraries/Servo folder and patch it with the following patch :
590+
Disable Timer1 because DuinOS uses the timer 1 for its kernel in this file
591+
592+
--- Servo.cpp.ORI 2010-10-02 22:17:42.000000000 +0200
593+
+++ Servo.cpp 2010-12-20 22:57:04.000000000 +0100
594+
@@ -99,12 +99,13 @@
595+
596+
#ifndef WIRING // Wiring pre-defines signal handlers so don't define any if compiling for the Wiring platform
597+
// Interrupt handlers for Arduino
598+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
599+
#if defined(_useTimer1)
600+
SIGNAL (TIMER1_COMPA_vect)
601+
{
602+
handle_interrupts(_timer1, &TCNT1, &OCR1A);
603+
}
604+
-#endif
605+
+#endif */
606+
607+
#if defined(_useTimer3)
608+
SIGNAL (TIMER3_COMPA_vect)
609+
@@ -128,13 +129,15 @@
610+
#endif
611+
612+
#elif defined WIRING
613+
-// Interrupt handlers for Wiring
614+
+// Interrupt handlers for Wiring
615+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
616+
#if defined(_useTimer1)
617+
void Timer1Service()
618+
{
619+
handle_interrupts(_timer1, &TCNT1, &OCR1A);
620+
}
621+
#endif
622+
+*/
623+
#if defined(_useTimer3)
624+
void Timer3Service()
625+
{
626+
@@ -145,7 +148,8 @@
627+
628+
629+
static void initISR(timer16_Sequence_t timer)
630+
-{
631+
+{
632+
+/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
633+
#if defined (_useTimer1)
634+
if(timer == _timer1) {
635+
TCCR1A = 0; // normal counting mode
636+
@@ -163,7 +167,7 @@
637+
timerAttach(TIMER1OUTCOMPAREA_INT, Timer1Service);
638+
#endif
639+
}
640+
-#endif
641+
+#endif */
642+
643+
#if defined (_useTimer3)
644+
if(timer == _timer3) {
645+
@@ -208,6 +212,7 @@
646+
{
647+
//disable use of the given timer
648+
#if defined WIRING // Wiring
649+
+ /* Disable Timer1 because DuinOS uses the timer 1 for its kernel
650+
if(timer == _timer1) {
651+
#if defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
652+
TIMSK1 &= ~_BV(OCIE1A) ; // disable timer 1 output compare interrupt
653+
@@ -216,7 +221,8 @@
654+
#endif
655+
timerDetach(TIMER1OUTCOMPAREA_INT);
656+
}
657+
- else if(timer == _timer3) {
658+
+ else if(timer == _timer3) { */
659+
+ if(timer == _timer3) {
660+
#if defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
661+
TIMSK3 &= ~_BV(OCIE3A); // disable the timer3 output compare A interrupt
662+
#else
663+
664+
11) Because with some chips as AtMega 168 and 328, Timer1 is disabled because DuinOS uses the timer 1 for its kernel.
665+
and we don't have now a 16 bit timer to use Servo lib that need it.
666+
Then we add ServoTimer2 lib (http://code.google.com/p/tricopter/source/browse/trunk/arduino/#arduino%2Flibraries%2FServoTimer2 )
667+
that use the 8 bits timer 2 for Servo.
668+
669+
Copy the following files from this website
670+
ServoTimer2.cpp, ServoTimer2.h, keywords.txt
671+
in DuinOS_v0.x/libraries/ServoTimer2 folder
672+
673+
535674

536675

537676

0 commit comments

Comments
 (0)