ATtiny88初体验(一):点灯

最近逛淘宝时,发现一块ATtiny88核心板(MH-ET LIVE Tiny88)用完红包后只剩4块钱了,果断下单,准备好好把玩一番。

MH-ET LIVE Tiny88介绍

这块核心板使用的MCU型号是ATtiny88,主要参数如下:

资源 主要特征
Flash 8KB
SRAM 512B
频率 12MHz
EEPROM 64B
定时器 1个8bit,1个16bit
PWM 2通道
ADC 8通道10bit
比较器 1
GPIO 28
SPI 1
TWI 1
看门狗 1
电压 0~4MHz @ 1.8~5.5V
0~8MHz @ 2.7~5.5V
0~12MHz @ 4.5~5.5V

MH-ET LIVE Tiny88的引脚图如下:

板子共引出了26个IO口,少了的2个IO口是PB6和PC6,其中PB6没有引出,可以通过熔丝位将RST引脚配置为PC6。另外,1号和2号引脚是连接到USB口的,供VUSB使用,最好不要用作他用。

值得注意的是,板子搭载的晶振频率为16MHz,已经超过了ATtiny88手册里标明的最大工作频率12MHz,超频了33%。

熔丝位

ATtiny88拥有3个字节的熔丝位,和一般的逻辑相反,熔丝位中的 1 表示未编程(禁止), 0 表示已编程(启用)。修改熔丝位时需要谨慎再谨慎,否则可能造成锁死单片机(俗称变砖)。

熔丝扩展位

  • SELFPRGEN :设为 0 表示启用自编程( SPM 指令)

熔丝高位

  • RSTDISBL :设为 0 时将复位引脚用作普通IO(PC6),修改需谨慎!
  • DWEN :设为 0 时启用调试接口
  • SPIEN :设为 0 时可以通过SPI下载程序和数据,修改需谨慎!
  • WDTON :设为 0 时将总是启用看门狗
  • EESAVE :设为 0 时擦除芯片时会保留EEPROM中的内容
  • BODLEVEL[2:0] :设置欠压检测等级

熔丝低位

  • CKDIV8 :设为 0 时系统时钟会进行8分频
  • CKOUT :设为 0 时启用时钟输出(通过CLKO引脚)
  • SUT[1:0] :设置启动时间

  • CKSEL[1:0] :设置时钟源

修改熔丝位

在Windows环境下,可以借助ProgISP软件查看和修改熔丝位。

通过USBasp将核心板与电脑连接,打开ProgISP软件,在“Select Chip”下选择“ATtiny88”,点击“RD”按钮,如果连接没有问题,会提示“读出ID成功”。

点击“自动”按钮旁边的“...”按钮。

在弹出的小窗口中点击下方“位配置方式”标签页中的“读出”按钮,提示“熔丝位读出成功”。

点击需要修改熔丝位即可切换该位的值,设置完毕后点击“位配置方式”中的“写入”按钮,提示“熔丝位写入成功”。

至此,便完成了熔丝位的修改。

点灯

“点灯”程序就是单片机开发中的“Hello World!”,借助它,可以大致体会单片机开发的完整流程。

寄存器介绍

在ATtiny88中,每个IO口都可作为输入或者输出,并且都有一个独立可控的内部上拉电阻。

与IO相关的寄存器主要有 MCUCRPORTCRPORTxDDRxPINx

  • PUD :写 1 禁止内部上拉电阻(全局)

  • BBMx :写 1 使能对应端口的Break-Before-Make模式
  • PUDx :写 1 禁止对应端口的内部上拉电阻

PORTx 寄存器存放输出数据, PINx 寄存器存放输入数据, DDRx 寄存器用于配置端口方向, 0 表示输入, 1 表示输出。

当IO配置为输入模式时,向 PORTx 寄存器中写 1 表示启用内部上拉电阻。

不管是输入还是输出模式,向 PINx 寄存器中写 1 都表示翻转 PORTx 寄存器中对应位的状态。

IO口的具体配置组合如下所示:

代码

代码文件的整体结构如下所示:

.
├── Makefile
├── inc
└── src
└── main.c

为了方便编译,在根目录下编写一个 Makefile 文件:

CC = avr-gcc
CP = avr-objcopy
SZ = avr-size
DP = avr-objdump
AVRDUDE = avrdude TARGET = led
BUILD_DIR = build
C_SOURCES = src/main.c
C_INCLUDES = -Iinc
C_DEFS = -DF_CPU=16000000 LIBS = -lc -lm
LIBDIRS =
MCU = -mmcu=attiny88
OPT = -Og
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -g -std=gnu99 -Wall -fdata-sections -ffunction-sections
LDFLAGS = $(MCU) $(LIBS) $(LIBDIRS) -Wl,--gc-sections -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref PROGRAMMER_ID = usbasp
PARTNO = t88
PORT =
BAUDRATE = OBJECTS = $(addprefix $(BUILD_DIR)/,$(C_SOURCES:.c=.o))
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" -Wa,-adhmls=$(@:%.o=%.lst)
AVRDUDE_FLAGS = -c $(PROGRAMMER_ID) -p $(PARTNO)
ifneq ($(PORT),)
AVRDUDE_FLAGS += -P $(PORT)
endif
ifneq ($(BAUDRATE),)
AVRDUDE_FLAGS += -b $(BAUDRATE)
endif .PHONY: all clean flash
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).txt $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
$(CC) -c $(CFLAGS) -o $@ $< $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
$(SZ) $@ $(BUILD_DIR)/$(TARGET).txt: $(BUILD_DIR)/$(TARGET).elf
$(DP) -h -S $< > $@ $(BUILD_DIR)/$(TARGET).hex: $(BUILD_DIR)/$(TARGET).elf
$(CP) -O ihex $< $@ $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf
$(CP) -O binary -S $< $@ $(BUILD_DIR):
mkdir -p $(sort $(dir $(OBJECTS))) clean:
rm -rf $(BUILD_DIR) flash: $(BUILD_DIR)/$(TARGET).hex
$(AVRDUDE) $(AVRDUDE_FLAGS) -U flash:w:$<:i -include $(OBJECTS:%.o=%.d)

Makefile 文件中的 TARGET 变量指定目标名称, BUILD_DIR 变量指定编译目录, C_SOURCES 指定C源文件, C_DEFS 指定C宏定义, C_INCLUDES 指定头文件目录。

MH-ET LIVE Tiny88板载的LED连接到0号引脚,对应的是PD0,高电平点亮。在 src 目录下新建一个 main.c 源文件,输入如下代码,实现:设置PD0位输出模式,然后每隔一段时间翻转PD0的输出。

#include <stdint.h>
#include <avr/io.h> static void delay(void); int main(void)
{
DDRD |= 0x01;
PORTD |= 0x01; for (;;) {
PIND = 0x01;
delay();
}
} static void delay(void)
{
for (volatile uint32_t i = 0; i < 0x20000; i++);
}

编译代码:

make

将在 build 文件夹下生成ELF/HEX/BIN文件。

下载

/etc/udev/rules.d/ 目录下创建一个USBasp的规则文件 99-usbasp.rules ,内容如下:

ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE="664", GROUP="plugdev"

安装 avrdude 软件:

sudo apt install avrdude

连接USBasp,进行下载:

make flash

上述命令实际上执行的是:

avrdude -c usbasp -p t88 -U flash:w:build/led.hex:i

avrdude 中常用的选项如下

选项 含义 取值
-c programmer-id 指定编程器 usbasp :USBasp
arduino :ArduinoISP
-p partno 指定单片机 t88 :ATtiny88
m328p:ATmega328P
m32u4 :ATmega32U4
-P port 指定端口
-b baudrate 指定波特率
-U memtype:op:filename[:format] 指定执行的操作
memtype :内存区域
op :操作
filename :文件名
format :文件格式
memtype 的取值:
flash :Flash ROM
eeprom :EEPROM
efuse / hfuse / lfuse :扩展/高/低熔丝位
op 的取值:
r :读
w :写
v :校验
format 的取值:
i :Intel Hex
r :raw binary
e :ELF

输出如下信息表示下载成功:

参考资料

  1. ATtiny88 Datasheet
  2. ProgISP
  3. AVRDUDE User Manual

ATtiny88初体验(一):点灯的更多相关文章

  1. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  2. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  3. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  4. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  5. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  8. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  9. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

  10. Docker初体验

    ## Docker初体验 安装 因为我用的是mac,所以安装很简单,下载dmg下来之后拖拽安装即可完成. 需要注意的就是由于之前的docker是基于linux开发,不支持mac,所以就出现了docke ...

随机推荐

  1. Selenium - 浏览器配置(3) - 沙盒模式/不打开浏览器运行

    Selenium - 浏览器配置 沙盒模式 需要在Linux环境中运行,但不需要打开浏览器进行UI测试,可以加载selenium的无痕模式: 如果使用沙盒模式运行selenium,则部分seleniu ...

  2. LLM探索:环境搭建与模型本地部署

    前言 最近一直在炼丹(搞AIGC这块),突然发现业务代码都索然无味了- 上次发了篇AI画图的文章,ChatGPT虽然没法自己部署,但现在开源的LLM还是不少的,只要有一块差不多的显卡,要搞个LLM本地 ...

  3. .Net8顶级技术:边界检查之IR解析(慎入)

    前言 C#这种语言之所以号称安全的,面向对象的语言.这个安全两个字可不是瞎叫的哦.因为JIT会检查任何可能超出分配范围的数值,以便使其保持在安全边界内.这里有两个概念,其一边界检查,其二IR解析.后者 ...

  4. java通用xls导出设计

    背景 在后端日常开发中总会有各种各样的导出需求,实现这个需求必须要解决的两个问题: 1.表头不能直接使用字段名,需要显示为中文,甚至还需要考虑国际化 2.值需要翻译,比如性别.状态之类的字段 现状 现 ...

  5. Elasticsearch 之 join 关联查询及使用场景

    在Elasticsearch这样的分布式系统中执行类似SQL的join连接是代价是比较大的,然而,Elasticsearch却给我们提供了基于水平扩展的两种连接形式 .这句话摘自Elasticsear ...

  6. 自动化测试-基础知识—Bash基础

    Bash 在 Bash 中,美元符号 $ 可以用于引用变量或者表达式的值.Bash 中的变量并不需要事先声明,而是在第一次赋值时自动创建.基于这个特性,我们可以通过给变量名加上 $ 的方式来引用它的值 ...

  7. ODOO13 之九:Odoo 13开发之外部 API – 集成第三方系统

    Odoo 13开发之外部 API – 集成第三方系统 Odoo 服务器端带有外部 API,可供网页客户端和其它客户端应用使用.本文中我们将学习如何在我们的客户端程序中使用 Odoo 的外部 API.为 ...

  8. 2个场景实例讲解GaussDB(DWS)基表统计信息估算不准的处理方案

    摘要:通过2个实例场景讲解GaussDB(DWS)运维解决方案. 本文分享自华为云社区<GaussDB(DWS)运维 -- 基表统计信息估算不准的常见场景及处理方案>,作者:譡里个檔. 场 ...

  9. Win10安装cuda11.0+cudnn8.0(这是配套的)

    首先你要知道你的电脑显卡能支持的cuda最大版本: 如下下图所示,支持最大版本为cuda11.0.228版本! 一.下载 Win10 64 位 下载cudnn8.0 链接:https://pan.ba ...

  10. ChatGPT使用案例,助你快速上手,做事事半功倍

    ChatGPT介绍 首先我们来看一下chat-gpt自己的介绍: ChatGPT的发展历程 2015年,OpenAI成立,致力于研究和开发人工智能技术.在成立初期,OpenAI的创始人之一Elon M ...