alexandro umbert
-
Posts
25 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por alexandro umbert
-
-
Ola,
Utilizo PIC 18f4550,e estou fazendo trabalho com no compiler CCS,vi varios locais na net conectando mouse no pinos do PIC e consegue pegar informação do eixo X e Y .
Alguem já fez com PIC?
segue video do cara fez com arduino: https://www.youtube.com/watch?v=SXQfT7c-9rU&t=21s
-
Boa noite Pessoal!
neste link tem sistema de bussola eletronica feita para pIC18f4550 no compilador CCS.
porém no video ele está utilizando oscilador interno de 8MHZ e minha placa está montada com clock 20MHZ.
Alguem poderia me dar uma ajuda,compilei o sistema e envia pic ,mas não mostra valores reais.
projeto completo está aqui:
https://www.4shared.com/rar/6EYF8d2Mce/PIC18F4550_HMC5883L_CCS.html?
https://www.youtube.com/watch?v=Rji4lxLLp9A&pbjreload=10
-
@ViniciusKruz @ViniciusKruz tem essa parte do codigo que fica acima do for.
#define Buffer_Size 1000
int16 VetorPos;
char TpS;
short int TemPacote;
char RxBuf[Buffer_Size];
char ValorL;
int16 k;
char j;
char divT;
char Lat;
int16 m_Boot;
int1 f_Boot;
float variavel;
float matrix[3][3];
float latitude,latReal;
char latCompleto[10];
char longCompleto[10];#INT_RDA
void Serial_isr(void)
{
char temp;
temp = RCREG;
TpS = 5;
RxBuf[VetorPos] = temp;
VetorPos++;
if(VetorPos>1000){
TpS = 0;
TemPacote = 1;
return;
}
}#INT_TIMER1
void int_timer_1 () {
set_timer1(50535);
if(TpS>0){TpS--;if(TpS==0){TemPacote=1;}}
if(divT-- == 0){
divT =20;
Life = !Life;
}
}void LimpRxBuf (void){
int16 i;
for(i=0;i<1000;i++){
RxBuf = 0;
}
}void main(void)
{
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(50535);
divT = 100;
enable_interrupts(INT_TIMER1);set_tris_A(TRIS_A_INIT);
set_tris_B(TRIS_B_INIT);
set_tris_C(TRIS_C_INIT);
set_tris_D(TRIS_D_INIT);
set_tris_E(TRIS_E_INIT);
lcd_init();
delay_ms(1);
lcd_putc("\fROBO GUIADO GPS");
lcd_putc("\n FABIO BETIOL");
delay_ms(5000);
LimpRxBuf();
VetorPos=0;
TemPacote = 0;
TpS = 0;
m_Boot = 60000;
f_Boot = 1;
enable_interrupts(GLOBAL);
ValorL = RCREG;
CREN = 0; CREN = 1;
-
@ViniciusKruz n tem biblioteca.
codigo
for(;;){
if(f_Boot == 0){
if(TemPacote == 1){
TemPacote = 0;
for(k=0;k<500;k++){
ValorL = RxBuf[k];
if(ValorL == '$'){
ValorL = RxBuf[k+5];
if(ValorL == 'L'){
lcd_gotoxy(1,1);
lcd_putc("Lat ");
for(j=0;j<10;j++){
Lat = RxBuf[k+7+j];
lcd_putc(Lat);
latCompleto[j]=Lat;
}
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<10;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat);
longCompleto[j]=Lat;
latReal= atof(latCompleto);
if (latitude< latReal){
output_low(PIN_B0);
}
else
{
output_high(PIN_B0);
}
if (latitude >latReal){
output_low(PIN_B2);
}
else
{
output_high(PIN_B2);
}
}
break;
}
}
}
LimpRxBuf();
VetorPos=0;
TpS = 0;
}
}
if(m_Boot>0){m_Boot--;if(m_Boot == 0){
f_Boot = 0;enable_interrupts(INT_RDA);
delay_ms(100);ValorL=RCREG;CREN=0;CREN=1;
}
}
delay_ms(1);if (input(PIN_B5)==0){
latitude= atof(latCompleto);
printf(LCD_PUTC,"\f%1.5f ",latitude);
delay_ms(1000);
}
}}
-
-
@ViniciusKruz obrigado pela alerta do problema,
tentei diminuir para o valor de 1000 para 100,mas infelizmente não funcionou.
-
or(;;){
float variavel;
float matrix[3][3];
float latitude,latReal;
char latCompleto[10];
char longCompleto[10];if(f_Boot == 0){
if(TemPacote == 1){
TemPacote = 0;
for(k=0;k<1000;k++){
ValorL = RxBuf[k];
if(ValorL == '$'){
ValorL = RxBuf[k+5];
if(ValorL == 'L'){
lcd_gotoxy(1,1);
lcd_putc("Lat ");
for(j=0;j<10;j++){
Lat = RxBuf[k+7+j];
lcd_putc(Lat);
latCompleto[j]=Lat;
}
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<10;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat);
longCompleto[j]=Lat;
}
latReal= atof(latCompleto);
if (latitude< latReal){
output_low(PIN_B0);
delay_ms(20);
}
else
{
output_high(PIN_B0);
}
if (latitude >latReal){
output_low(PIN_B2);
delay_ms(20);
}
else
{
output_high(PIN_B2);
}
break;
}
}
}
LimpRxBuf();
VetorPos=0;
TpS = 0;
}
}
if(m_Boot>0){m_Boot--;if(m_Boot == 0){
f_Boot = 0;enable_interrupts(INT_RDA);
delay_ms(100);ValorL=RCREG;CREN=0;CREN=1;
}
}
delay_ms(1);if (input(PIN_B5)==0){
latitude= atof(latCompleto);
printf(LCD_PUTC,"\f%1.5f ",latitude);
delay_ms(1000);
}
}
}
Em negrito tem parte que faz a comparação,Porque será que não faz a comparação em negrito na mesma velocidade que atualiza as coordenadas do gps? gps a cada 1 segundo atualiza.
devo colocar algum comando while(true)?
-
adicionado 1 minuto depois
@ViniciusKruz tá certo fazer isso?
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<10;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat);
longCompleto[j]=Lat;
}
break;
}
}
}
LimpRxBuf();
VetorPos=0;
TpS = 0;
}
}
if(m_Boot>0){m_Boot--;if(m_Boot == 0){
f_Boot = 0;enable_interrupts(INT_RDA);
delay_ms(100);ValorL=RCREG;CREN=0;CREN=1;
}
}
delay_ms(1);
latReal= atof(latCompleto);
if (input(PIN_B5)==0){
latitude= atof(latCompleto);
printf(LCD_PUTC,"\f%1.5f ",latitude);
delay_ms(1000);
}
if (atof(latCompleto) < latReal){
output_low(PIN_B0);
delay_ms(20);
}
else
{
output_high(PIN_B0);
}
if (atof(latCompleto) >latReal){
output_low(PIN_B2);
delay_ms(20);
}
else
{
output_high(PIN_B2);
}
}
}
-
@ViniciusKruz ok entendi.
Veja que 1 eu to querendo gravar a latitude real na variavel latitude:
if (input(PIN_B5)==0){/////////////////////////grava coordenada real na variavel latitude.
latitude= atof(latCompleto);
printf(LCD_PUTC,"\f%1.5f ",latitude);
delay_ms(1000);
}e depois preciso comparar entre a latitude gravada e latitude real :
if (latitude<latReal){
output_low(PIN_B0);
delay_ms(20);
}
if (latitude>latReal){
output_low(PIN_B2);
delay_ms(20);
}assim caso eu esteva com o modulo e coordenada for maior ou menor com latitude gravada na variavel latitude e executar a função.
- 1
-
@ViniciusKruz Obrigado,agora estou clareando as ideias!
No primeiro for mostra Latitude e segundo for mostra a Longitude.
E por isso q tem dois for.
if (input(PIN_B5)==0){
// latitude=0;
latitude= atof(latCompleto);
matrix[0][1]= latitude;
printf(LCD_PUTC,"\f%1.5f ",latitude);delay_ms(1000);
}
if (lat<latitude){
output_high(PIN_B0);
}
if (lat>latitude){
output_high(PIN_B2);
}Agora uma duvida,quando aperto botão a variavel latitude estão sendo gravada a variavel.
agora preciso comparar a variavel latitude e variavel Lat,a variavel Lat por ser tipo char,posso comparar com a tipo float?
-
opa, agora tá gravando ok
Mas exemplo as coordenadas mostradas no LCD tá 2226.34678....está gravando valores pouco acima ou abaixo...exemplo
2226.34599.
segue a modificação que fiz:
for(j=0;j<10;j++){
Lat = RxBuf[k+7+j];
lcd_putc(Lat);
latCompleto[j]=Lat;
}
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<10;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat);
}
break;
}
}
}
LimpRxBuf();
VetorPos=0;
TpS = 0;
}
}
if(m_Boot>0){m_Boot--;if(m_Boot == 0){
f_Boot = 0;enable_interrupts(INT_RDA);
delay_ms(100);ValorL=RCREG;CREN=0;CREN=1;
}
}
delay_ms(1);
if (input(PIN_B5)==0){
latitude= atof(latCompleto);
matrix[0][1]= latitude;
printf(LCD_PUTC,"\f%1.5f ",matrix[0][1]);
delay_ms(1000);
}
}
} -
@ViniciusKruz valeu amigo,consegui com comando atof.
Mas tem momento que a variavel aparece só zeros,veja como ficou agora em negrito que alterei:
}
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<10;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat);
latitude= atof(Lat);
}
break;
}
}
}
LimpRxBuf();
VetorPos=0;
TpS = 0;
}
}
if(m_Boot>0){m_Boot--;if(m_Boot == 0){
f_Boot = 0;enable_interrupts(INT_RDA);
delay_ms(100);ValorL=RCREG;CREN=0;CREN=1;
}
}
delay_ms(1);if (input(PIN_B5)==0){
printf(LCD_PUTC,"\f%1.5f ",latitude);
delay_ms(1000);
}
}
dá pra fazer alguma alteração? -
sim está correto,está recebendo coordenadas corretas.
-
@ViniciusKruz@ViniciusKruz eu já tentei esse comando que me falaram atof,realmente ,mas o compilador ccs dizem que não aceita.
não teria uma outra opção para fazer isso?
olha isso:
for(;;){
float variavel;
float matrix[3][3];
float latitude;if(f_Boot == 0){
if(TemPacote == 1){
TemPacote = 0;
for(k=0;k<1000;k++){
ValorL = RxBuf[k];
if(ValorL == '$'){
ValorL = RxBuf[k+5];
if(ValorL == 'L'){
lcd_gotoxy(1,1);
lcd_putc("Lat ");
for(j=0;j<10;j++){
Lat = RxBuf[k+7+j];
lcd_putc(Lat);
}
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<10;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat);
- 1
-
Ok entendi,
como ficaria para armazenar esses 11 caracteres recebido da variavel char e armazenar na variavel float latitude?
-
Realmente é isto mesmo que estou querendo,meu gps envia serialmente a latitude exemplo:4547.34567 neste formato ele envia.
Poederia me ajudar neste codigo? para receber numero de cada vez ,armazenar em um buffer.
depois disso armazeno na variavel latitude.
-
@ViniciusKruz ola,obrigado.
O codigo do gps fica enviando coordenadas pela variavel tipo char lat e
float latmin=3456.6785;
float latitude;
char Lat;
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<12;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat); variavel Lat que envia coordenadas no display
latitude=lat;
if (latitude>latmin){
output_high(PIN_B3);
}if (latitude<latmin){
output_high(PIN_B3);
}recebida pela variavel LatEu preciso que as coordenadas recebida pela variavel Lat sejam colocada na variavel latitude e assim jogar esse valor na matriz:
latitude=lat;
matrix[2][2]=latitude;
-
Ola amigos!
Tenho esse codigo:
float latmin=3456.6785;
float latitude;
char Lat;
lcd_gotoxy(1,2);
lcd_putc("Lon ");
for(j=0;j<12;j++){
Lat = RxBuf[k+21+j];
lcd_putc(Lat);latitude=lat;
if (latitude>latmin){
output_high(PIN_B3);
}if (latitude<latmin){
output_high(PIN_B3);
}Esse codigo é parte do comunicação de GPS,e preciso gravar valor recebido da variavel char LAT e grave este valor na matriz,alguem poderia me ajudar?
-
Isadora obrigado,verificando o circuito venho lhe informar que o mesmo tinha resistor aterrado.
puts que falhaaa...kkkkk
-
boa noite.
Estou com esse código é está dando problema,estou utilizando LDR.
O valor só fica oscilando até 1023,porém quando coloco luz e escuro ele não altera muito o valor.
codigo:
#include <18F4550.h>#device ADC=10;#fuses NOWDT,NOPROTECT,NOLVP,HS#use delay(clock=20000000)//#define trisa 0b00000000#define trisb 0b00000000 // tris utilizado pelo LCD#define trisc 0b11111111#define trisd 0b00000000#include <lcd.c>int16 sensor;int main() {lcd_init();setup_adc_ports(AN0);setup_adc(ADC_CLOCK_DIV_8);set_adc_channel(0);delay_us (20);while (TRUE){sensor = read_adc();printf (lcd_putc,"\fVALOR:%ld",sensor);delay_ms (200);}} -
Boa noite.
Estou fazendo um robozinho e vou utilizar sensores ultrassônicos,eu fiz o código no compile CCS e gostaria se alguém verificasse se existe erro.
#include <18F4550.h>#device ADC=10;#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV2,VREGEN#use delay(clock=48000000)#define trisa 0b00000000 // Configurado para saida#define trisb 0b00000000 // tris utilizado pelo LCD#define trisc 0b11111111#define trisd 0b00000000int16 time;
float distance;
#define trig pin_D1
#define echo pin_C0
void main()
{
delay_ms(1000);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
while(true)
{
output_high(trig);
delay_us(10);
output_low(trig);
while(!input(ECHO))
{}
set_timer1(0);
while(input(ECHO))
{}
time=get_timer1();
distance=time*0.017;
if (distance < 4)
{
//
}
if (distance > 4)
{
//
}
delay_ms(1000);
}
} -
Ola Amigos,
estou tentando instalar um sensor capacitivo 6~36VDC NPN ,o sensor utiliza 3 fios sendo 2 alimentação e 1 sinal,instalação no PIC16f628a.
Corrente de saída = 200mA
SE alimentar 12VDC no positivo e terra e o no fio do sinal colocar resistor de 10k e alimentar no PIC ,vai funcionar?
Alguém poderia me ajuda em um circuito simples?
abraços
-
Boa tarde!
Estou com um código do PIC18f4550 compilado no CCS,foi gravado com sucesso no PIC.
Foi utilizado os pinos corretamentes no LCD ,porém ele não mostra a mensagem.
Modelo LCD: MGD1602B SERIES LCD MODULE
Alguem poderia me ajudar?
#include <18f4550.h>
#device ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_C1
#define LCD_RW_PIN PIN_C0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
void main()
{
set_tris_d(0x00);
set_tris_c(0x00);
output_d(0x00);
lcd_init();
Delay_ms(100);
lcd_gotoxy(3,1);
Delay_ms(1000);
lcd_putc("teste!");
lcd_gotoxy(4,2);
lcd_putc("LCD PIC");
while(1);
}
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
comunicação rs232 PIC18f4550 TX RX
em Microcontroladores
Postado
Ola pessoal
Estou fazendo comunicação PIC e nextion RX TX,,mas quando eu aperto o botão do nextion para acender led,ele envia apenas uma vez o caracteres,depois quando eu aperto outro botão ele não envia mais nada.
O valor anterior do caracteres fica na tela e não recebe mais nada.
Alguem poderia me ajuda onde está o erro:
while(true){
char=d;
if(kbhit())
{
d=getc();
printf(lcd_putc,"\%u",d);
delay_ms(200);
if(d==10){
output_low(PIN_B1);
}
}