Escolar Documentos
Profissional Documentos
Cultura Documentos
Vinicius Baldo
CÂMPUS CATANDUVA - SP
JULHO DE 2018
1. INTRODUÇÃO
2. OBJETIVO
3. MATERIAIS E METODOS
G = (R1 / R2) + 1
Figura 2. Circuito do Termopar Tipo K. (a) Circuito; (b) Simulação da placa em 3D.
(a) (b)
Fonte: Autor, 2018.
2.6. Aquisição do Equacionamento do Range
2.7. COMPONENTES
Biblioteca (def_principais.h)
#ifndef _DEF_PRINCIPAIS_H
#define _DEF_PRINCIPAIS_H
#endif
/*
* Termopar.c
*
* Created: 10/05/2018 22:48:02
* Author: HELVIO GUEDES
*/
#include "def_principais.h"
#include "LCD.h"
#include "LTC1298.h"
#include "USART.h"
int main()
{
DDRD = 0xFF;
//configura ADC
inic_SPI();
inic_LCD_4bits();
initUSART(BAUD_PRESCALE);
sei();
while(1)
{
valor=0;
for(int i=0; i<MEASURES; i++) {valor+=spi();}
valor = valor/(MEASURES+1);
valor=spi();
ident_num(Temp_Real, digitos);
cmd_LCD(0x81,0);
escreve_LCD(digitos);
printString("Temperatura: ");
printString(digitos);
printString(" C\n");
_delay_ms(1000);
}
}
ISR(ADC_vect)
{
Temp_LM35 = (ADC + (ADC*19)/256); //Converção do LM35
}
#ifndef _LCD_H
#define _LCD_H
#include "def_principais.h"
//1 para via de dados do LCD nos 4 MSBs do PORT empregado (Px4-D4, Px5-D5, Px6-
D6, Px7-D7)
#define CONTR_LCD PORTD //PORT com os pinos de controle do LCD (pino R/W
em 0).
#define E PD6 //pino de habilitação do LCD (enable)
#define RS PD7 //pino para informar se o dado é uma instrução ou
caractere
#define tam_vetor 5 //número de digitos individuais para a conversão por
ident_num()
#define conv_ascii 48 //48 se ident_num() deve retornar um número no formato
ASCII (0 para formato normal)
#endif
#include "LCD.h"
//-------------------------------------------------------------------------------
// Sub-rotina para enviar caracteres e comandos ao LCD com via de dados de 4 bits
//-------------------------------------------------------------------------------
{
if(cd==0)
clr_bit(CONTR_LCD,RS);
else
set_bit(CONTR_LCD,RS);
#if (nibble_dados)
#endif
pulso_enable();
#if (nibble_dados)
#endif
pulso_enable();
if((cd==0) && (c<4)) //se for instrução de retorno ou limpeza espera LCD
estar pronto
_delay_ms(2);
}
//-----------------------------------------------------------------------------//
//Sub-rotina para inicialização do LCD com via de dados de 4 bits //
//-----------------------------------------------------------------------------//
//interface de 8 bits
#if (nibble_dados)
DADOS_LCD = (DADOS_LCD & 0x0F) | 0x30;
#else
DADOS_LCD = (DADOS_LCD & 0xF0) | 0x03;
#endif
//interface de 4 bits, deve ser enviado duas vezes (a outra está abaixo)
#if (nibble_dados)
DADOS_LCD = (DADOS_LCD & 0x0F) | 0x20;
#else
DADOS_LCD = (DADOS_LCD & 0xF0) | 0x02;
#endif
pulso_enable();
cmd_LCD(0x28,0);//interface de 4 bits 2 linhas (aqui se habilita as 2
linhas)
//são enviados os 2 nibbles (0x2 e 0x8)
cmd_LCD(0x08,0); //desliga o display
cmd_LCD(0x01,0); //limpa todo o display
cmd_LCD(0x0C,0); //mensagem aparente cursor inativo não piscando
cmd_LCD(0x80,0); //inicializa cursor na primeira posição a esquerda - 1a
linha
}
//-------------------------------------------------------------------------------
//Sub-rotina de escrita no LCD - dados armazenados na RAM
//-------------------------------------------------------------------------------
void escreve_LCD(char *c)
{
for (; *c!=0;c++) cmd_LCD(*c,1);
}
//-------------------------------------------------------------------------------
//Sub-rotina de escrita no LCD - dados armazenados na FLASH
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//Conversão de um número em seus digitos individuais
//-------------------------------------------------------------------------------
do
{
*disp = (valor%10) + conv_ascii; //pega o resto da divisao por 10
valor /=10; //pega o inteiro da divisão por 10
disp++;
}while (valor!=0);
}
#include "def_principais.h"
#ifndef BAUD
#define BAUD 9600 /* set a safe default baud rate */
#endif
#include "USART.h"
#include <util/setbaud.h>
{
UBRR0H = /*(unsigned char)*/(PRESCALE>>8); //Ajusta a taxa de transmissão
UBRR0L = /*(unsigned char)*/PRESCALE;
UCSR0A = 0;
UCSR0B = (1 << TXEN0) | (1 << RXEN0) | (1 << RXCIE0);/* Enable USART
transmitter/receiver and interruption*/
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); /* 8 data bits, 1 stop bit */
}
{
while (!( UCSR0A & (1<<UDRE0)) );
UDR0 = data;
}
{
while (!(UCSR0A & (1<<RXC0)));
return UDR0;
}
{
unsigned int i = 0;
while (myString[i])
{
transmitByte(myString[i]);
i++;
}
}
#ifndef LTC1298_H_
#define LTC1298_H_
#include "def_principais.h"
void inic_SPI();
unsigned char USART_SPI(unsigned char dado);
unsigned int spi();
uint8_t SPI_MasterTransmit(uint8_t cData);
uint16_t ltc1298_Read(uint8_t mode, uint8_t bitOrder );
#endif /* LTC1298_H_ */
#include "LTC1298.h"
void inic_SPI()
{
DDRB = DD_MOSI | DD_SCK | DD_SS;
PORTB |= (1<<DD_SS)|(1<<DD_MOSI)|(1<<DD_SCK);
SPCR |= (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);
{
_delay_ms(100); //diminuir esse tempo
habilita_SS();
USART_SPI(CH0 | MSB);
tempH=USART_SPI(0x00); //0x00
tempL=USART_SPI(0x00);
desabilita__SS();
unsigned int valor16bits = (tempH<<5) | ( tempL >>3);
_delay_ms(1);
return valor16bits;
}
{
SPDR = dado; //envia um byte
while(!(SPSR & (1<<SPIF))); //espera envio
return SPDR; //retorna o byte recebido
}
3. RESULTADOS
5. REFERÊNCIAS BIBLIOGRÁFICAS