mini usb micro usbminimosd怎么接图传

查看: 9429|回复: 19
我自认为的APM mini OSD刷bootloader的终极解决办法
泡泡老师用arduino软件的刷miniOSD的方法堪称经典,但是也不完全是万能的,比如我,arduino软件无法识别我买的这种USBASP的接头,每次都是提示找不到USBasp驱动,我摸索了一天终于发现一个我自认为百分百能刷成功的方法,其中大量的要参考泡泡老师的经验。
一、软件准备:
1、arduino1.0.5,要从这个软件中提取bootloader程序,bootloader文件存放路径如图
bootloader位置.jpg (61.63 KB, 下载次数: 242)
22:11 上传
2、progisp1.72,我目前发现只有这个版本的有ATmega328p的芯片可以选择
221800jiz653ee4s45nxri.jpg (66.25 KB, 下载次数: 238)
22:18 上传
二、硬件准备:
1、USBasp下载器一个
2、10P转6P的转接头一个,具体的做法和如何使用请参考泡泡老师的贴子
三、刷bootloader步骤:
1、打开progisp程序如下图依次进行1,2,3,4步骤,但是进行第三步骤选择熔丝位时请看我后面的说明
progisp172.jpg (70.08 KB, 下载次数: 229)
22:20 上传
步骤3配置熔丝位请看下图,直接在下面用英文半角输入低位值FF,高位值DA,扩展位值5,加密值F,
之后记得点击写入,
RSW.jpg (40.27 KB, 下载次数: 240)
22:23 上传
步骤4调入的flush就是上文中提到的bootloader文件
烧写完成之后就大功告成了。
1、烧写成功之后第一次用FTDI232连接miniOSD的时候仍然会提示EEProm is dataout之类的提示,但是点击确认之后再次连接就没有问题了。
虽然看上去好像不是很复杂,但是其中过程让人心酸,因为本人没有一点单片机的常识,所以根本不知道从arduino中该提取那个有用的bootloader文件,甚至不知道arduino中有bootloader文件存在;
另外什么熔丝位之类名词的更是一头雾水,只能跟名侦探柯南一样,从ATmega328P的芯片下手,抽丝剥茧。无论如何,最终还是成功解决了这个问题,心里满满的成就感,连夜把方法制作出来
供大家分享,希望有同样问题的朋友能用到
好帖,顶!
帮顶~收藏下~
同样看不懂
还没行进到如此地步,只能感觉无比的强大
好贴,收藏了,顶LZ的钻研精神!
多谢分享!
同是编程小白需以解决,还是要顶褛主,arduino提取的bootloader很全,arduino也是多功能的软件
图文并茂,很详细,收藏了!
同是编程小白需以解决,还是要顶褛主,arduino提取的bootloader很全,arduino也是多功能的软件{:1_45: ...
主要是arduino挑下载线,很容易碰到下载线不识别的情况,用arduino刷当然是最简单的
这个得好好学习一下。
我前两天也是折腾,不过没刷出来,楼主你整出来了,给你赞一个。
这个必须要大大的赞一个啊,解决了我大半年的心结啊!!!
梦里寻他千百度.............................,困扰我的问题,终于有解决的方法了。谢谢LZ
谢谢楼主,真是一人心血,大家受用,赞!!!!!!
感谢分享。只不过我的usbasp固件过低。。。。不能刷bootloader,只能先刷usbasp,再刷minimosd。很痛苦
我也觉得arduino提取的bootloader很好,不用担心熔丝位错误把板搞费了
楼主的方法我这里没有用,依然是不行,用USBASP方式都能刷入固件,就是bootloader也能刷进去,就是那个连不上,fail to talk,这样配置不了OSD,连上图传都可以显示让我update eeprom
楼主的方法我这里没有用,依然是不行,用USBASP方式都能刷入固件,就是bootloader也能刷进去,就是那个连不 ...
ftdi的模块有时候需要连六根线才能连接,不知道为什么
经检验我的atmega328p芯片烧了,而且就烧了串口的脚,换了一个328p主控立马满血复活
【站内推荐】 /2
日-23日,深圳蛇口价值工厂举办了一场盛大的攀爬车比赛,美女英雄齐聚首,来见证网红与攀爬老司机的邂逅吧!
,天气晴朗(暴热),深圳蛇口价值工厂内正在举办一场规模盛大的FPV穿越机比赛。5iMX记者将连续2天为您现场报道,敬请关注和转发给朋友们一起观看。查看: 1292|回复: 3
APM2.8+MINIMOSD不更新数据和连接问题,求解决
OSD要等到数传跟MP连接以后才进入到飞行的那个页面,然而数据全都不会变,就一LOWBATTERY在那里闪(我的APM也有电流计),OSD也没读到电压什么。
姿态仪也一直是直线,等等、。总之就只有时间跟警报一直在变。
我已经在MP里点启动遥测无数次了还是一样!而且当数传断开后又完全没连接。我接的线是数传那里RX,VCC,GND引出街上OSD上对应的3个插口。请问如何解决。
(274.01 KB, 下载次数: 5)
13:06 上传
(313.85 KB, 下载次数: 4)
13:06 上传
怎么没人解答
入字拖 发表于
什么鬼。。。求教
Powered by3606人阅读
Pixahwk(19)
&最近在调四旋翼用到的minimosd,虽然在网上可以找到一些资料,但是资料讲解的比较范范,有些步骤还是不知道应该怎么操作。经过这两天的摸索,终于搞清了OSD的开发过程,下面就做简要的述。
& & 惭愧的很,其实研究飞行器pixhawk已经有近一年的时间了,也曾一直想写点什么,但总是被各种理由耽误和错过了。从这篇开始吧,养成一个写博客的好习惯,与人交流,也方便以后自己的再复习,以后再慢慢地把自己做四旋翼的过程也写下来。
& & &pixahwk主控板上可以挂上一个摄像头,利用图传模块就可以远远的在显示屏看到摄像头中的景象,其实这些和飞控本身并没有关系。看过大疆的成像没有,上面还叠加了很多飞控本身的信息,如高度,速度等信息,这些信息叠加在视频信息上用的就是OSD模块,Osd的全称是on-screen&display。OSD核心是利用字符发生芯片在显示器的屏幕上显示需要的字符,即在屏幕视频之上叠加数据,我们这里用的字符叠加芯片是MAX
7456。学会这些就可以定制一个自己的想要的信息。这里我其实是想在屏幕上显示飞机的“血条”。
& &下面让我们看看在视频之上叠加字符是个什么效果:
& & & & & & & &&
目前市面所有的飞控osd模块都是起源于google上的minimosd项目。该项目版本截止于12年的2.0。其硬件解决方案是采用atmega328芯片作为主控,配置相当于arduino&nano,具有32kb的flash,2kb的sram以及1kb的eeprom;同时采用MAX7456作为字符叠加芯片,7456可以存储16*16=256个字符,针对pal或者ntsc信号完成字符叠加。
& & 在软件方面,minimosd遵从mavlink协议,从串口获取封装为该协议的飞行数据,显示在视频之上,同时具有桌面配置程序,支持用户配置显示信息的内容与风格。
& & 在minimosd2.0版本的基础之上,全球范围内出现了若干分支版本,其中比较著名的是托管在github上的minimosd-extra&2.4(/diydrones/MinimOSD-Extra/wiki),&该版本在原版基础上扩展对mavlink传递信息的支持,可以显示更多的飞行数据,并且具备了简单的飞行统计功能,还改进了osd显示方案的切换方式。在此之外,也流传着一批针对国内用户的中文版osd固件,基本上都是基于minimosd-extra进行了简单改造。而杭州的playuav则大胆的对osd体系结构进行了改进,彻底改变了osd硬件架构,做出了一些很有新意的osd尝试(/PlayUAV/),还有的就是杭州的playuav设置界面做的很是完善,对于只想简单定制飞行器信息的可以用这个,但是价格很昂贵,100多元,是minimosd的2-3倍价格。而minimosd的开发仍是以arduino为基础,其实也没必要看懂全部,知道从哪改就行了,所以改起来也不是很复杂。如果再了解一下mavlink就完美了。(估计后期我们可能还要最忌添加新的mavlink信息,后面再整理mavlink吧。)
& & &下面我们先说一下开发环境大搭建,和部分工具的介绍吧。这也是有不少坑,最少先搭建环境,而后才能谈开发。先让大家看看我们用到的硬件吧。
& & &这是整体的图,包括:1、首先的是摄像头和图传模块以及显示屏,这是一套的图传,用来显示摄像头的图像的。2、再者就是飞控和OSD模块,这一部分是用来在飞控中的mavlink信息解析出来之后叠加在视频之的。3、嗷,我们的目的是修改OSD定制我们想要的界面,那就还需要一个osd的程序下载模块,下面再贴上图。4、最后就是电源供电模块了,这里要两部分供电,pixhawk的5v供电,但是摄像头、图传、osd是12v供电的。下面贴的他们的图,自己随便看看好了。
&& 说完了硬件部分,简单介绍一下软件吧。
&&&&1、pixhawk相关的软件就不说了。
&&&&2、固件下载工具可以用arduino本身的“上传”下载固件,也可以用ArduCAM OSD config这个软件进行下载固件。
&&&&3、MAX7456Charwizard.jar java的可执行工具,说到这还必须安装一个jdk,才可以,他是用来修改字库的。&
&&&&4、ArduCAM OSD config这个软件还是很重要的,本身是配置显示界面的软件,和修改代码的效果是一致的,背后有代码在支持,两个可以配合着一起修改代码。同时刷字库也要用它,因为如果你想显示自己的一些汉字或自定义字符还是要改字符,改了之后再刷进osd。刚刚提过他也可以下载固件到osd。
&&&&5、上面是说用配置工具直接改osd,但是功能是受限的,配置中没有出现的还是要从角度中去改。改就要用到arduino开发工具。我们在这里就将近浪费了一天的时间,用过很多版本,最后只能使用arduino1.0.5的版本。下面我都会提供这些工具。
& & &感觉说的有点乱了,说的简单点吧:arduino环境开发源码,配合配置工具一起修改,修改好后直接就可以下载到osd中使用了。但是要是想显示一些特别的字符汉字,就要自己改字库,再下载进去。
下面具体说说使用吧,不动手操作一遍,估计还是有迷糊的。
Minimosd源码分为三个部分,分别是osd功能固件ArduCam_Osd;配套库libraries以及osd的桌面配置工具OSD_Config。我们主要研读的代码是ArduCam_OSD,是烧录到osd片子上的主要功能代码。
& & & & & & & & &
ArduCam工程的主要功能文件包括两个头文件:OSD_Vars.h,OSD_Config.h以及三个源码定义文件ArduCAM_osd.ion,OSD_Panels.ino,MAVLink.ino。
OSD_Vars.h中定义的变量储存了从mavlink协议获取的飞行数据,这些飞行数据被解析后,保存在运行时内存sram中。
OSD_Config.h则负责与eeprom打交道,定义了配置信息在eeprom中的保存位置,便于minimosd启动后,从eeprom读取用户配置信息。
ArduCAM_osd.ino是minimosd的程序入口点,是整个程序的骨架。
OSD_Panels.ino是具体的绘制功能,每一帧视频,都有这些功能,将飞行器信息绘制到视频之上。
MavLink.ino则是用于对mavlink协议的解析,将收到的数据包按照mavlink协议解析,解析成功后将数据储存在ODS_Vars.h中定义的变量中。
& & &整个minimosd的程序流程非常简单,如下图所示:
在minimosd通电启动后,首先调用到Setup()入口函数,实现如下流程。
1.初始化mavlink,设置了与飞控连接的串口波特率以及端口号
Serial.begin(TELEMETRY_SPEED);// setup mavlink port
mavlink_comm_0_port = &S
然后向飞控发送数据请求,osd需要如下飞行数据
MAV_DATA_STREAM_EXTENDED_STATUS,
MAV_DATA_STREAM_RC_CHANNELS,
MAV_DATA_STREAM_POSITION,
MAV_DATA_STREAM_EXTRA1,
&/span&MAV_DATA_STREAM_EXTRA2
2.初始化7456,设置7456通信的spi端口,并且激活7456
pinMode(MAX7456_SELECT,
OUTPUT); // OSD CS
digitalWrite(MAX7456_SELECT,
HIGH); // unplug OSD
3.读取eeprom设置,OSD_Config.h中记录了不同的设置信息在eeprom中的存储位置,在这里逐次读取,如:
//****** First set of 8 Panels ******
uint16_t offset = OffsetBITpanel *
setBit(panA_REG[panel], Cen_BIT, readEEPROM(panCenter_en_ADDR + offset));
panCenter_XY[0][panel]=readEEPROM(panCenter_x_ADDR + offset);
panCenter_XY[1][panel]=checkPAL(readEEPROM(panCenter_y_ADDR + offset));
这里要说一下minimosd中的panel结构,minimosd中设计了4组,每组8个,共32个数据槽位,每个槽位分别对应于需
要显示的一种飞行数据。针对每个槽位,可以开启或者关闭显示,亦可以设置该槽位在屏幕上的显示位置(x,y坐
标)。对于上述的32组槽位设置,minimosd支持两种方案,所以放到一个长度为2的数组中进行管理&。
下述代码是每个槽位是否显示的变量结构,每组8个槽位的1或者0正好对应于一个byte数据类型,因为有两套显示方
案,所以每组都是一个长度为2的byte数组
// Panel BIT registers
byte panA_REG[npanels] = {0b};
byte panB_REG[npanels] = {0b};
byte panC_REG[npanels] = {0b};
byte panD_REG[npanels] = {0b}
下述代码是槽位显示位置的变量结构,x和y坐标分别用byte来存储。同样,都可以应对两套显示方案。
// First 8 panels and their X,Y coordinate holders
byte panCenter_XY[2][npanels]; // = { 13,7,0 };
byte panPitch_XY[2][npanels]; // = { 11,1 };
byte panRoll_XY[2][npanels]; // = { 23,7 };
byte panBatt_A_XY[2][npanels]; // = { 23,1 };
byte panGPSats_XY[2][npanels]; // = { 2,12 };
byte panGPL_XY[2][npanels]; // = { 2,11 };
byte panGPS_XY[2][npanels]; // = { 2,13 };
byte panBatteryPercent_XY[2][npanels];
// ........
4.启动loop循环,无更多细节。
通电后,minimosd完成Setup中的所有功能,便进入了一个周而复始的循环工作过程,不断的调用Loop()函数,而每
个loop循环,则执行如下函数:
1.获取mavlink数据.根据mavlink的msgid,获知数据类型,后分别调用mavlink库中的函数对数据包进行解析,存储
到变量中。
if(mavlink_parse_char(MAVLINK_COMM_0, c, &msg, &status)) {
mavlink_active = 1;
//handle msg
switch(msg.msgid) {
case MAVLINK_MSG_ID_HEARTBEAT:
case MAVLINK_MSG_ID_SYS_STATUS:
osd_vbat_A = (mavlink_msg_sys_status_get_voltage_battery(&msg) / 1000.0f); //Battery voltage, in millivolts (1 = 1 millivolt)
osd_curr_A = mavlink_msg_sys_status_get_current_battery(&msg); //Battery current, in 10*milliamperes (1 = 10 milliampere)
osd_battery_remaining_A = mavlink_msg_sys_status_get_battery_remaining(&msg); //Remaining battery energy: (0%: 0, 100%: 100)
case MAVLINK_MSG_ID_GPS_RAW_INT:
2.字符绘制,这是osd的核心功能,针对允许显示的飞行数据,调用绘制该数据的函数
if(ISd(panel,Warn_BIT)) panWarn(panWarn_XY[0][panel], panWarn_XY[1][panel]); // this must be here so warnings are always checked
//Testing bits from 8 bit register A
if(ISa(panel,Cen_BIT)) panCenter(panCenter_XY[0][panel],
panCenter_XY[1][panel]);
if(ISa(panel,Pit_BIT)) panPitch(panPitch_XY[0][panel],
panPitch_XY[1][panel]); //5x1
if(ISa(panel,Rol_BIT)) panRoll(panRoll_XY[0][panel],
panRoll_XY[1][panel]);
if(ISa(panel,BatA_BIT)) panBatt_A(panBatt_A_XY[0][panel], panBatt_A_XY[1][panel]); //7x1
//.........................
//.........................
我们以绘制电池电量panBatt_A为例,该函数代码如下:
void panBatt_A(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf(&%c%5.2f%c&, 0xE2, (double)osd_vbat_A, 0x8E);
osd.closePanel();
其中,osd.setPanel()函数是7456提供的开发接口,设置当前要绘制字符的位置。
Osd.printf()函数类似于标准c++的printf,是向7456当前的位置输出字符。在上述代码中,在eeprom读出的屏幕位置,绘制了从mavlink协议获取的osd_vbat_A变量的值。
可见其实画图也就是这4步而已:
osd.setPanel(first_col, first_line);//确定显示的位置
osd.openPanel();
//打开显示
osd.printf(&%c%5.2f%c&, 0xE2, (double)osd_vbat_A, 0x8E);//显示什么
osd.closePanel();//关闭
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & &
&上面已经说明了画图就是这么简单,这里是通过源码修改的,建议
配合config工具 对于已经提供的界面只要设置就行了。两个修改都有效,能配置的就配置,自定义再修改源码。
如何自定义字符,自定义汉字呢,自定义图标。
& & & & & & & &&&
& & & & & &
& & & & & & & &&&
有没有看到上面两幅字库的差距,在字符中有些已经被我改变了,将改变后的字库刷进OSD,索引相同的位置显示就不同了。
如何调用呢?感觉叫字符不合适,就叫它图标吧,包括汉字。
上面一共是16*16=256个字符,每个字符都要唯一的索引,即从0x00--0xFF刚好16*16=256个。比如在上面的图上,&自&的索引就是
0x808,这是全称,因为每个索引位置都不同,故用0x80就可以调用 “自”。“稳”的索引是0x81,“悬停”的索引是“\x82\x83”,“\x82\x83”这种事arduino源码中的写法。
这种图标是显示不能再用osd.printf函数,而是用osd.printf_P( PSTR())PSTR解析字符串就是对字库的索引,如刚开始我们这个OSD显示的logo是
&osd.printf_P(PSTR(&\x20\x20\x20\x20\xba\xbb\xbc\xbd\xbe|\x20\x20\x20\x20\xca\xcb\xcc\xcd\xce|
ArduCam&OSD&));&怎么解析懂了吗? 0x20对应字库空,就是:先是4个空格,然后是“王。速度油” (修改后的,
不修改应该是“云翔速度油”)。|表示换行。换行后显示4个空格,然后索引“间电压流量”,|换行。 对于字符
ArduCam&OSD就不用索引了直接显示。
再来多说两句,索引字库显示应该明白了吧。如显示“自稳”应该是osd.printf_P(PSTR(&\x80\x81&));或osd.printf_P(PSTR(&\x80“”\x81&))。
显示“自稳stab符号” 就是osd.printf_P( PSTR(&\x80\x81&”stab%c&),0x17)。(0x17就是要索引了)。
如何修改成自己想要的图标汉字,首先利用MAX7456
MCM Wizard工具(需要安装jdk),file---&open---&选择你要修改的字库
。选中某个位置后。利用后面的白框和黑框还有灰框就可以绘制自己的图标了,绘制好了,别忘了保存save character,
file下也有save as。画图标是时候可以按住鼠标左键,一直去画。
最后怎么更新字库呢?其实也就是OSD下载的问题了。需要下载模块arduino下载器,因为我们这个用的OSD其实还是一个arduino,从上面在arduino下开发应该也看的出来了。
minimosd刷机教程:
options下updata firmware刷写固件.hex
updata charset 刷字库.mcm
? 一般情况下先刷字库再刷固件,如果字库刷不了先刷固件,然后刷字库,然后再刷次固件!
补充:arduino下如何生成hex固件,让updata
firmware刷写固(arduino可以直接下载的).
1): 在arduino工具的File-&preferences中找到preferences.txt文件。&
2):用记事本打开preferences.txt,选择hex文件存放的路径,在最后行加入 & &build.path=d:\arduino\MyHexDir, &&
3):关闭arduino。&
4):关闭preferences.txt ,关闭时对话框显示是否保存,选择保存。&
Note:1:hex文件存放的路径可以由自己来定。 & & & 2:以上操作时不连接arduino硬件。
3、配置如下图!
由于中文字库删除了一些显示项,请安如下图配置osd选项,配置好后save current下就写进了osd的eepom!
看这这一切写的有点复杂,其实并不是只要自己需要时自己动手操作一遍遍都清晰了。这里说了这么多只是想把有些
问题说的清楚些,让后人不必再浪费这个时间了。比如我当初就是考虑这些汉字怎么显示的也应该尝试了不下几十次,最终才想出“索引”这种方法。再比如我对这些索引的格式一点也不清楚,为什么和图片中不同,“自”明明是0x808但其实用0x80就行了,既然是0x80,其实源码中是写作\x80;再比如这些字库怎么修改呢,修改后再重新烧录进去,那不就可以索引到自己定义的图标了嘛。
就说这么多吧,按照我们项目的要求或许下面要研究一下mavlink,飞机那面添加新的信息,视频显示这边解析出来
,并自定义表达。就说这么多吧,都已经日18:19:42,该去吃饭了
(交流qq:,注明加好友原因)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:51142次
排名:千里之外
原创:37篇
评论:22条
(1)(21)(5)(2)(8)(9)

我要回帖

更多关于 mini micro 的文章

 

随机推荐