/*
* File: vumetro2.c
* Author: nahueldiaz
*
* Created on 27 de enero de 2016, 21:20
*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <plib.h>
#include <plib/adc.h>
#include <math.h>
#define _XTAL_FREQ 2000000
// CONFIG1
#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CCPMX = RB0
#pragma config CP = OFF
// CONFIG2
#pragma config FCMEN = ON
#pragma config IESO = ON
unsigned char high,low,fvalue;
unsigned long mv;
unsigned char cnt,msb,lsb ;
unsigned long result ;
void interrupt alta(void){ //interrupcion de alta
INTCONbits.GIE = 0; //deshabilita las int. para nocausar varias int a la vez
if (PIR1bits.ADIF == 1){ // si salto flag de ADC entonces..
high = ADRESH; // rescatar valores de ADC
low = ADRESL;
ADRESH = 0X00 ;
ADRESL = 0X00 ;
PIR1bits.ADIF = 0;
}
}
unsigned char display (unsigned char no){ //display 7 segmentos
unsigned char patern;
unsigned char segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
patern = segment[no];
return (patern);
}
void main (){
OSCCON = 0x50 ;// clock 2MHz
__delay_ms (10);
TRISA = 0X02;
TRISB = 0X00;
PORTA = 0X00;
PORTB = 0X00;
ADRESL = 0X00;
ADRESH = 0X00;
ANSEL = 0b00000010; // ADC en RA1
ADCON0 = 0b10001001; // clock 2 mhz dividido 64 = 31250
ADCON1 = 0b11000000; // 32us de tiempo de adquisicion
INTCON = 0b01000000; // interrupciones habilitadas ADC
PIR1bits.ADIF = 0;
PIE1bits.ADIE = 1;
INTCONbits.GIE = 1;
__delay_ms (30);
while (1){
__delay_ms(10);
//result = 0x0F;
PORTB = low;
result = high ;
result <<= 8 ;
result += low ;
result *= 5000 ;
result >>= 10 ;
// a partir de aqui esta el bloque de codigo utilizado para la conversion
unsigned int value = result;
const unsigned int digits[4] = {1000, 100, 10,1};
unsigned char string[5];
for (int i = 0; i<4; i++) {
string[i] = '0';
while (value >= digits[i])
{
value -= digits[i];
string[i]++;
}
}
string[4] = '\0';
// aqui termina
PORTB = PORTB ;
INTCONbits.GIE = 1;
ADCON0 = 0b10001101;
}
// el siguiente bloque se coloca si se quiere
//realizar manualmente la consulta del adc
//while (1){
//if (ADCON0 == 0b10001001) { // si completo la conversion , entra en
//high = ADRESH; //el ciclo y toma los valores del ADC
//low = ADRESL;
//PORTB = low;
//}
//__delay_ms (30);
//ADCON0 = 0b10001101;
}//}
/*
* File: 2Segmentedisplay.c
* Author: nahueldiaz
*
* Created on 9 de septiembre de 2015, 09:38
*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB0 // CCP1 Pin Selection bit (CCP1 function on RB0)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// CONFIG2
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
#pragma config IESO = ON // Internal External Switchover bit (Internal External Switchover mode enabled)
#define _XTAL_FREQ 8000000
unsigned char s,j,i ;
unsigned char display (unsigned char no){
unsigned char patern;
unsigned char segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
patern = segment[no];
return (patern);
}
unsigned char cnt,msb,lsb ;
void main ()
{
ANSEL = 0x00 ;
TRISA = 0x00 ;
TRISB = 0x00 ;
PORTA = 0x00 ;
PORTB = 0x00 ;
for(;;){
for (cnt=0;cnt<99;cnt++){
msb = cnt /10 ;
PORTB = display(msb);
PORTAbits.RA0 = 1 ;
__delay_ms(50);
PORTAbits.RA0 = 0 ;
lsb = cnt % 10;
PORTB = display(lsb);
PORTAbits.RA1 = 1;
__delay_ms(50);
PORTAbits.RA1 = 0;
__delay_ms(50);
}}} unsigned int value = result;
const unsigned int digits[4] = {1000, 100, 10,1};
unsigned char string[5];
for (int i = 0; i<4; i++) {
string[i] = '0';
while (value >= digits[i])
{
value -= digits[i];
string[i]++;
}
}
string[4] = '\0';