野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21784|回复: 21

想取消画板的校准,在线等!

[复制链接]
发表于 2013-8-14 12:38:23 | 显示全部楼层 |阅读模式
本帖最后由 天狼星 于 2013-8-15 11:38 编辑

打算把画板的校准步骤去掉,想先把获得校准的X,Y坐标记录下来,然后去掉校准函数,另写一个自校准函数,但是该怎么实现?搞了一个晚上了还是没得...
回复

使用道具 举报

发表于 2013-8-14 19:53:28 | 显示全部楼层
把校准函数里的几个参数校准后写入到EEPROM中(好像一共是6个),板子上电后检测EEPROM中如果有记录,读取之,那就可以直接跳过校准的步骤
回复 支持 反对

使用道具 举报

发表于 2013-8-14 20:29:35 | 显示全部楼层
flyleaf 发表于 2013-8-14 19:53
把校准函数里的几个参数校准后写入到EEPROM中(好像一共是6个),板子上电后检测EEPROM中如果有记录,读取之, ...

写入EEPROM?这个听起来好高端。。。。怎么写入哦?
回复 支持 反对

使用道具 举报

发表于 2013-8-14 21:28:28 | 显示全部楼层
可以参考那个EEPROM的例程,就是普通的写数据,加个标志位就好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-14 22:25:50 | 显示全部楼层
我是想测出校准的参数后写到程序里面,然后上电后就读取参数跳过校准步骤,难道非要eeprom不可?
回复 支持 反对

使用道具 举报

发表于 2013-8-14 23:18:33 | 显示全部楼层
天狼星 发表于 2013-8-14 22:25
我是想测出校准的参数后写到程序里面,然后上电后就读取参数跳过校准步骤,难道非要eeprom不可?

你这样也可以,用串口把这几个参数printf到串口,然后在以后的程序使用这些数据就行,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-15 10:57:26 | 显示全部楼层
flyleaf 发表于 2013-8-14 23:18
你这样也可以,用串口把这几个参数printf到串口,然后在以后的程序使用这些数据就行,

版主麻烦把用到的参数都公布出来吧,里面调用的函数太多现在已经搞了两天都没什么进展,谢谢版主...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-15 10:57:46 | 显示全部楼层
flyleaf 发表于 2013-8-14 23:18
你这样也可以,用串口把这几个参数printf到串口,然后在以后的程序使用这些数据就行,

版主麻烦把用到的参数都公布出来吧,里面调用的函数太多现在已经搞了两天都没什么进展,谢谢版主...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-15 10:57:45 | 显示全部楼层
flyleaf 发表于 2013-8-14 23:18
你这样也可以,用串口把这几个参数printf到串口,然后在以后的程序使用这些数据就行,

版主麻烦把用到的参数都公布出来吧,里面调用的函数太多现在已经搞了两天都没什么进展,谢谢版主...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-15 10:57:55 | 显示全部楼层
本帖最后由 天狼星 于 2013-8-15 11:26 编辑

现在知道这6个变量aa1=0,bb1=0,cc1=0,aa2=0,bb2=0,cc2=0;是定义在FunctionalState Get_touch_point(Coordinate * displayPtr,Coordinate * screenPtr,Parameter * para )前面的,当我给这6个变量赋值后依然是要校正啊,还要改什么地方?
回复 支持 反对

使用道具 举报

发表于 2013-8-15 19:46:50 | 显示全部楼层
把Touchl_Calibrate 函数里的内容全注释掉,然后在这个函数里放入你得到的aabbcc...6个参数。在main函数里调用一次这个Touchl_Calibrate,应该就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-15 21:17:12 | 显示全部楼层
flyleaf 发表于 2013-8-15 19:46
把Touchl_Calibrate 函数里的内容全注释掉,然后在这个函数里放入你得到的aabbcc...6个参数。在main函数里调 ...

这个我早试过了,就是按照你这样来的,然后进去到画板后画点函数就用不了,点起来没反应,这个会不会是因为画点函数没接收到x,y的数据?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-15 21:17:18 | 显示全部楼层
flyleaf 发表于 2013-8-15 19:46
把Touchl_Calibrate 函数里的内容全注释掉,然后在这个函数里放入你得到的aabbcc...6个参数。在main函数里调 ...

这个我早试过了,就是按照你这样来的,然后进去到画板后画点函数就用不了,点起来没反应,这个会不会是因为画点函数没接收到x,y的数据?
回复 支持 反对

使用道具 举报

发表于 2013-8-15 22:55:14 | 显示全部楼层
我以前也把程序改过,参数存放到EEPROM里的,可以实现,不过程序不知道扔哪了。我觉得你这样的方式也没有问题,如果你说点了没反应估计是程序卡死在前面的while循环:while(Touchl_Calibrate() !=0); 这里。

[code=c]int main(void)
{   
  SysTick_Init();                     /*systick 3õê¼»ˉ*/
    LCD_Init();              /*LCD3õê¼»ˉ*/
    Touch_init();            /*′¥Ãt3õê¼»ˉ*/
   
  while(Touchl_Calibrate() !=0);     /*μè′y′¥ÃtÆáD£×¼íê±Ï*/   
  Init_Palette();            /*»-°å3õê¼»ˉ*/      
   
    while (1)  
    {  
        if(touch_flag == 1)      /*èç1û′¥±ê°′ÏÂáË*/
        {
            /*»ñè¡μãμÄ×ø±ê*/
            if(Get_touch_point(&display, Read_2046_2(), &touch_para ) !=DISABLE)  
            {     
            /*»-μã*/
                Palette_draw_point(display.x,display.y);                         /*»-μã*/
            }
        }   
    }   
}[/code]

校正之后,程序是在下面的while(1)循环里获取xy参数的,不存在你说的没获取到的情况,再一个可能是如果你是自己移植的代码,你是不是没有把stm32f10x_it.c文件里的中断服务函数写上,这个函数是用来管理触摸画板的中断的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-18 12:29:16 | 显示全部楼层
flyleaf 发表于 2013-8-15 22:55
我以前也把程序改过,参数存放到EEPROM里的,可以实现,不过程序不知道扔哪了。我觉得你这样的方式也没有问 ...

我是直接在原来的文件上改的,当然我有备份过,我在 if(Get_touch_point(&display, Read_2046_2(), &touch_para ) !=DISABLE)  括号里放了LED1(ON),在外面还有else LED1(OFF),触摸的时候它会亮,放开的时候会灭,但就是画不出点...
回复 支持 反对

使用道具 举报

发表于 2013-8-18 22:00:25 | 显示全部楼层
天狼星 发表于 2013-8-18 12:29
我是直接在原来的文件上改的,当然我有备份过,我在 if(Get_touch_point(&display, Read_2046_2(), &touc ...

可惜我的代码不知道扔哪了。。我改的时候并没遇到什么问题呀,好像就是这样了
回复 支持 反对

使用道具 举报

发表于 2013-8-24 22:39:59 | 显示全部楼层
你们用的是野火M3的开发板吗?我再弄TFTLCD的时候,不能和板载的EEPROM在同一个程序中,后来看了看原理图,猜测可能是LCD和EEPROM的两个引脚冲突了,所以把LCD校准的数据保存到了板载的flash芯片中,的确可以用了,如果你们也是M3的板子的话,LCD和EEPROM可以同时用的话,看来我得回去好好再整整那个历程去了,求一定给回复一下你们的使用情况,我在这里准备着
回复 支持 反对

使用道具 举报

发表于 2013-8-26 15:13:24 | 显示全部楼层
yangyankunlc 发表于 2013-8-24 22:39
你们用的是野火M3的开发板吗?我再弄TFTLCD的时候,不能和板载的EEPROM在同一个程序中,后来看了看原理图, ...

板载flash芯片怎么操作?我也一样没办法在同一个程序里面弄LCD和EEPROM
回复 支持 反对

使用道具 举报

发表于 2013-8-26 16:40:07 | 显示全部楼层
windqj 发表于 2013-8-26 15:13
板载flash芯片怎么操作?我也一样没办法在同一个程序里面弄LCD和EEPROM

在同一个程序里不能同时弄LCD和EEPROM的话,那就应该是Io口冲突的问题。flash芯片和EEPROM都具有掉电不丢失数据的功能,也就是说你可以把想要写入EEPROM的数据保存到flash中就可以了。对于取消画板的校准的话,那就可以按照教程上说的,将aa1、bb1、cc1、aa2、bb2、cc2这六个值写入flash中就可以了。但是,历程中的这几个值是long double 类型的,我不会处理,所以我将前面的另一组数据变量(具体的忘了,应该是结构体数组的八个变量)写入到flash中了,到时候读取这几个值同样的也可以达到取消校准的功能。你试试吧,应该可以的
回复 支持 反对

使用道具 举报

发表于 2013-8-26 17:34:42 | 显示全部楼层
        u8 *psave=(u8 *)lcd_save ,*B_psave=Buf_psave;//long double lcd_save[6]为六个参数的存储数组,u8 Buf_psave[48]为u8类型的缓冲区数组
        for (;*psave!='\0';psave++,B_psave++)
        {
                *B_psave=*psave;
        }       
这是我把long double型的数据弄到u8型的数组中存储起来,你试试行不行、
回复 支持 反对

使用道具 举报

发表于 2013-10-14 20:59:14 | 显示全部楼层
我想问一下,你的触摸校正去掉了?
回复 支持 反对

使用道具 举报

发表于 2013-10-20 16:37:45 | 显示全部楼层
改成这样就可以了

int Touchl_Calibrate(void)
{
    uint8_t i;
    u16 test_x=0, test_y=0;
    u16 gap_x=0, gap_y=0;
    Coordinate * Ptr;

     Set_direction(0);//横屏
     for(i=0;i<4;i++)
     {

         do
         {
             Ptr=Read_2046();  //读取TSC2046数据到变量ptr
         }
        while( Ptr == (void*)0 );  //当ptr为空时表示没有触点被按下
        ScreenSample[i].x= Ptr->x;           //把读取的原始数据存放到ScreenSample结构体
        ScreenSample[i].y= Ptr->y;

     }

//                 /* 用原始参数计算出 原始参数与坐标的转换系数。 */
     Cal_touch_para( &DisplaySample[0],&ScreenSample[0],&touch_para ) ;            

aa1=-0.065056;
bb1= -0.000560;
cc1=254.992076;
aa2=-0.000073;
bb2=0.087993;
cc2=-14.600699;

   
    return 0;   
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-25 15:07 , Processed in 0.037419 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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