Tuesday, March 14, 2017

ClassNotFoundException: com.mysql.jdbc.Driver solution: Copy mysql jdbc jar file to jre/lib/ext

ClassNotFoundException: com.mysql.jdbc.Driver


java.exe -cp mysql-connector-java-5.0.8-bin.jar 식으로 jdbc jar 파일을 알려줘도 ClassNotFoundException이 나면


mysql-connector-java-5.0.8-bin.jar 파일을 jre의 lib/ext 폴더에 넣으면 된다.



Wednesday, March 8, 2017

TAS5508C - VS1053B 사이의 I2S 연결 실패. TAS5508C - STA013 는 성공


사진은 테스트 중인 보드. 회로를 대충 만들어 점퍼선이 많음.




VS1053B와 STA013은 비슷하면서도 VS1053B가 기능이 많다. WMA 파일, WAV파일도 출력 가능하다.
그래서 기존에 사용하던 STA013을  VS1053B로 교체하고자 테스트하였다.

TAS5508C는 TI의 8ch PWM processor 이고 I2S 오디오를 입력받아 PWM을 출력한다.
중간에 EQ, auto mute 같은 오디오 처리도 한다.

문제는 VS1053B의 I2S 출력을 TAS5508C가 받아들이지 않는다는것이다.
원인은 모르겠고, 분명 TAS5508C의 I2S 입력 규격에 VS1053B의 출력과 같은 형식이 있음에도 불구하고 안된다.

그래서  STA013을 계속 사용하기로 했음. 이것때문에 이틀동안 삽질함.

VS1053B 의 I2S 출력은 16bit 만 지원한다.

아무래도 TAS5508C가 16bit 입력 받는데 문제가 있는듯.

STA013은 32bit 출력.

-----------------------------------------------------------------------------------------

TAS5508C cannot recognize 16bit i2s signal from VS1053B.
Chip represent  PLL phase lock error, PLL auto lock,SCLK error, and not working.

I tried every thing for that, cannot find right way.

so. I use STA013, and success at first time.

The problem must be 16bit I2S signal from VS1053B that's not acceptable to TAS5508C.


Friday, March 3, 2017

VS1053 을 이용한 mp3 play 시에 음이 빨리 재생되면서 찌직 거리는 경우. too fast play mp3 noise error sound

VS1053에게 mp3 파일 데이터를 보내는 함수가 다음과 같을경우

void VS1053_sdi_write(VS1053_InitTypeDef* vs1053,uint8_t* txbuff,uint16_t datasize)
{
if(vs1053->initialised)
{
while( HAL_GPIO_ReadPin(vs1053->DREQport,vs1053->DREQpin) == 0); //Wait while DREQ is low

SDI_DSEL();
SCI_DSEL();

SDI_SEL();

HAL_SPI_Transmit(vs1053->hspi,txbuff,datasize,vs1053->timeout);

SDI_DSEL();

}
}

위 함수는 datasize만큼 보내기 전에 vs1053의 fifo에 여유가 있는지 물어본 후 데이터를 보낸다.
문제는 datasize가 32byte ( vs1053이 최소한으로 가지고 있는 fifo의 여유 공간)을 넘는 경우
32바이트를 넘는 모든 정보는 사라진다.


따라서 아래처럼 32byte 단위로 보내야 한다.

아주 단순한 코딩 실수이지만 한참을 삽질했다.


void PlayMp3()
{
uint32_t wbytes; /* File write counts */
uint8_t read_buffer[32*100];

if(f_mount(&mynewdiskFatFs, (TCHAR const*)SD_Path, 1) == FR_OK)
{
//SDMMC_Format();

if(f_open(&MyFile, "test.mp3", FA_READ) == FR_OK)
{
uint32_t fetch =0; 

while(1)
{
f_read(&MyFile, read_buffer, 1024,&fetch);
HAL_Delay(1);

if(fetch >0)
{
for(int p = 0; p < fetch / 32; p++)
VS1053_sdi_write(&vs1053, &read_buffer[p*32], 32);
}
else
{
f_close(&MyFile);
break;
}
}
}
}

}


------------------------------
in send mp3 data to vs1053, check DREQ signal each 32 bytes frame.
DREQ is high when vs1053 has fifo spaces at least 32 bytes.
If you send over 32bytes, overflow data.

Friday, February 3, 2017

TDA8932 모듈 노이즈 제거 (Reduce noise of TDA8932 D-Class amp Module)

사무실의 30W급 북쉘브 스피커의 앰프가 살짝 고장나서 스피커, 엔클로져는 그대로 사용하고 내부의 앰프만 교체하려고 TDA8932 모듈을 2개 사서 교체하였다.

(http://www.devicemart.co.kr/1326900)

달고 소리를 들어보니 심각할 정도의 삐~~~ 하는 잡음이 나왔다. 전원관련된 문제는 아니었고 오실로스코프로 출력을 봤더니 modulation 파형도 1v 수준으로 나왔고 그 외에도 귀에 들리는 노이즈가 심각했다.

구입한 모듈은 8옴에 맞춰서 출력단이 구성되어있고 내 스피커는 6옴이기에 불일치하는것도 있지만 그래도 좀 심하다 싶어 메뉴얼을 살펴본 결과 그냥 모듈레이션 주파수를 올리면 들리던 잡음이 귀에 들리지 않는 영역으로 밀려 올라갈것으로 보고 fOSC를 정하는 저항을 바꿨다.
33k에서 27k로 변경.
출력단의 저주파필터용 캐패시터도 아마 680nF 정도일것인데 1uF으로 교체.
물론 고음이 좀 깍일 수는 있지만 그래도 노이즈를 듣는것보다는 낫다.

변경하고 들어보니 노이즈는 스피커에 귀를 대고 듣지 않는 이상 들리지 않는다.




----------------------------

To reduce continuous high frequency noise(beep~~~~~~~), Change resistor for modulation frequency and change LPF capacitor to 1uF.



Monday, September 5, 2016

C# Windows form application DataBinding Example. 윈폼 데이터바인딩 예제

C# Windows form Application에서 DataBinding 사용하기.

데이터를 폼 컨트롤에 연결하여 사용하기.

1. 클래스를 만든다.
2. Collection을 만든다
3. CurrencyManager를 만든다
4. 폼위의 컨트롤에 Binding 한다.
5. CurrencyManager의 Position을 제어한다.



        public class NameValue

        {

            public NameValue(string n, string v)

            {

                Name = n;

                Value = v;

            }



            public string Name { get; set; }

            public string Value { get; set; }

        }





        private CurrencyManager currencyManger = null;

        List<namevalue> data = new List<namevalue>();



        private void Form1_Load(object sender, EventArgs e)

        {

            data.Add(new NameValue("1", "aaaa"));

            data.Add(new NameValue("2", "bbbb"));

            data.Add(new NameValue("3", "cccc"));

            data.Add(new NameValue("4", "dddd"));



            currencyManger = (CurrencyManager)this.BindingContext[data];

            currencyManger.Position = 0;



            textBox1.DataBindings.Add(new Binding("Text", data, "Name"));

            textBox2.DataBindings.Add(new Binding("Text", data, "Value"));

        }



        private void button1_Click(object sender, EventArgs e)

        {

            if (currencyManger.Position + 1 &gt;= currencyManger.Count)

                currencyManger.Position = 0;

            else

                currencyManger.Position++;

       

        }

Friday, August 12, 2016

Adobe premiere pro 478 error

Adobe Premiere pro cs 5.5 에서 premiere pro has encountered an error cpp-478 가 나면서 효과를 사용할 수 없게되면 C:\Program Files\Adobe\Adobe Premiere Pro CS5.5\Support Files\AMTLanguages 에 있는 ko_kr.txt 파일을 삭제하세요.

Tuesday, July 19, 2016

어셈블리 리소스에서 이미지 읽기 (Load image from assembly resource)

using System.Reflection;
using System.Resources;

public static object LoadProjectResource(string strResName)
{
      Assembly assembly = Assembly.GetExecutingAssembly();
      string strBaseName = assembly.GetName().Name + "." + "Properties.Resources";
      ResourceManager rm = new ResourceManager(strBaseName, assembly);
      return rm.GetObject(strResName);
}

// 사용방법  hello 라는 이미지가 프로그램(어셈블리)리소스에 있다면
Image1.Image = LoadProjectResource("hello");