Novatos / Aprendiz

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Novatos / Aprendiz

Mensagempor juarezbazzo » 23 Jun 2007 01:34

Olá caros colegas, faz tempo que não coloco nem uma mensagem no fórum, pois os “eternos” aprendizes fazem isso, eu que sou autodidata, não tenho muito o que colaborar com os colegas, pois a maioria são profissionais de alto conhecimentos, eu pra conseguir entender alguma coisa (já escrevi sobre isso) demorou muito, até mesmo “quase” queimando literalmente o livro, mas vejo que tem muitos (muitos mesmo) marinheiro de primeira viajem no PIC, mas como são perguntas quase banais pra os entendidos, eles não tem quase em tempo pra ajuda-los, por queria saber se posso colocar os projetos que desenvolvi com ajuda de colegas como Renie, Rairan, Fabio P., Proex e outros, são um relógio gigante (400 LEDs) com termômetro com o PIC16F676, Também com LCD, tem formulas simples mas eficiente, até mesmo o Rairan elogiou pela simplicidade (extrair os dígitos do Binário) é isso mesmo?, bom, é bem comentado, talvez um “novato” dê uma “enxugada” no código-fonte, tem também as fotos e o desenho da placa CI, tem muitos termos que colegas “adiantados” usam que nós (novatos) não sabem que existam, pois vou pesquisa-los e perguntar no fórum pra que serve, uma perguntinha: quero comprar o livro sobre o PIC16F877, mas como ele tem 8k de memória, então tem quatro pagina de escrita, eu já li sobre os desvio tais como o GOTO e o CALL ,tem que especificar a pagina que vai ir, ou seja, eu estou em determinado local da escrita do programa e preciso fazer um desvio, como vou saber que pagina vai estar esse endereço? Tenho que escrever numa pagina todas as rotinas ou endereço dos GOTO e CALL? pra não se perder?, já estive estudando alguns código-fonte do 877, mas é muito vago, chega!
100+; um abraço Juarez Bazzo NH - RS
:shock:
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Mensagempor proex » 23 Jun 2007 07:42

O MPLAB possui duas Diretivas que podem fazer isso que vc precisa, sem ter que se preocupar muito em que pagina as rotinas estão.

Chaman-se LCALL e LGOTO (LONG CALL e LONG GOTO).

Elas ajustam automaticamente os ponteiros de paginas do PIC, esteja onde estiver a rotina chamada.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor juarezbazzo » 23 Jun 2007 10:03

Sem querer abusar de tua paciencia, se eu usar essas diretivas LCALL e LGOTO no lugar GOTO e CALL, seria com se fosse num 16F84, ou seja, poderia escrever o codigo como se fosse o um pic de 2k? claro que eu falo só nessas diretivas. 100+; um abraço
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Mensagempor proex » 23 Jun 2007 10:44

Sim, exatamente isso. Vc nao precisa se preocupar com as mudanças de pagina, o compilador se encarrega disso. Vc pode escrever as sub rotinas em qualquer pagina. O comando Lcall ou Lgoto se encarrega de buscar a sub rotina onde ela estiver.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor juarezbazzo » 23 Jun 2007 15:15

Obrigado Proex, esse era meu medo, pois parecia um bicho de sete cabeça, é assim que os autodidata aprendem, queria saber como colocar o desenho do esquema do circuito no forum, pois muitos aprendizes como eu podem estudar o circuito com o codigo-fonte, isso torna muito facil a aprendizagem pelo estudante, pois se ele estudar algo parecido com o que ele quer fazer, a pessoa fica motivada. 100+; um abraço Juarez Bazzo NH - RS
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Mensagempor icaro51 » 23 Jun 2007 22:44

Uma coisa que eu nunca consegui fazer muito bem quando o programa ocupa varias paginas foi usar o PCL, normalmente eu uso o PCL em rotinas para escrever no LCD e quando eu coloco essas rotinas em outra pagina que nao a 1 eu nao consigo direcional-los, tentei varias coisas e nunca deu certo a solucao que eu achei foi colocar esse tipo de informacao na pag 1 mesmo, mas agora que eu tava lendo o topico a curiosidade voltou, como eu faco para mudar o PCL para uma pagina que nao a 1?
So para ficar mais claro estou postando um exemplo do que estou falando:

Wr_Speedy
clrf frase
Message1
movf frase, w
call SpeedyD
xorlw 0x00
btfsc STATUS, Z
Return
call wr_lcd
incf frase, f
goto Message1
SpeedyD
addwf PCL, f
retlw 'S'
retlw 'p'
retlw 'e'
retlw 'e'
retlw 'd'
retlw 'y'
retlw 0x00
icaro51
Byte
 
Mensagens: 119
Registrado em: 09 Dez 2006 21:56

Mensagempor proex » 24 Jun 2007 10:32

Na verdade, vc tem que se preocupar é com o registrador PCLATH.

Veja esse exemplo:

TAB_TEXTO
    MOVLW HIGH TAB_TEXTO
    MOVWF PCLATH
    INCF PONTEIRO_LETRA,F
    MOVF PONTEIRO_LETRA,W
    ADDWF PCL,F
    RETLW 'T'
    RETLW 'E'
    RETLW 'S'
    RETLW 'T'
    RETLW 'E'
    RETLW '*'

Dessa forma vc pode colocar essa tabela em qualquer pagina e chama-la através do LCALL. Eu uso o caracter "*" para indicar o fim da tabela e o registrador "PONTEIRO_LETRA" deve sempre começar zerado, a tabela se encarrega de ir incrementando ele, até encontrar o caracter "*".

Código: Selecionar todos
CLRF PONTEIRO_LETRA  ; Zera o PONTEIRO_LETRA
LCALL TAB_TESTE    ;Chama a tabela de texto
MOVWF DISPLAY    ;Coloca o valor lido no barramento do display
MOVLW A'*'     ;Compara se o caracter é = á "*"
SUBWF DISPLAY,W     ;Compara se o caracter é = á "*"
BTFSC STATUS,Z     ;Compara se o caracter é = á "*"
GOTO FIM_ESCRITA     ;Se for =, cai fora pois acabou o texto senão,
ENVIA COMANDO AO DISPLAY PARA ESCREVER O DADO QUE JA ESTA NO BARRAMENTO
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor icaro51 » 24 Jun 2007 17:03

Entao mas ainda tenho uma duvida, eu fiz um programinha e coloquei todos os dados depois dos endereco PCL (255), quando eu debugo o programa o PCL vai 253,254,255,0 mas o PCLATH nao muda?! O programa continua indo linha (exemplo) 253,254,255,256,257.
Que diabos e isso que eu nao entendo?
icaro51
Byte
 
Mensagens: 119
Registrado em: 09 Dez 2006 21:56

Mensagempor proex » 24 Jun 2007 18:29

O PCLATH nao deve mudar pois ele indica a pagina em que a tabela esta. Somente o PCL muda.

A pagina do PIC possui 2Kbytes, mas o PCLATH aponta somente para cada porçao de 256 Bytes dessa pagina.

Se vc colocar PCLATH = 0, ele vai apontar somente para os primeiros 256 bytes da pagina 0 do PIC. Se vc colocar uma tabela ai, o PCL só irá endereçar os primeiros 256 bytes, Quando o PCL estourar (255....000) Ele voltará a apontar para o endereço Zero dessa pagina, nao continuará na segunda porçao de 256 bytes da pagina. Para isso vc deverá colocar PCLATH =1.

O PCLATH nao incrememta automaticamente quando o PCL estoura (passa de 225 para 000). Vc deve fazer isso na unha.

Por isso é meio chatinho fazer tabels com mais de 256 bytes.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor icaro51 » 24 Jun 2007 22:07

Ahhhhhh agora eu entendi :-)
Valeu!
icaro51
Byte
 
Mensagens: 119
Registrado em: 09 Dez 2006 21:56

Mensagempor juarezbazzo » 26 Jun 2007 18:48

Sem querer abusar "2", meu caro amigo, pelo que eu entendi, eu não preciso usar esse procedimento como descrito abaixo se usar o LCALL ou LGOTO? eu posso ir escrevendo o codigo, digamos uns 3k, quando enche a pagina 1, passa automaticamente para pg 2?, estou estudando uns codigo-fonte de diversos projetos simples e mais complexo para ver se consigo aprender, eu uso a versão do MPLAB V6.22

(Esse "pedaço" de codigo, retirei de um curso gratuito da net sobre o 16F877em Espanhol e traduzi pelo Google)
100+; uma abraço Juarez Bazzo NH - RS

; Deixe-nos supôr que nós estamos no pégina 0 e estamos indo chamar a uma rotina essa isto no pégina 3
; PCLATCH< 4:3> = <0:0>
org 0x00 ; Página 0
............
nop
bsf PCLATCH, 4 ; Página 3 => PCLATH< 4:3> = <1:1>
bsf PCLATCH, 3
chamada _pagina_3 ; Pagina_3 na página 3 está indo executar a rotina
bcf PCLATCH, 4 ; Página 0 => PCLATH< 4:3> = <0:0>
bcf PCLATCH, 3 ; PARA LIBERAR A PÁGINA
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Mensagempor proex » 28 Jun 2007 11:40

Lcall e Lgoto sao usadas para chamadas ou saltos para outras paginas sem precisar se preocupar em ajustar o PCLATH. Essas duas instruçoes fazem isso automaticamente.

Mas vc deve tomar cuidado ao escrever suas rotinas para que elas nao ultrapassem a pagina na qual começaram.

Exemplo:

Sua pagina Zero do PIC esta quase cheia. Vc começa escrever uma rotina no final da pagina Zero e termina no inicio da pagina 1. Assim vai dar pau no programa, pois ele nao vai mudar de pagina automaticamente para continuar executando sua rotina na proxima pagina.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor proex » 28 Jun 2007 11:45

Pessoal, querem um conselho?

Aconselho vcs a adotarem os PICs da familha 18F pois estao ficando mais baratos que os da familia 16F e possuem muitos recursos.

O PIC18F44j10 por exemplo, custa mais barato que um 16F872.

Mesmo se custar a mesma coisa, vale a pena mudar para os 18F.

Neles vcs podem escrever o código sem se preocupar com paginaçao de memoria ou mudança de banco de registradores.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor juarezbazzo » 29 Jun 2007 01:51

Valeu amigo Proex, vou abaixar o datasheet de um da família 18F, pois quanto mais fácil melhor, a muito tempo (faz tempo) quando fazia o curso de eletrônica, nós estávamos (alunos) intrigado com o instrutor, pois ele insistia numa matéria sobre válvulas, as ditas cuja já não era mais usadas, então ele veio com essa “Se não aprender sobre o passado, não saberá no futuro, pois o presente passa”, pois por incrível que pareça, li recentemente uma matéria na net que já estão fazendo um DVD ou CD Player com micro válvula para os “fanáticos” em fidelidade em áudio. É, é bom saber um pouco de como funcionava alguma coisa rudimentar do passado, pois assim nos sentimos mais “Profissional” 100+; um abraço Juarez Bazzo NH – RS
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Mensagempor juarezbazzo » 08 Jul 2007 03:42

:shock: Sem querer abusar "3", meu caro amigo, tenho como saber ao escrever o programa em que parte estou da pagina?, ou seja, se eu estiver escrevendo uma rotina tem como saber se terminou a pagina? Pois só sei o tamanho do programa quando abro MPLAB IDE > View > Program Memori. 100+ um abraço Juarez Bazzo Novo Hamburgo.
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x