Codigo_proyecto4.docx

  • Uploaded by: Heraldo Fortuna
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Codigo_proyecto4.docx as PDF for free.

More details

  • Words: 1,532
  • Pages: 13
PROYECTO 4 – EJERCICIO 2

Main:

#include <xc.h> #include <stdio.h> #define _XTAL_FREQ 20000000 #include #include "config.h" #include "LCD.h" #include "uart.h"

unsigned int aux; unsigned int cuenta; unsigned int cuenta1; float temperatura; char temp[20];

void main(void) { // Configuro puertos como entradas o salidas: TRISA = 0xFF; TRISB = 0X00;// Configura el PortA como entrada.

// Configuro puertos como entradas o salidas: TRISCbits.TRISC7=1;

//pin RX como una entrada digital.

TRISCbits.TRISC6=0;

//pin TX como una salida digital.

// Inicialización del módulo EUSART PIC en el XC8 modo asíncrono, a 8bits: TXSTAbits.TX9=0;

//8 bits de datos.

TXSTAbits.TXEN=1;

//Transmisión habilitada.

TXSTAbits.SYNC=0;

//Transmisión Asíncrona.

TXSTAbits.BRGH=0;

//Baja velocidad.

RCSTAbits.SPEN=1;

//Habilita puerto serie.

//Configuro la velocidad "Baud Rate": BAUDCONbits.BRG16=0; //modo 16 bits.

SPBRGH=0; SPBRG=15;

//Byte MSB del registro de velocidad en 0. //Byte LSB del registro de velocidad en 129 para una velocidad de 9600 baudios con oscilador de 20Mhz.

// Configuración del ADC: ADCON1= 0x0E; ADCON0= 0x00; ADCON2= 0x9D;

// 6TAD, FOSC/16, justificación derecha

ADCON0bits.ADON= 1; // Arranca conversion.

//Configuracion del tmr0 T0CON = 0xC2;

// Ftmr0=5MHz/8=625KHz Ttmr0=1.6 uS

T1CON = 0xC9;

//

RCONbits.IPEN = 0; INTCON = 0XE0;

//GIE ON, PEIE ON, T0IE ON

PIE1bits.TMR1IE=0; cuenta = 0; cuenta1 = 0;

// Configuración del LCD: lcd_init(); lcd_clear_display(); __delay_ms(180); lcd_goto(2,1); lcd_print("TEMPERATURA:"); lcd_goto(10,2); lcd_dato(0xDF); lcd_print("C");

while (1)

// Bucle infinito (no hace nada)

{ ADCON0bits.GO_DONE = 1; while(ADCON0bits.GO_DONE ==1);

aux = ADRESH; aux = aux << 8; aux = aux + ADRESL; temperatura = (aux)*(500.0/1023.0);

sprintf(temp,"%.2f ",temperatura);

Write_Text_UART(temp); __delay_ms(5000); //

TXREG = 0;

// Se coloca en el buffer de TX.

//

while(TXSTAbits.TRMT==0); // Espera que se envíe.

//

__delay_ms(250); }

} // Fin de main

void __interrupt(high_priority) Tmr0ISR(void){

TMR0L = 6;

// 0.4 ms

cuenta++; if(cuenta==12500) { lcd_goto(4, 2); lcd_print(temp); //Se activa a los 500ms cuenta = 0; } INTCONbits.TMR0IF = 0;

TMR1L = 0xAF;

// 10 ms

TMR1H = 0x3C; cuenta1++; if(cuenta1==612) { LATBbits.LB0 = ~LATBbits.LB0; //se activa a los 250ms cuenta1 = 0; } PIR1bits.TMR1IF = 0; }

“config.h”:

//Zona de los bits de configuración #pragma config PLLDIV = 5

// PLL Prescaler Divide by 5 (20 MHz/5 = 4 MHZ)

#pragma config CPUDIV = OSC1_PLL2 // System Clock Postscaler (20 MHz/1 = 20 MHz) #pragma config USBDIV = 2

// USB Clock Full-Speed (96 MHz/2 = 48 MHz)

#pragma config FOSC = HS

// Oscillator Selection bits (HS oscillator)

#pragma config PWRT = ON

// Power-up Timer Enable bit (PWRT enabled)

#pragma config BOR = OFF

// Brown-out Reset disabled

#pragma config BORV = 3

// Brown-out Reset Voltage (Minimum 2.05V)

#pragma config WDT = OFF

// Watchdog Timer disabled

#pragma config CCP2MX = OFF

// CCP2 MUX bit (CCP2 is multiplexed with RB3)

#pragma config PBADEN = OFF

// PORTB A/D (PORTB<4:0> configured as digital I/O)

#pragma config MCLRE = ON

// MCLR Pin Enable bit (MCLR pin enabled)

#pragma config STVREN = ON

// Stack Full/Underflow will cause Reset

#pragma config LVP = OFF

// Single-Supply ICSP disabled

“LCD.h”:

/* Creada por tutorialesvirtuales.com / [email protected] * Nota: Esta Libreria esta diseñada PAra una interfaz a 4 Bits Esta primera parte debe ser modificada por el usuario, para setear los pines del Micro */ #define RS

LATBbits.LATB4

//Se debe de definir el Pin Usado para RS

#define EN

LATBbits.LATB5

//Se debe de definir el pin Usado para E

#define TRISRS TRISBbits.TRISB4 //Se define el Tris para el RS Para poderlo configurar como Salida #define TRISEN TRISBbits.TRISB5 //Se define el Tris para el E Para poderlo configurar como Salida #define PUERTOTRS TRISD #define PUERTO LATD

// Se define el TRIS del puerto que se usa como interfaz en este caso el Puerto C // Se define El LAT del puerto que se usa como interfaz en este caso el C

void lcd_init(); void lcd_control(char); void lcd_dato(char); void lcd_clear_diplay(); void lcd_cursor_home(); void lcd_print(char*); void lcd_print_with_position(int, int, char*); void lcd_goto(int, int); void lcd_put_caracter(char, char[]); void lcd_time_control();

/* * Configuracion de Puertos * Iniciliaza el los puertos requeridos para el LCD * Ademas lo inicializa a 4 Bits */ void lcd_init() { TRISRS = 0; //Configuramos el Pin RS como salida TRISEN = 0; //Configuramos el Pin E como salida PUERTOTRS = 0b00001111; //Configuramos El nibble mas significativo como Salidas (Bus de 4 Bits)) RS = 0; //Aseguramos RS en 0 EN = 0; //Aseguramos E en 0 PUERTO = 0; //Aseguramos el Puerto de datos en 0 /* * Configuracion del control del LCD

*/ __delay_ms(50); // Tiempo de espera a que se estabilicen los puertos lcd_control(0x02); //Asegura el Cursos del LCD Al inicio (Home) lcd_control(0x28); //Configura el LCD a 4 Bits, 2 Lineas Y Fuente de 5*8; Lineas Esto se llama el function set lcd_control(0x0C); //LCD Prendido, Cursor Apagado, Destello Cursor apagado; Esto se Llama Diplay on/off Control lcd_control(0x06); //No rota el mensaje Y se incrementa el contador de direccion. Esto se Llama Entry Mode Set }

/* * Esta rutina se encarga de tomar un dato y ponerlo en el puerto de datos * teniendo en cuenta que es a 4 bits, por lo tanto tiene que hacer cambio de ninbles * primer se envia el nible mas significativo y luego se envia el menos significativo */ void lcd_control(char dato) { RS = 0; PUERTO = dato & 0xF0; lcd_time_control(); PUERTO = ((dato & 0x0F) << 4); lcd_time_control(); __delay_ms(2); }

/* * Está rutina se encarga de tomar un dato y ponerlo sobre el puerto de datos * especificamente para escribir un caracter sobre el LCD * */ void lcd_dato(char dato) { RS = 1; PUERTO = dato & 0xF0; lcd_time_control(); PUERTO = ((dato & 0x0F) << 4); lcd_time_control(); __delay_us(50); }

/* * Rutina encargada de limpiar el LCD

*/ void lcd_clear_display() { lcd_control(0x01); }

/* * El puntero regresa al inicio sin modificar los datos del LCD */ void lcd_cursor_home() { lcd_control(0x02); }

/* * Imprime una cadena de caractres en el LCD */ void lcd_print(char *dato) { while (*dato) // Mientras no sea Null { lcd_dato(*dato); // Envio el dato al LCD dato++; // Incrementa el buffer de dato } }

/* * Imprime una cadena de caracteres en la pisicion X y Y que se le pasen */ void lcd_print_with_position(int x, int y, char *dato) { char posicion; switch (y) { case 1: posicion = 0x80 + x; break; case 2: posicion = 0xC0 + x; break; default: posicion = 0x80 + x; break; } lcd_control(posicion); lcd_print(dato);

}

/* * Pone el puntero en la posicion deseada */ void lcd_goto(int x, int y) { char posicion; switch (y) { case 1: posicion = 0x80 + x; break; case 2: posicion = 0xC0 + x; break; default: posicion = 0x80 + x; break; } lcd_control(posicion); }

/* * Guardar caracteres especiales. en la CGRAM */ void lcd_put_caracter(char adress, char caracter[]) { int i; lcd_control(0x40 + (adress * 8)); for (i = 0; i < 8; i++) { lcd_dato(caracter[i]); } }

/* * Genera un Pulso de control Ese pulso es un pulso de E a 1 milisegundos */ void lcd_time_control() { EN = 1; __delay_us(5); EN = 0; __delay_us(5); }

“uart.h”:

char Read_UART() { while(!RCIF); //leer únicamente si el buffer no está ocupado return RCREG; }

void Read_Text_UART(char *Output, unsigned int length) { unsigned int i; for(i=0;i
void Write_UART(char data) { while(!TXIF); // escribir únicamente si el buffer no está ocupado TXREG = data; }

void Write_Text_UART(char *text) { int i; for(i=0;text[i]!='\0';i++) //escribir hasta que el final de la cadena { Write_UART(text[i]); } }

CÓDIGO EN NETBEANS:

package proyecto4; import jPicUsb.*;

public class main extends javax.swing.JFrame { public main() { initComponents(); try{ iface.load(); System.out.println("Libreria kPicUSB inicializada"); } catch(Exception e){ setTitle(e.getMessage()); System.out.println(e.getMessage()); } } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jButton1 = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); jTextPane1 = new javax.swing.JTextPane();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1);

jButton1.setText("INICIO"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } });

jTextPane1.setText("UNI - FIEE - EE637N2"); jScrollPane2.setViewportView(jTextPane1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(32, 32, 32) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGap(147, 147, 147) .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGap(132, 132, 132) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(37, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap()

.addComponent(jButton1) .addGap(18, 18, 18) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(17, Short.MAX_VALUE)) );

pack(); }//

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { byte [] buf_sal = new byte [32]; buf_sal[0]=0; try{ byte [] buf_ent = iface.QWriteRead(buf_sal, 1, 1, 1000); System.out.println("Temperatura: "+buf_ent[0]); jTextArea1.setText("Temperatura: "+buf_ent[0]); } catch(Exception ex){ System.out.println("ERROR: "+ ex.getMessage()); } }

public static void main(String args[]) { //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //

java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new main().setVisible(true); } }); } private javax.swing.JButton jButton1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextPane jTextPane1; }

More Documents from "Heraldo Fortuna"