/*******************************************************************************
MPLAB Harmony Application Source File
Company:
Microchip Technology Inc.
File Name:
app.c
Summary:
This file contains the source code for the MPLAB Harmony application.
Description:
This file contains the source code for the MPLAB Harmony application. It
implements the logic of the application's state machine and it may call
API routines of other MPLAB Harmony modules in the system, such as drivers,
system services, and middleware. However, it does not call any of the
system interfaces (such as the "Initialize" and "Tasks" functions) of any of
the modules in the system or make any assumptions about when those functions
are called. That is the responsibility of the configuration-specific system
files.
*******************************************************************************/
// DOM-IGNORE-BEGIN
/*******************************************************************************
Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.
Microchip licenses to you the right to use, modify, copy and distribute
Software only when embedded on a Microchip microcontroller or digital signal
controller that is integrated into your product or third party product
(pursuant to the sublicense terms in the accompanying license agreement).
You should refer to the license agreement accompanying this Software for
additional information regarding your rights and obligations.
SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
*******************************************************************************/
// DOM-IGNORE-END
// *****************************************************************************
// *****************************************************************************
// Section: Included Files
// *****************************************************************************
// *****************************************************************************
#include "app.h"
#include "stdio.h"
int delay_Clock = 200000000; //200MHz
char Buf[32];
void delay_us(volatile unsigned int usec) //1μsec遅延
{
volatile int count;
count = (int)(delay_Clock/20000000)*usec;
do //実測 at 200MH (Clock=200000000)
{ //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec
asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP");
asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");
count--;
}while(count != 0);
}
void delay_ms(volatile unsigned int msec) //1msec遅延
{
volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec
for(i=0; i<msec; i++)
delay_us(1000);
}
void AdcFunc(void) //AD変換、表示
{
unsigned int AdcValue;
float Volt;
//AD変換開始 Trigger a conversion
ADCCON3bits.GSWTRG = 1; //AD変換ソフトウェアトリガ //Global Level Software Trigger bit
//変換完了を待つ Wait the conversions to complete
while (ADCDSTAT1bits.ARDY7 == 0);
//結果の取り出し fetch the result
AdcValue = ADCDATA7;
Volt =(float)AdcValue/4095*3.3; //ボルト表示化
lcd_ACM1602_cmd_i2c(0x80); //1行目の先頭へ
sprintf(Buf,"AdV=%u ",AdcValue); //バッファーに文字列をセット
lcd_ACM1602_str_i2c(Buf);
lcd_ACM1602_cmd_i2c(0xC0); //2行目の先頭へ
sprintf(Buf,"Volt=%.2f[V] ",Volt); //文字列としてバッファーに収納
lcd_ACM1602_str_i2c(Buf);
delay_ms(250);
}
// *****************************************************************************
// *****************************************************************************
// Section: Global Data Definitions
// *****************************************************************************
// *****************************************************************************
// *****************************************************************************
/* Application Data
Summary:
Holds application data
Description:
This structure holds the application's data.
Remarks:
This structure should be initialized by the APP_Initialize function.
Application strings and buffers are be defined outside this structure.
*/
APP_DATA appData;
// *****************************************************************************
// *****************************************************************************
// Section: Application Callback Functions
// *****************************************************************************
// *****************************************************************************
/* TODO: Add any necessary callback functions.
*/
// *****************************************************************************
// *****************************************************************************
// Section: Application Local Functions
// *****************************************************************************
// *****************************************************************************
/* TODO: Add any necessary local functions.
*/
// *****************************************************************************
// *****************************************************************************
// Section: Application Initialization and State Machine Functions
// *****************************************************************************
// *****************************************************************************
/*******************************************************************************
Function:
void APP_Initialize ( void )
Remarks:
See prototype in app.h.
*/
void APP_Initialize ( void )
{
/* Place the App state machine in its initial state. */
appData.state = APP_STATE_INIT;
/* TODO: Initialize your application's state machine and other
* parameters.
*/
// Configure ADCCON1
ADCCON1 = 0; //
ADCCON1bits.FRACT = 0; // use Integer output format
ADCCON1bits.SELRES = 3; // ADC7 resolution is 12 bits //default
ADCCON1bits.STRGSRC = 0; // No scan trigger.
// Configure ADCCON2
ADCCON2 = 0;
ADCCON2bits.SAMC = 5; // ADC7 sampling time = 5 * TAD7
ADCCON2bits.ADCDIV = 1; // ADC7 clock freq is half of control clock = TAD7
// Configure ADCCON3
ADCCON3 = 0;
ADCCON3bits.ADCSEL = 0; //クロックソース:PBCLK3 // Select input clock source
ADCCON3bits.CONCLKDIV = 1; // Control clock frequency is half of input clock
ADCCON3bits.VREFSEL = 0; // Select AVdd and AVss as reference source
ADCCON3bits.DIGEN7 = 1; //ADC7:有効 //Shared ADC (ADC7) Digital Enable bit
ADCCON3bits.RQCNVRT = 1; //個別ポート入力モード //Individual ADC Input Conversion Request bit
ADCCON3bits.ADINSEL = 8; //入力ポートに AN8 設定 //Analog Input Select bits
ADCCON3bits.SAMP = 1; //クラス2モード設定 //Class 2 and Class 3 Analog Input Sampling Enable bit
// No selection for dedicated ADC modules, no pre sync trigger, not sync sampling
ADCTRGMODE = 0;
// Select ADC input mode //ADC INPUT MODE CONTROL REGISTER 1
ADCIMCON1bits.SIGN8 = 0; // unsigned data format
ADCIMCON1bits.DIFF8 = 0; // Single ended mode
ADCTRG2bits.TRGSRC7 = 1; //AN7(ADC7)をソフトウェアトリガに設定 //Trigger Source for Conversion of Analog Input AN7 Select bits //必須
// Turn the ADC on
ADCCON1bits.ON = 1;
// Enable clock to analog circuit
ADCANCONbits.ANEN7 = 1; // Enable the clock to analog bias
// Wait for ADC to be ready
while(!ADCANCONbits.WKRDY7); // Wait until ADC7 is ready
// Enable the ADC module
ADCCON3bits.DIGEN7 = 1; // ADC7 ADCデジタル回路ON
lcd_ACM1602_init_i2c(); //I2Cインターフェース式液晶初期化
lcd_ACM1602_cmd_i2c(0x0C); //カーソル:0FF、ブリンク:0FF
lcd_ACM1602_cmd_i2c(0x80); //1行目の先頭へ
lcd_ACM1602_str_i2c("CN2: AN8_ADC7 ");
lcd_ACM1602_cmd_i2c(0xC0); //2行目の先頭へ
lcd_ACM1602_str_i2c(" I2C5_LCD ");
delay_ms(2000);
}
/******************************************************************************
Function:
void APP_Tasks ( void )
Remarks:
See prototype in app.h.
*/
void APP_Tasks ( void )
{
/* Check the application's current state. */
switch ( appData.state )
{
/* Application's initial state. */
case APP_STATE_INIT:
{
bool appInitialized = true;
if (appInitialized)
{
appData.state = APP_STATE_SERVICE_TASKS;
}
break;
}
case APP_STATE_SERVICE_TASKS:
{
AdcFunc();
break;
}
/* TODO: implement your application state machine.*/
/* The default state should never be executed. */
default:
{
/* TODO: Handle error in application's state machine. */
break;
}
}
}
/*******************************************************************************
End of File
*/