/*! \file encoderconf.h \brief Quadrature Encoder driver configuration. */ //***************************************************************************** // // File Name : 'encoderconf.h' // Title : Quadrature Encoder driver configuration // Author : Pascal Stang - Copyright (C) 2003-2004 // Created : 2003.01.26 // Revised : 2004.06.25 // Version : 0.2 // Target MCU : Atmel AVR Series // Editor Tabs : 4 // // The default number of encoders supported is 2 because most AVR processors // have two external interrupts. To use more or fewer encoders, you must do // four things: // // 1. Use a processor with at least as many external interrutps as number of // encoders you want to have. // 2. Set NUM_ENCODERS to the number of encoders you will use. // 3. Comment/Uncomment the proper ENCx_SIGNAL defines for your encoders // (the encoders must be used sequentially, 0 then 1 then 2 then 3) // 4. Configure the various defines so that they match your processor and // specific hardware. The notes below may help. // // // -------------------- NOTES -------------------- // The external interrupt pins are mapped as follows on most AVR processors: // (90s8515, mega161, mega163, mega323, mega16, mega32, etc) // // INT0 -> PD2 (PORTD, pin 2) // INT1 -> PD3 (PORTD, pin 3) // // The external interrupt pins on the processors mega128 and mega64 are: // // INT0 -> PD0 (PORTD, pin 0) // INT1 -> PD1 (PORTD, pin 1) // INT2 -> PD2 (PORTD, pin 2) // INT3 -> PD3 (PORTD, pin 3) // INT4 -> PE4 (PORTE, pin 4) // INT5 -> PE5 (PORTE, pin 5) // INT6 -> PE6 (PORTE, pin 6) // INT7 -> PE7 (PORTE, pin 7) // // This code is distributed under the GNU Public License // which can be found at http://www.gnu.org/licenses/gpl.txt // //***************************************************************************** #ifndef ENCODERCONF_H #define ENCODERCONF_H // constants/macros/typdefs // defines for processor compatibility // quick compatiblity for mega128, mega64 //#ifndef MCUCR // #define MCUCR EICRA //#endif // Set the total number of encoders you wish to support #define NUM_ENCODERS 2 // -------------------- Encoder 0 connections -------------------- // Phase A quadrature encoder output should connect to this interrupt line: // *** NOTE: the choice of interrupt PORT, DDR, and PIN must match the external // interrupt you are using on your processor. Consult the External Interrupts // section of your processor's datasheet for more information. // Interrupt Configuration #define ENC0_SIGNAL SIG_INTERRUPT0 // Interrupt signal name #define ENC0_INT INT0 // matching INTx bit in GIMSK/EIMSK #define ENC0_ICR MCUCR // matching Int. Config Register (MCUCR,EICRA/B) #define ENC0_ISCX0 ISC00 // matching Interrupt Sense Config bit0 #define ENC0_ISCX1 ISC01 // matching Interrupt Sense Config bit1 // PhaseA Port/Pin Configuration // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC0_PHASEA_PORT PORTD // PhaseA port register #define ENC0_PHASEA_DDR DDRD // PhaseA port direction register #define ENC0_PHASEA_PORTIN PIND // PhaseA port input register #define ENC0_PHASEA_PIN PD2 // PhaseA port pin // Phase B quadrature encoder output should connect to this direction line: // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC0_PHASEB_PORT PORTC // PhaseB port register #define ENC0_PHASEB_DDR DDRC // PhaseB port direction register #define ENC0_PHASEB_PORTIN PINC // PhaseB port input register #define ENC0_PHASEB_PIN PC0 // PhaseB port pin // -------------------- Encoder 1 connections -------------------- // Phase A quadrature encoder output should connect to this interrupt line: // *** NOTE: the choice of interrupt pin and port must match the external // interrupt you are using on your processor. Consult the External Interrupts // section of your processor's datasheet for more information. // Interrupt Configuration #define ENC1_SIGNAL SIG_INTERRUPT1 // Interrupt signal name #define ENC1_INT INT1 // matching INTx bit in GIMSK/EIMSK #define ENC1_ICR MCUCR // matching Int. Config Register (MCUCR,EICRA/B) #define ENC1_ISCX0 ISC10 // matching Interrupt Sense Config bit0 #define ENC1_ISCX1 ISC11 // matching Interrupt Sense Config bit1 // PhaseA Port/Pin Configuration // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC1_PHASEA_PORT PORTD // PhaseA port register #define ENC1_PHASEA_PORTIN PIND // PhaseA port input register #define ENC1_PHASEA_DDR DDRD // PhaseA port direction register #define ENC1_PHASEA_PIN PD3 // PhaseA port pin // Phase B quadrature encoder output should connect to this direction line: // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC1_PHASEB_PORT PORTC // PhaseB port register #define ENC1_PHASEB_DDR DDRC // PhaseB port direction register #define ENC1_PHASEB_PORTIN PINC // PhaseB port input register #define ENC1_PHASEB_PIN PC1 // PhaseB port pin // -------------------- Encoder 2 connections -------------------- // Phase A quadrature encoder output should connect to this interrupt line: // *** NOTE: the choice of interrupt pin and port must match the external // interrupt you are using on your processor. Consult the External Interrupts // section of your processor's datasheet for more information. // Interrupt Configuration //#define ENC2_SIGNAL SIG_INTERRUPT6 // Interrupt signal name #define ENC2_INT INT6 // matching INTx bit in GIMSK/EIMSK #define ENC2_ICR EICRB // matching Int. Config Register (MCUCR,EICRA/B) #define ENC2_ISCX0 ISC60 // matching Interrupt Sense Config bit0 #define ENC2_ISCX1 ISC61 // matching Interrupt Sense Config bit1 // PhaseA Port/Pin Configuration // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC2_PHASEA_PORT PORTE // PhaseA port register #define ENC2_PHASEA_PORTIN PINE // PhaseA port input register #define ENC2_PHASEA_DDR DDRE // PhaseA port direction register #define ENC2_PHASEA_PIN PE6 // PhaseA port pin // Phase B quadrature encoder output should connect to this direction line: // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC2_PHASEB_PORT PORTC // PhaseB port register #define ENC2_PHASEB_DDR DDRC // PhaseB port direction register #define ENC2_PHASEB_PORTIN PINC // PhaseB port input register #define ENC2_PHASEB_PIN PC2 // PhaseB port pin // -------------------- Encoder 3 connections -------------------- // Phase A quadrature encoder output should connect to this interrupt line: // *** NOTE: the choice of interrupt pin and port must match the external // interrupt you are using on your processor. Consult the External Interrupts // section of your processor's datasheet for more information. // Interrupt Configuration //#define ENC3_SIGNAL SIG_INTERRUPT7 // Interrupt signal name #define ENC3_INT INT7 // matching INTx bit in GIMSK/EIMSK #define ENC3_ICR EICRB // matching Int. Config Register (MCUCR,EICRA/B) #define ENC3_ISCX0 ISC70 // matching Interrupt Sense Config bit0 #define ENC3_ISCX1 ISC71 // matching Interrupt Sense Config bit1 // PhaseA Port/Pin Configuration // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC3_PHASEA_PORT PORTE // PhaseA port register #define ENC3_PHASEA_PORTIN PINE // PhaseA port input register #define ENC3_PHASEA_DDR DDRE // PhaseA port direction register #define ENC3_PHASEA_PIN PE7 // PhaseA port pin // Phase B quadrature encoder output should connect to this direction line: // *** PORTx, DDRx, PINx, and Pxn should all have the same letter for "x" *** #define ENC3_PHASEB_PORT PORTC // PhaseB port register #define ENC3_PHASEB_DDR DDRC // PhaseB port direction register #define ENC3_PHASEB_PORTIN PINC // PhaseB port input register #define ENC3_PHASEB_PIN PC3 // PhaseB port pin #endif