一板网电子技术论坛

风筝
发表于: 2018-8-27 16:27:27 | 显示全部楼层

本文文章主要介绍使用Atmel SAM4S Xplained Pro评估套件创建工程的基本过程和技术。


所需的硬件/软件

    SAM4S Xplained Pro入门套件

●    Atmel Studio


开发板与定制电路板

购买开发套件与设计和组装自己的PCB之间的差距还是挺大的。对于前者,您只需下个订单,几天后您就能拿到经过专业设计、全面测试的专业组装单元,可以满足您的最新应用需求。对于后者,您需要花费数小时的精心设计和PCB布局,然后进行劳动密集的PCB装配,当然总是有可能成品板部分甚至大多数不起作用。不过,我喜欢设计自己的PCB,原因之一是我可以使用更多种类的功能。因此,如果开发板提供了通常的优势,同时提供了一个可以方便评估的限制较少的功能,那么我对开发板特别满意。如果您有同样的感觉,我认为您会喜欢Atmel的Xplained Pro开发套件。


入门套件

在这个项目中,我们将使用SAM4S Xplained Pro开发板。MCU电路板(又名“评估套件”)本身并不那么令人印象深刻;令人印象深刻的部分是众多Xplained Pro扩展(也称为“附加”)模块,您可以将其插入处理器板上的一个扩展连接器。您可以在此处获取Xplained Pro评估套件和扩展模块的列表。如果您购买SAM4S Xplained Pro入门套件,您将获得ATSAM4SD32C微控制器的开发板以及三个扩展模块:一个带有OLED显示屏以及一些LED和按钮;一个(包括)光传感器、温度传感器、低通滤波器和装有2 GB microSD卡的microSD卡连接器(该模块称为“I / O板”);还有一个具有相当宽敞的通孔原型区域,并附有标记的信号插头。

OLEDT1_photo1_2.jpg


该项目仅需要OLED扩展模块,但如果您想探测信号,原型模块上的标记标题很方便。


ASF软件框架

对于像我这样,通过使用汇编语言编程8051来开始他们的职业生涯,Atmel软件框架(ASF)是一个非常广泛的软件库,使得微控制器项目开发看起来几乎非常容易。然而,所有这些预先打包的、超级抽象的固件都有自己的缺陷和困难,因此谨慎对待。此外,您可能已经注意到工程从未真正变得容易,因为系统要求与我们工具的复杂性和效率成比例。。


因此,无论如何,使用Atmel器件开发项目的关键步骤是熟悉ASF。到本文结束时,您应该对ASF是什么以及如何使用它有一个很好的理解;现在我只提一些重点:

●    ASF功能不仅包括微控制器本身,还包括开发板和外部第三方设备,例如OLED板上的OLED显示屏和I / O板上的温度传感器(以及其他未列入的其他设备)此入门套件 - 以太网收发器、LCD显示器、640×480 CMOS图像传感器、热释电红外传感器......)

●    ASF集成到Atmel Studio(可以免费下载)。因此,将ASF功能集成到您的项目中不需要额外下载或单独的程序-ASF配置、代码开发、编译和调试都在Atmel Studio中进行。

●    引用Atmel的话说:“ASF的目的是提供由Atmel专家开发的一系列经过验证的驱动程序和代码模块,以减少客户的设计时间。”“ASF是设计用于评估、原型设计、设计和生产阶段。“这里的重点是Atmel认为ASF非常可靠 - 您可以在原型设计阶段依赖它,甚至可以自信地包含在生产代码中。


详细步骤

不用多说,让我们仔细研究创建一个新的SAM4S Xplained Pro应用程序的过程。这里的目标是一个简单的“视频游戏”,利用OLED扩展板上的两个组件,即OLED显示屏和按钮。我们将介绍本文的初始步骤,然后在第2部分中开发其余功能。

1.    打开Atmel Studio。

2.    将OLED扩展板连接到SAM4S板上的EXT3接头,然后将USB电缆从SAM4S板上的“DEBUG USB”接口连接到PC的一个USB端口。当Atmel Studio识别评估套件时,您将看到以下界面。

OLEDT1_capture1.jpg

3.    转到File → New → Project

4.    选择“GCC C ASF Board Project”。

OLEDT1_capture2.jpg

5.    键入项目的名称,然后单击“确定”。

OLEDT1_capture3.jpg

6.    选择“Select By Board”并向下滚动到“SAM4S Xplained Pro - ATSAM4SD32C。”如滚动条中的深灰色矩形所示,它有点过了一半。单击确定。

OLEDT1_capture4.jpg

7.    当Atmel Studio完成项目创建后,查看最右侧,您将看到“解决方案资源管理器”窗格中列出的新项目。

8.    下图显示了“src”目录中包含的文件夹和文件。您会注意到大多数文件的右下角都有深灰色方块。这表示该文件尚未修改。修改文件后,方块变为红色。

OLEDT1_capture5.jpg

9.    看一下“main.c”文件。它已经有了一些信息性注释和一个极少的代码框架来帮助您入门。您可以删除main()函数中的所有内容。

10.    现在转到Project→ASF Wizard。在左上角,选择新项目(在本例中为OLEDTargetPractice)。 “Select Modules”窗格显示项目中已包含哪些ASF模块。这些是Atmel Studio默认包含的模块。由于我们将使用OLED显示器,我们需要为OLED接口添加ASF模块。

OLEDT1_capture6.jpg


11.    向下滚动并选择“SSD1306 OLED控制器(组件)”模块。在窗口底部,单击“Add >>”,然后单击“应用”;将弹出一个对话框,为您提供“所选选项的操作摘要。”单击“确定”。 Atmel Studio会自动修改项目文件,以确保将此ASF模块正确地合并到项目中。我们不需要为此项目添加任何模块,因此您可以关闭“ASF向导”窗口。

OLEDT1_capture7.jpg


最后,我们准备编写一些代码

以下代码摘录显示了该部分项目的main()函数。复制并粘贴到您的main()函数中。有关详细信息,请参阅代码中的注释部分。

  1. int main (void)
  2. {
  3.         char DisplayString[] = "This is an OLED test.";
  4.         char DisplayChar[2];
  5.         uint8_t DisplayString_Length = 21;
  6.         uint8_t n;
  7.         
  8.         //clock configuration and initialization
  9.         sysclk_init();
  10.         
  11.         /*Disable the watchdog timer and configure/initialize
  12.         port pins connected to various components incorporated
  13.         into the SAM4S Xplained development platform, e.g., the
  14.         NAND flash, the OLED interface, the LEDs, the SW0 pushbutton.*/  
  15.         board_init();

  16.         //initialize SPI and the OLED controller
  17.         ssd1306_init();
  18.         
  19.         /*The second character in this two-character array must be zero
  20.         so that the ssd1306_write_text() function correctly interprets the
  21.         array as a one-character string.*/
  22.         DisplayChar[1] = 0;
  23.         
  24.         while (1)
  25.         {
  26.                 /*Clear the OLED screen, then set the cursor to the
  27.                 top-left character position.*/
  28.                 ssd1306_clear();
  29.                 ssd1306_set_page_address(0);
  30.                 ssd1306_set_column_address(0);
  31.                
  32.                 for (n = 0; n < DisplayString_Length; n++)
  33.                 {
  34.                         /*Copy the current character of DisplayString
  35.                         to the one-character array DisplayChar.*/
  36.                         DisplayChar[0] = DisplayString[n];
  37.                         
  38.                         //display the single character
  39.                         ssd1306_write_text(DisplayChar);
  40.                         
  41.                         //the ASF includes handy delay functions
  42.                         delay_ms(400);
  43.                 }
  44.         }
  45. }
复制代码

硬件配置怎么样?

ASF框架生成配置文件,您可以根据应用程序要求方便地修改。

OLEDT1_capture8.jpg


ASF函数查看这些文件中的信息,以确定如何精确配置硬件。例如,“conf_clock.h”文件包括与系统时钟源,系统时钟预分频器和PLL(锁相环)设置相关的预处理器定义列表。您可以通过注释/取消注释某些预处理器定义或修改定义来“配置”此时钟硬件。然后,您所要做的就是调用sysclk_init()函数,该函数将合并您的首选项,因为它会处理所有时钟配置细节。

让我们继续修改配置文件,之后我们将能够在OLED上显示文本。

●    在“conf_board.h”中:添加“Enable the OLED screen”定义。

  1. #ifndef CONF_BOARD_H
  2. #define CONF_BOARD_H

  3. // Enable the OLED screen
  4. #define CONF_BOARD_SPI
  5. #define CONF_BOARD_SPI_NPCS1
  6. #define CONF_BOARD_SPI_NPCS2
  7. #define CONF_BOARD_OLED_UG_2832HSWEG04

  8. #endif /* CONF_BOARD_H */
复制代码

●    在“conf_clock.h”中:注释掉“PLL1(B)”定义和“USB Clock Source”定义。该项目不使用PLL1或USB。

  1. #ifndef CONF_CLOCK_H_INCLUDED
  2. #define CONF_CLOCK_H_INCLUDED

  3. // ===== System Clock (MCK) Source Options
  4. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_RC
  5. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_XTAL
  6. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_BYPASS
  7. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_4M_RC
  8. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_8M_RC
  9. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_12M_RC
  10. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_XTAL
  11. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_BYPASS
  12. #define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLLACK
  13. //#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLLBCK

  14. // ===== System Clock (MCK) Prescaler Options   (Fmck = Fsys / (SYSCLK_PRES))
  15. //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_1
  16. #define CONFIG_SYSCLK_PRES          SYSCLK_PRES_2
  17. //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_4
  18. //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_8
  19. //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_16
  20. //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_32
  21. //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_64
  22. //#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_3

  23. // ===== PLL0 (A) Options   (Fpll = (Fclk * PLL_mul) / PLL_div)
  24. // Use mul and div effective values here.
  25. #define CONFIG_PLL0_SOURCE          PLL_SRC_MAINCK_XTAL
  26. #define CONFIG_PLL0_MUL             20
  27. #define CONFIG_PLL0_DIV             1

  28. // ===== PLL1 (B) Options   (Fpll = (Fclk * PLL_mul) / PLL_div)
  29. // Use mul and div effective values here.
  30. //#define CONFIG_PLL1_SOURCE          PLL_SRC_MAINCK_XTAL
  31. //#define CONFIG_PLL1_MUL             16
  32. //#define CONFIG_PLL1_DIV             2

  33. // ===== USB Clock Source Options   (Fusb = FpllX / USB_div)
  34. // Use div effective value here.
  35. //#define CONFIG_USBCLK_SOURCE        USBCLK_SRC_PLL0
  36. //#define CONFIG_USBCLK_SOURCE        USBCLK_SRC_PLL1
  37. //#define CONFIG_USBCLK_DIV           2
复制代码


●    在“conf_spi_master.h”中:无需更改。

●    在“conf_ssd1306.h”中:删除“Support and FAQ . . .”注释下的所有内容,使用以下内容代替,这取自Atmel的示例代码:

  1. /*
  2. * Support and FAQ: visit Atmel Support
  3. */

  4. #ifndef CONF_SSD1306_H_INCLUDED
  5. #define CONF_SSD1306_H_INCLUDED

  6. // Interface configuration for SAM4S Xplained Pro
  7. #define SSD1306_SPI_INTERFACE
  8. #define SSD1306_SPI SPI

  9. #define SSD1306_DC_PIN       UG_2832HSWEG04_DATA_CMD_GPIO
  10. #define SSD1306_RES_PIN      UG_2832HSWEG04_RESET_GPIO
  11. #define SSD1306_CS_PIN       UG_2832HSWEG04_SS

  12. /* Minimum clock period is 50ns@3.3V -> max frequency is 20MHz */
  13. #define SSD1306_CLOCK_SPEED          UG_2832HSWEG04_BAUDRATE
  14. #define SSD1306_DISPLAY_CONTRAST_MAX 40
  15. #define SSD1306_DISPLAY_CONTRAST_MIN 30

  16. #endif /* CONF_SSD1306_H_INCLUDED */
复制代码

  现在我们准备运行令人振奋的文本显示程序。单击“Start Without Debugging”按钮(即填充的绿色三角形旁边的未填充绿色三角形),如果一切顺利,则功能将与我们预计的一样。


总结

现在您熟悉使用Atmel Studio创建自己的项目所需的基本步骤,而不是或多或少地盲目地修改其中一个示例项目。在下一篇文章中,我们将完成一款原始的视频游戏,在此过程中,我们将学习如何与OLED扩展板上的显示模块和按钮进行连接。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 27 | 回复: 28



Archiver|手机版|小黑屋|

GMT+8, 2018-9-20 14:37 , Processed in 0.046874 second(s), 30 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表