Arduino使用所有端口ATMega2560

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino使用所有端口ATMega2560相关的知识,希望对你有一定的参考价值。

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

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

非常感谢!

答案

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

你实际上需要创建自己的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

并输入一个条目:

###########################################################################
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 **

以上是关于Arduino使用所有端口ATMega2560的主要内容,如果未能解决你的问题,请参考以下文章

Arduino的A0~A5模拟端口。可以作为数字端口输入输出使用吗?

谁有uno和2560的尺寸图,要做个板固定住arduino

Atmega2560 中的圆形 LED 回路使用组装

删除 Arduino 上的引导加载程序

在 Atmel AVR studio 中使用 ATMega2560 读取 RC PWM 信号

Arduino基本数据类型