====== Overview ====== This document explain how to control ADC on the Odroid ADK board by Android ADK App.** PIC24FJ64GB002 is going to try read ADC value from voltage at the battery and the Variable Resistor, and transfer to Android ADK App.** ADK App display the result based on the ADC value. ---- 이 문서는 Odroid ADK Board 를 이용하여 ADC 를 제어하는 Android ADK app 를 설명한다. PIC24FJ64GB002 칩은 밧데리와 가변저항의 전압을 ADC 값으로 읽어 와서, Android ADK app 으로 전달한다. Android ADK App 는 ADC 값을 바탕으로 화면에 결과를 표시한다. ====== What you need ====== * ADK Board * ADK IO Kit * Mini Breadboard * Variable Resister x 1ea * jumper wires ====== Knowledge Base ====== ===== Variable Resister ===== * Symbol {{:en:vResister.jpg}} ===== ADC(Analog to Digital Converter) ===== Please refer to PIC24F Family Reference Manual, Sect. 17 10-Bit A/D Converter.([http://ww1.microchip.com/downloads/en/DeviceDoc/39705b.pdf]) ====== Circuit ====== {{:en:Odroid_ADK_ADC_fz.png?520}} {{:en:Odroid_ADK_ADC_pic.png}} ====== Schematic ====== {{:en:Odroid_ADK_ADC_schem.png}} ====== Video ====== [http://www.youtube.com/watch?v=gjGIvDDPYD4] [[Play(http://www.youtube.com/embed/gjGIvDDPYD4?hl=ko&fs=1)]] ====== Software ====== **ADK** **svn check out** **http://dev.odroid.com/svn/accessory/trunk/ODROIDAccessoryADCDemo** private void initDevice() { Log.e(TAG, "initDevice"); // fix bug // You must call function to use GPIO input mode, if firmware version is 1.0 initI2C(); initBMP180(); // fix bug initADC(true); } 초기화 후 handler에서 battery 값과 ADC 값을 읽어 표시하면 됩니다. accessoryManager.read(commandPacket); switch(commandPacket[0]) { case RECEIVED_LETTER_ADC: value = (short) (commandPacket[3] << 8); value |= (short) (commandPacket[4] & 0x00ff); updateADC(value); break; case RECEIVED_LETTER_BATT: value = (short) (commandPacket[3] << 8); value |= (short) (commandPacket[4] & 0x00ff); updateBatt(value); break; **Bluetooth** **svn check out** **http://dev.odroid.com/svn/accessory/trunk/ODROIDBluetoothADCDemo** **svn check out** **http://dev.odroid.com/svn/accessory/trunk/ODROIDBluetoothADCDemo** ADK 펌웨어에서는 자동으로 ADC와 Battery 값을 보내 주지만, BaB 펌웨어에서는 request해야 보내 줍니다. 그래서 Timer를 두어 protocal로 request를 보내고 받아서 처리하면 됩니다. private void getADC() { //Log.e(TAG, "getADC"); Message msg = Message.obtain(handler, SEND_LETTER_ADC_CONFIG, ADC_PORT, 0); handler.sendMessage(msg); } private void getBattery() { //Log.e(TAG, "getBattery"); Message msg = Message.obtain(handler, SEND_LETTER_BATT, 0, 0); handler.sendMessage(msg); }