Arduino使用所有端口ATMega2560

时间:2014-01-28 21:42:29

标签: arduino atmega

我用Atmega2560制作了自己的PCB。错误的是,我在Arduino不使用的引脚上组装了一些输入和输出。虽然我仍然可以将它们与Port Manipulation一起使用,但我想手动将它们添加到pins_arduino.h中,这样我就可以使用Arrays实现更好的操作。

我已经尝试过,但它不起作用。有人可以指导我吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

  

我已经尝试过,但它不起作用。有人可以指导我吗?

您实际上需要创建自己的Arduino目标。我们会将$ARDUINO视为您的arduino安装的根目录(/usr/share/arduino/Applications/Arduino.app/Contents/Resources/Java/或Windows上的任何内容......)。

请执行以下步骤:

  1. $ARDUINO/hardware中将完整的arduino目录复制到您可以自由调用的新目录中。通常使用您的公司或群组的名称,我们会将其称为example以用于示例;
  2. $ARDUINO/hardware/example/variants目录中,您需要复制mega目录并使用您的主席名称重命名,为了示例的目的,将其称为thing,您可以安全地删除所有其他变体(因为它们仍在arduino变体目录中!);
  3. 现在您可以编辑$ARDUINO/hardware/example/variants/thing/pins_arduino.h,其中arduino引脚编号是每个数组的索引,并且每个数组中的每个索引都定义了PIN的参数。在我的帖子结束时,我粘贴了该标题的相关部分。
  4. 现在您可以修改$ARDUINO/hardware/boards.txt
  5. 并输入一个条目:

    ###########################################################################
    thing.name=Your full product name
    
    thing.upload.protocol=wiring
    thing.upload.maximum_size=258048
    thing.upload.speed=115200
    
    thing.bootloader.low_fuses=0xFF      // double check that those values are the one you need for the fuses
    thing.bootloader.high_fuses=0xD8
    thing.bootloader.extended_fuses=0xFD
    thing.bootloader.path=stk500v2
    thing.bootloader.file=stk500boot_v2_mega2560.hex
    thing.bootloader.unlock_bits=0x3F
    thing.bootloader.lock_bits=0x0F
    
    thing.build.mcu=atmega2560
    thing.build.f_cpu=16000000L
    thing.build.core=arduino
    thing.build.variant=thing
    ###########################################################################
    

    现在你应该全力以赴! (如果我没有忘记的话:-s)

    这里是pins_arduino.h的相关部分:

    const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
        // PORTLIST             
        // -------------------------------------------          
        PE  , // PE 0 ** 0 ** USART0_RX     
        PE  , // PE 1 ** 1 ** USART0_TX     
        PE  , // PE 4 ** 2 ** PWM2  
        PE  , // PE 5 ** 3 ** PWM3  
        PG  , // PG 5 ** 4 ** PWM4  
        PE  , // PE 3 ** 5 ** PWM5  
        PH  , // PH 3 ** 6 ** PWM6  
        PH  , // PH 4 ** 7 ** PWM7  
        PH  , // PH 5 ** 8 ** PWM8  
        PH  , // PH 6 ** 9 ** PWM9  
        PB  , // PB 4 ** 10 ** PWM10        
        PB  , // PB 5 ** 11 ** PWM11        
        PB  , // PB 6 ** 12 ** PWM12        
        PB  , // PB 7 ** 13 ** PWM13        
        PJ  , // PJ 1 ** 14 ** USART3_TX    
        PJ  , // PJ 0 ** 15 ** USART3_RX    
        PH  , // PH 1 ** 16 ** USART2_TX    
        PH  , // PH 0 ** 17 ** USART2_RX    
        PD  , // PD 3 ** 18 ** USART1_TX    
        PD  , // PD 2 ** 19 ** USART1_RX    
        PD  , // PD 1 ** 20 ** I2C_SDA      
        PD  , // PD 0 ** 21 ** I2C_SCL      
        PA  , // PA 0 ** 22 ** D22  
        PA  , // PA 1 ** 23 ** D23  
        PA  , // PA 2 ** 24 ** D24  
        PA  , // PA 3 ** 25 ** D25  
        PA  , // PA 4 ** 26 ** D26  
        PA  , // PA 5 ** 27 ** D27  
        PA  , // PA 6 ** 28 ** D28  
        PA  , // PA 7 ** 29 ** D29  
        PC  , // PC 7 ** 30 ** D30  
        PC  , // PC 6 ** 31 ** D31  
        PC  , // PC 5 ** 32 ** D32  
        PC  , // PC 4 ** 33 ** D33  
        PC  , // PC 3 ** 34 ** D34  
        PC  , // PC 2 ** 35 ** D35  
        PC  , // PC 1 ** 36 ** D36  
        PC  , // PC 0 ** 37 ** D37  
        PD  , // PD 7 ** 38 ** D38  
        PG  , // PG 2 ** 39 ** D39  
        PG  , // PG 1 ** 40 ** D40  
        PG  , // PG 0 ** 41 ** D41  
        PL  , // PL 7 ** 42 ** D42  
        PL  , // PL 6 ** 43 ** D43  
        PL  , // PL 5 ** 44 ** D44  
        PL  , // PL 4 ** 45 ** D45  
        PL  , // PL 3 ** 46 ** D46  
        PL  , // PL 2 ** 47 ** D47  
        PL  , // PL 1 ** 48 ** D48  
        PL  , // PL 0 ** 49 ** D49  
        PB  , // PB 3 ** 50 ** SPI_MISO     
        PB  , // PB 2 ** 51 ** SPI_MOSI     
        PB  , // PB 1 ** 52 ** SPI_SCK      
        PB  , // PB 0 ** 53 ** SPI_SS       
        PF  , // PF 0 ** 54 ** A0   
        PF  , // PF 1 ** 55 ** A1   
        PF  , // PF 2 ** 56 ** A2   
        PF  , // PF 3 ** 57 ** A3   
        PF  , // PF 4 ** 58 ** A4   
        PF  , // PF 5 ** 59 ** A5   
        PF  , // PF 6 ** 60 ** A6   
        PF  , // PF 7 ** 61 ** A7   
        PK  , // PK 0 ** 62 ** A8   
        PK  , // PK 1 ** 63 ** A9   
        PK  , // PK 2 ** 64 ** A10  
        PK  , // PK 3 ** 65 ** A11  
        PK  , // PK 4 ** 66 ** A12  
        PK  , // PK 5 ** 67 ** A13  
        PK  , // PK 6 ** 68 ** A14  
        PK  , // PK 7 ** 69 ** A15  
        // added stuff
        PD  , // PD 4 ** 70 ** D70
        PD  , // PD 5 ** 71 ** D71
        PD  , // PD 6 ** 72 ** D72
        PG  , // PG 3 ** 73 ** D73
        PG  , // PG 4 ** 74 ** D74
        PH  , // PH 2 ** 75 ** D75
        PH  , // PH 7 ** 76 ** D76
        PJ  , // PJ 2 ** 77 ** D77
        PJ  , // PJ 3 ** 78 ** D78
        PJ  , // PJ 4 ** 79 ** D79
        PJ  , // PJ 5 ** 80 ** D80
        PJ  , // PJ 6 ** 81 ** D81
        PJ  , // PJ 7 ** 82 ** D82
        PE  , // PE 6 ** 83 ** D83
        PE  , // PE 7 ** 84 ** D84
    };
    
    const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
        // PIN IN PORT          
        // -------------------------------------------          
        _BV( 0 )    , // PE 0 ** 0 ** USART0_RX     
        _BV( 1 )    , // PE 1 ** 1 ** USART0_TX     
        _BV( 4 )    , // PE 4 ** 2 ** PWM2  
        _BV( 5 )    , // PE 5 ** 3 ** PWM3  
        _BV( 5 )    , // PG 5 ** 4 ** PWM4  
        _BV( 3 )    , // PE 3 ** 5 ** PWM5  
        _BV( 3 )    , // PH 3 ** 6 ** PWM6  
        _BV( 4 )    , // PH 4 ** 7 ** PWM7  
        _BV( 5 )    , // PH 5 ** 8 ** PWM8  
        _BV( 6 )    , // PH 6 ** 9 ** PWM9  
        _BV( 4 )    , // PB 4 ** 10 ** PWM10        
        _BV( 5 )    , // PB 5 ** 11 ** PWM11        
        _BV( 6 )    , // PB 6 ** 12 ** PWM12        
        _BV( 7 )    , // PB 7 ** 13 ** PWM13        
        _BV( 1 )    , // PJ 1 ** 14 ** USART3_TX    
        _BV( 0 )    , // PJ 0 ** 15 ** USART3_RX    
        _BV( 1 )    , // PH 1 ** 16 ** USART2_TX    
        _BV( 0 )    , // PH 0 ** 17 ** USART2_RX    
        _BV( 3 )    , // PD 3 ** 18 ** USART1_TX    
        _BV( 2 )    , // PD 2 ** 19 ** USART1_RX    
        _BV( 1 )    , // PD 1 ** 20 ** I2C_SDA      
        _BV( 0 )    , // PD 0 ** 21 ** I2C_SCL      
        _BV( 0 )    , // PA 0 ** 22 ** D22  
        _BV( 1 )    , // PA 1 ** 23 ** D23  
        _BV( 2 )    , // PA 2 ** 24 ** D24  
        _BV( 3 )    , // PA 3 ** 25 ** D25  
        _BV( 4 )    , // PA 4 ** 26 ** D26  
        _BV( 5 )    , // PA 5 ** 27 ** D27  
        _BV( 6 )    , // PA 6 ** 28 ** D28  
        _BV( 7 )    , // PA 7 ** 29 ** D29  
        _BV( 7 )    , // PC 7 ** 30 ** D30  
        _BV( 6 )    , // PC 6 ** 31 ** D31  
        _BV( 5 )    , // PC 5 ** 32 ** D32  
        _BV( 4 )    , // PC 4 ** 33 ** D33  
        _BV( 3 )    , // PC 3 ** 34 ** D34  
        _BV( 2 )    , // PC 2 ** 35 ** D35  
        _BV( 1 )    , // PC 1 ** 36 ** D36  
        _BV( 0 )    , // PC 0 ** 37 ** D37  
        _BV( 7 )    , // PD 7 ** 38 ** D38  
        _BV( 2 )    , // PG 2 ** 39 ** D39  
        _BV( 1 )    , // PG 1 ** 40 ** D40  
        _BV( 0 )    , // PG 0 ** 41 ** D41  
        _BV( 7 )    , // PL 7 ** 42 ** D42  
        _BV( 6 )    , // PL 6 ** 43 ** D43  
        _BV( 5 )    , // PL 5 ** 44 ** D44  
        _BV( 4 )    , // PL 4 ** 45 ** D45
        _BV( 3 )    , // PL 3 ** 46 ** D46  
        _BV( 2 )    , // PL 2 ** 47 ** D47  
        _BV( 1 )    , // PL 1 ** 48 ** D48  
        _BV( 0 )    , // PL 0 ** 49 ** D49  
        _BV( 3 )    , // PB 3 ** 50 ** SPI_MISO     
        _BV( 2 )    , // PB 2 ** 51 ** SPI_MOSI     
        _BV( 1 )    , // PB 1 ** 52 ** SPI_SCK      
        _BV( 0 )    , // PB 0 ** 53 ** SPI_SS       
        _BV( 0 )    , // PF 0 ** 54 ** A0   
        _BV( 1 )    , // PF 1 ** 55 ** A1   
        _BV( 2 )    , // PF 2 ** 56 ** A2   
        _BV( 3 )    , // PF 3 ** 57 ** A3   
        _BV( 4 )    , // PF 4 ** 58 ** A4   
        _BV( 5 )    , // PF 5 ** 59 ** A5   
        _BV( 6 )    , // PF 6 ** 60 ** A6   
        _BV( 7 )    , // PF 7 ** 61 ** A7   
        _BV( 0 )    , // PK 0 ** 62 ** A8   
        _BV( 1 )    , // PK 1 ** 63 ** A9   
        _BV( 2 )    , // PK 2 ** 64 ** A10  
        _BV( 3 )    , // PK 3 ** 65 ** A11  
        _BV( 4 )    , // PK 4 ** 66 ** A12  
        _BV( 5 )    , // PK 5 ** 67 ** A13  
        _BV( 6 )    , // PK 6 ** 68 ** A14  
        _BV( 7 )    , // PK 7 ** 69 ** A15  
        // added stuff
        _BV( 4 )    , // PD 4 ** 70 ** D70
        _BV( 5 )    , // PD 5 ** 71 ** D71
        _BV( 6 )    , // PD 6 ** 72 ** D72
        _BV( 3 )    , // PG 3 ** 73 ** D73
        _BV( 4 )    , // PG 4 ** 74 ** D74
        _BV( 2 )    , // PH 2 ** 75 ** D75
        _BV( 7 )    , // PH 7 ** 76 ** D76
        _BV( 2 )    , // PJ 2 ** 77 ** D77
        _BV( 3 )    , // PJ 3 ** 78 ** D78
        _BV( 4 )    , // PJ 4 ** 79 ** D79
        _BV( 5 )    , // PJ 5 ** 80 ** D80
        _BV( 6 )    , // PJ 6 ** 81 ** D81
        _BV( 7 )    , // PJ 7 ** 82 ** D82
        _BV( 6 )    , // PE 6 ** 83 ** D83
        _BV( 7 )    , // PE 7 ** 84 ** D84
    };
    
    const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
        // TIMERS               
        // -------------------------------------------          
        NOT_ON_TIMER    , // PE 0 ** 0 ** USART0_RX     
        NOT_ON_TIMER    , // PE 1 ** 1 ** USART0_TX     
        TIMER3B , // PE 4 ** 2 ** PWM2  
        TIMER3C , // PE 5 ** 3 ** PWM3  
        TIMER0B , // PG 5 ** 4 ** PWM4  
        TIMER3A , // PE 3 ** 5 ** PWM5  
        TIMER4A , // PH 3 ** 6 ** PWM6  
        TIMER4B , // PH 4 ** 7 ** PWM7  
        TIMER4C , // PH 5 ** 8 ** PWM8  
        TIMER2B , // PH 6 ** 9 ** PWM9  
        TIMER2A , // PB 4 ** 10 ** PWM10        
        TIMER1A , // PB 5 ** 11 ** PWM11        
        TIMER1B , // PB 6 ** 12 ** PWM12        
        TIMER0A , // PB 7 ** 13 ** PWM13        
        NOT_ON_TIMER    , // PJ 1 ** 14 ** USART3_TX    
        NOT_ON_TIMER    , // PJ 0 ** 15 ** USART3_RX    
        NOT_ON_TIMER    , // PH 1 ** 16 ** USART2_TX    
        NOT_ON_TIMER    , // PH 0 ** 17 ** USART2_RX    
        NOT_ON_TIMER    , // PD 3 ** 18 ** USART1_TX    
        NOT_ON_TIMER    , // PD 2 ** 19 ** USART1_RX    
        NOT_ON_TIMER    , // PD 1 ** 20 ** I2C_SDA      
        NOT_ON_TIMER    , // PD 0 ** 21 ** I2C_SCL      
        NOT_ON_TIMER    , // PA 0 ** 22 ** D22  
        NOT_ON_TIMER    , // PA 1 ** 23 ** D23  
        NOT_ON_TIMER    , // PA 2 ** 24 ** D24  
        NOT_ON_TIMER    , // PA 3 ** 25 ** D25  
        NOT_ON_TIMER    , // PA 4 ** 26 ** D26  
        NOT_ON_TIMER    , // PA 5 ** 27 ** D27  
        NOT_ON_TIMER    , // PA 6 ** 28 ** D28  
        NOT_ON_TIMER    , // PA 7 ** 29 ** D29  
        NOT_ON_TIMER    , // PC 7 ** 30 ** D30  
        NOT_ON_TIMER    , // PC 6 ** 31 ** D31  
        NOT_ON_TIMER    , // PC 5 ** 32 ** D32  
        NOT_ON_TIMER    , // PC 4 ** 33 ** D33  
        NOT_ON_TIMER    , // PC 3 ** 34 ** D34  
        NOT_ON_TIMER    , // PC 2 ** 35 ** D35  
        NOT_ON_TIMER    , // PC 1 ** 36 ** D36  
        NOT_ON_TIMER    , // PC 0 ** 37 ** D37  
        NOT_ON_TIMER    , // PD 7 ** 38 ** D38  
        NOT_ON_TIMER    , // PG 2 ** 39 ** D39  
        NOT_ON_TIMER    , // PG 1 ** 40 ** D40  
        NOT_ON_TIMER    , // PG 0 ** 41 ** D41  
        NOT_ON_TIMER    , // PL 7 ** 42 ** D42  
        NOT_ON_TIMER    , // PL 6 ** 43 ** D43  
        TIMER5C , // PL 5 ** 44 ** D44  
        TIMER5B , // PL 4 ** 45 ** D45  
        TIMER5A , // PL 3 ** 46 ** D46  
        NOT_ON_TIMER    , // PL 2 ** 47 ** D47  
        NOT_ON_TIMER    , // PL 1 ** 48 ** D48  
        NOT_ON_TIMER    , // PL 0 ** 49 ** D49  
        NOT_ON_TIMER    , // PB 3 ** 50 ** SPI_MISO     
        NOT_ON_TIMER    , // PB 2 ** 51 ** SPI_MOSI     
        NOT_ON_TIMER    , // PB 1 ** 52 ** SPI_SCK      
        NOT_ON_TIMER    , // PB 0 ** 53 ** SPI_SS       
        NOT_ON_TIMER    , // PF 0 ** 54 ** A0   
        NOT_ON_TIMER    , // PF 1 ** 55 ** A1   
        NOT_ON_TIMER    , // PF 2 ** 56 ** A2   
        NOT_ON_TIMER    , // PF 3 ** 57 ** A3   
        NOT_ON_TIMER    , // PF 4 ** 58 ** A4   
        NOT_ON_TIMER    , // PF 5 ** 59 ** A5   
        NOT_ON_TIMER    , // PF 6 ** 60 ** A6   
        NOT_ON_TIMER    , // PF 7 ** 61 ** A7   
        NOT_ON_TIMER    , // PK 0 ** 62 ** A8   
        NOT_ON_TIMER    , // PK 1 ** 63 ** A9   
        NOT_ON_TIMER    , // PK 2 ** 64 ** A10  
        NOT_ON_TIMER    , // PK 3 ** 65 ** A11  
        NOT_ON_TIMER    , // PK 4 ** 66 ** A12  
        NOT_ON_TIMER    , // PK 5 ** 67 ** A13  
        NOT_ON_TIMER    , // PK 6 ** 68 ** A14  
        NOT_ON_TIMER    , // PK 7 ** 69 ** A15  
        // added stuff
        NOT_ON_TIMER        , // PD 4 ** 70 ** D70
        NOT_ON_TIMER        , // PD 5 ** 71 ** D71
        NOT_ON_TIMER        , // PD 6 ** 72 ** D72
        NOT_ON_TIMER        , // PG 3 ** 73 ** D73
        NOT_ON_TIMER        , // PG 4 ** 74 ** D74
        NOT_ON_TIMER        , // PH 2 ** 75 ** D75
        NOT_ON_TIMER        , // PH 7 ** 76 ** D76
        NOT_ON_TIMER        , // PJ 2 ** 77 ** D77   // PCINT 11
        NOT_ON_TIMER        , // PJ 3 ** 78 ** D78   // PCINT 12
        NOT_ON_TIMER        , // PJ 4 ** 79 ** D79   // PCINT 13
        NOT_ON_TIMER        , // PJ 5 ** 80 ** D80   // PCINT 14
        NOT_ON_TIMER        , // PJ 6 ** 81 ** D81   // PCINT 15
        NOT_ON_TIMER        , // PJ 7 ** 82 ** D82
        NOT_ON_TIMER        , // PE 6 ** 83 ** D83
        NOT_ON_TIMER        , // PE 7 ** 84 ** D84
    };
    

答案 1 :(得分:1)

我为这个项目做了这个。您可以为我的变量,board和pins_arduino.h文件提取我的GITHUB Mega2560。它基本上做了zmo所说的。这表示它适用于IDE 1.5.0,其中1.5.5为平台AVR / SAM添加了一个目录。

您需要了解1.0.51.5.5

在我的新项目中,我使用1.5.5,其中boards.txt支持“uno.build.board = AVR_UNO”标记,使编译自动识别真正容易。

例如,请参阅this discussion about 1.5.5 boards.txt