Página 1 de 2
Novatos / Aprendiz

Enviado:
23 Jun 2007 01:34
por juarezbazzo
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


Enviado:
23 Jun 2007 07:42
por proex
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.

Enviado:
23 Jun 2007 10:03
por juarezbazzo
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

Enviado:
23 Jun 2007 10:44
por proex
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.

Enviado:
23 Jun 2007 15:15
por juarezbazzo
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

Enviado:
23 Jun 2007 22:44
por icaro51
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

Enviado:
24 Jun 2007 10:32
por proex
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

Enviado:
24 Jun 2007 17:03
por icaro51
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?

Enviado:
24 Jun 2007 18:29
por proex
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.

Enviado:
24 Jun 2007 22:07
por icaro51
Ahhhhhh agora eu entendi
Valeu!

Enviado:
26 Jun 2007 18:48
por juarezbazzo
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

Enviado:
28 Jun 2007 11:40
por proex
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.

Enviado:
28 Jun 2007 11:45
por proex
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.

Enviado:
29 Jun 2007 01:51
por juarezbazzo
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

Enviado:
08 Jul 2007 03:42
por juarezbazzo

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.