Ir ao conteúdo
  • Cadastre-se
LEOPUENA

UART PIC18F4550 <--> PC [Ajuda]

Posts recomendados

Ola pessoal,,,,

estou com um problema ao comunicar o PIC18F4550 com o PC. Fiz a simulação no proteus e tudo funciona como deve ser. Quando passo pra placa o ciruito funciona excepto a parte da comunicação. Parece ser um problema geral porque acontece em todos programas e em todos PICs.

A principio Fiz programas no CCS. Depois fiz um teste básico no MikroC e aconteceu o mesmo. Tentei fazer em ASM mas nem consigo compilar um programa para essa família :confused: ....

Aqui tem o código feito no CCS



///////////////////////////////////////////////////////
// ELECTROPUBLITEC //
// TESTE PARA COMUNICAÇÃO NO PIC18F4550 //
// CRIADO POR LEOPUENA AOS 28-07-2013 //
///////////////////////////////////////////////////////


#include <18F4550.h>
#FUSES INTRC_IO
#FUSES NOMCLR

#use fast_io(C)
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#byte porta=0xf80
#byte portb=0xf81
#bit led1=porta.0
#bit led2=porta.1
#bit bt1=portb.6
#bit bt2=portb.7

////////////////////////////////////////////////////////////////////////////////
void main()
{

set_tris_a(0x00);
set_tris_b(0xff);
set_tris_c(0x80);
port_b_pullups(TRUE);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
puts("LEOPUENA");

while(true)
{

if(kbhit()){
output_high(pin_a2);
switch(getc())
{
case '1': led1=!led1; break;
case '2': led2=!led2; break;
default: puts("COMANDO INVALIDO");
}
output_low(pin_a2);
}

if(!bt1){ led1=!led1; puts(" LED1 "); delay_ms(400); }
if(!bt2){ led2=!led2; puts(" LED2 "); delay_ms(400); }
}

}

O código no MikroC



///////////////////////////////////////////////////////
// ELECTROPUBLITEC //
// TESTE PARA COMUNICAÇÃO NO PIC18F4550 //
// CRIADO POR LEOPUENA AOS 28-07-2013 //
///////////////////////////////////////////////////////

sbit led1 at RA0_bit;
sbit led2 at RA1_bit;
sbit bt1 at RB6_bit;
sbit bt2 at RB7_bit;

////////////////////////////////////////////////////////////////////////////////
void main()
{

trisa=(0x00);
trisb=(0xff);
trisc=(0x80);
intcon2=0;
ADCON1=0B00001111;
UART1_Init(9600); // Initialize UART module at 9600 bps
Delay_ms(100); // Wait for UART module to stabilize

UART1_Write_Text("LEOPUENA");
UART1_Write(13);
led1=led2=0;
while(1)
{
if (UART1_Data_Ready()) { // If data is received,
switch(UART1_Read())
{
case '1': led1=!led1; break;
case '2': led2=!led2; break;
default: UART1_Write_Text("COMANDO INVALIDO");
}
}

if(!bt1){ led1=!led1; UART1_Write_Text(" LED1 "); delay_ms(400); }
if(!bt2){ led2=!led2; UART1_Write_Text(" LED2 "); delay_ms(400); }
}

}

E o código em assembly. Não consigo compilar esse programa. Se puder postem um programa básico em ASM.





LIST P=18F4550, F=INHX32

#include "P18F4550.INC"


CONFIG PWRT=ON ; Power on timer
CONFIG BOR=OFF ; Brown out off
CONFIG WDT=OFF ; Watch dog off
CONFIG PBADEN=OFF ; Port B en digital IO
CONFIG LVP=OFF ; Pas de prog single supply
CONFIG ICPRT=OFF ; Port de debug off
CONFIG DEBUG=OFF ; Debug off
CONFIG MCLRE = OFF; MCLEAR Pin on
CONFIG FOSC = INTOSCIO_EC


ATRASO1 RES 1
ATRASO2 RES 1
#DEFINE LED1 PORTA,0
#DEFINE LED2 PORTA,1
#DEFINE BT1 PORTB,6
#DEFINE BT2 PORTB,7

org 0
goto INICIO



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO


MOVLW B'00000000'
MOVWF TRISA ; DEFINE OS PINOS DO PORTA COMO ENTRADA
MOVLW B'11111111'
MOVWF TRISB ; DEFINE OS PINOS DO PORTB COMO SAIDA
MOVLW B'10000000'
MOVWF TRISC ; DEFINE OS PINOS DO PORTC COMO SAIDA

MOVLW D'6'
MOVWF SPBRG ;DEFINIÇÃO DE BAUD-RATE PARA 9600
MOVLW B'00100000'
MOVWF TXSTA ;HABILITA E CONFIGURA O MODULO USART (ASSINCRONO, 8-BIT, LOW SPEED)

MOVLW B'10000000'
MOVWF RCSTA ;HABILITA AS PORTAS SERIAIS

CLRF PORTC
CLRF PORTB
CLRF PORTA

CLRF ATRASO1
CLRF ATRASO2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN

BTFSS BT1
GOTO FUNCAO1

BTFSS BT2
GOTO FUNCAO2

GOTO MAIN


;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
FUNCAO1

BTFSS LED1
GOTO $+3

BCF LED1
GOTO $+2

BSF LED1

MOVLW D'33' ;b
MOVWF TXREG
CALL PAUSA

GOTO MAIN

;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
FUNCAO2

BTFSS LED2
GOTO $+3

BCF LED2
GOTO $+2

BSF LED2

MOVLW D'34' ;b
MOVWF TXREG
CALL PAUSA

GOTO MAIN



;---------------------------------------------------------------------------
PAUSA


DECFSZ ATRASO1,1 ;Decrement Delay1 by 1, skip next instruction if Delay1 is 0
GOTO PAUSA
DECFSZ ATRASO2,1
GOTO PAUSA
RETURN



;********************************************************************
END ;FIM DA COMPILACAO


O compilador não indica a linha onde está o erro e eu não consegui interpreta-lo. Tentei no MPLAB 8.83 e MPLABX. Aqui está o log do MPLABX, o erro está negritado.


make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `D:/PICANDO 2013/TESTE 4550/TESTE_ASM.X'
make -f nbproject/Makefile-default.mk dist/default/production/TESTE_ASM.X.production.hex
make[2]: Entering directory `D:/PICANDO 2013/TESTE 4550/TESTE_ASM.X'
"C:\Program Files (x86)\Microchip\MPLABX\mpasmx\mplink.exe" -p18f4550 -w -z__MPLAB_BUILD=1 -odist/default/production/TESTE_ASM.X.production.cof "build/default/production/TESTE ASM.o"
MPLINK 4.48, Linker
Device Database Version 1.13
Copyright (c) 1998-2011 Microchip Technology Inc.
[B]Error - file './build/default/production/TESTE ASM.o', section '.org_0', Symbol '_.org_0_0038' is not word-aligned.
It can not be used as the target of a call or goto instruction.
Errors : 1
[/B]
make[2]: Leaving directory `D:/PICANDO 2013/TESTE 4550/TESTE_ASM.X'
make[1]: Leaving directory `D:/PICANDO 2013/TESTE 4550/TESTE_ASM.X'
make[2]: *** [dist/default/production/TESTE_ASM.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 9s)


E ainda o circuito feito no proteus

1005781_4563637627250_1696306657_n.jpg

Agradeceria muito que dessem uma olhada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leo, como está realizando a parte de ligação física ao computador?

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou a usar um conversor USB-TTL. E testei com vários programas, alguns feitos por mim no C#.

Este é o conversor. tenho as drive e já uso com outros PICs como o PIC18F4520.

conversor-usb-ttl-rs232-pic-avr-micro-controladore-e-ou_MLB-O-3047285517_082012.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leo,ja que voce programou nestas versões,voce poderia considerar a aprender a programar em Delphi,no PC.

É uma linguagem muito estruturada e fácil.

Assim voce pode aposentar a serial e usar USB nativo muito mais fácil que o próprio programa no PIC,deste modo poderia te passar tanto o software do pic como o do PC e voce nunca mais iria ficar limitado a nada realcionado a PIC/PC.

Poderia usar o Delphi 7,leve e completo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma boa dica vtrx. Eu comecei a aprender programação em C# exactamente pra isso, comunicação USB, e compramos o 4550 por possuir o modulo USB. Mas por estar a aprender C# agora fiquei um pouco limitado em relação a esse tipo de comunicação. Será que programando em Delphi ficaria mais viável??

Eu tenho varias apostilas sobre Delphi mas não tenho ainda o compilador. Vou ver se arranjo. Contudo, não sei se terei tempo e vou continuar a tentar resolver esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Será que programando em Delphi ficaria mais viável??

Todas as bobliotecas de uso com o hardware do PC são facilmente usadas no Delphi/PIC.

Pode-se dizer que o Delphi é o CCS do PC:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, já tenho o delphi em mão :cool:

Porém, ainda preciso resolver esse problema. Fiz alguns testes e notei que se fazer o programa para o 18F4520 e enviar para o 18F4550 ele responde normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ok, já tenho o delphi em mão

Qual a versão?

Depois poderemos criar uma interface em USB nativo para voce se livrar da serial.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É a versão 7.0. Mas Preciso primeiro aprender alguns conceitos básicos porque nunca programei em delphi nem em pascal.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mas Preciso primeiro aprender alguns conceitos básicos porque nunca programei em delphi nem em pascal

o que não vai faltar para voce são exemplos completos na net,no youtube está cheio de exemplos para iniciantes.

É só clicar no .DPR que o projeto inteiro ja abre,aí é só clicar na 'seta verde' la em cima a direita no Delphi para testar o projeto e gerar um .exe único.

Quando estiver mais a vontade,te passo como instalar o componente de acesso a USB nativo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Este tópico está parado há muito tempo. Certifique-se que a sua mensagem tem a ver com o tema sendo discutido. Obrigado.

Junte-se à conversa

Você pode postar agora e cadastrar-se depois. Se você tem uma conta, faça o login para postar.

Visitante
Responder

×   Você colou conteúdo com formatação.   Restore formatting

  Só é possível ter até 75 emoticons.

×   O link foi automaticamente convertido para mostrar o conteúdo.   Clique aqui para mostrá-lo como link comum

×   Seu texto anterior foi restaurado.   Limpar o editor

×   You cannot paste images directly. Upload or insert images from URL.






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!