PIC12F675 - MPLAB - ASM - Comportamento Errado

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 19 Fev 2015 10:19

Olá!
Estou simulando o PIC12F675 (8 pinos) no MPLAB e MPASM (assembly).
Ao compilar está dando zero erros.
Ao simular no MPASM aparecem alguns comportamentos estranhos, que configuram erro. A instrução simples não surte efeito esperado.
Ex.1:
No banco 1, a direção do pino GP3 não muda para saída.
__Config _CP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _EXTRC_OSC_NOCLKOUT & _MCLRE_OFF
...
#define STT STATUS
...
Código: Selecionar todos
   bsf      STT, RP0           ; Banco 1
   movlw   b'11100101'   ; Determina quais pinos são entradas e quais são saídas.
   movwf   TRISIO      ; Entradas: GP5, GP2 e GP0. Saídas: GP4 e GP1.
   bcf      STT, RP0           ; Banco 0

TRISIO fica 00001101 e não 11100101. Bits 8, 7 e 6 não importam.

Ex.2:
#define Trans GPIO,GP4
...
Código: Selecionar todos
bsf      Trans      ; Saída em ‘1’. Lógica invertida.

O bit GPIO,GP4 não sai de '0'. GP4 = 0

Ex.3:
#define VR GPIO,GP1
...
Código: Selecionar todos
   bsf      VR

O bit GPIO,GP1 não sai de '0'. GP1 = 0

Já confirmei a nomenclatura GPIO, GP1, GP2, GP3, GP4 e GP5 com os respectivos endereços no arquivo P12F675.INC da Microchip e conferem. Também como a compilação não acusou erro, os nomes estão corretos.

Alguém sabe o que está ocorrendo?
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor ze » 19 Fev 2015 11:12

sei uma: GP3 é só entrada mesmo. vc leu o d.s.? brinc... acontece...
desenho nas 1as páginas tem uma setinha apontando pra dentro.
colocou RC externo? certeza? tente com osc interno mesmo. acho que é melhor. a não ser que vá variar a frequencia
abç véi
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor tcpipchip » 19 Fev 2015 11:33

talvez ajude

Código: Selecionar todos
'****************************************************************
'*  Autor   : MIGUEL WISINTAINER                                *
'*                                                              *
'*  ENTRADAS: PINO_INTERVALO_HORA     VAR GPIO.0                *
'*            PINO_TEMPO_ALIMENTA     VAR GPIO.1                *
'*                        *
'*                                                              *                                                       
'*  SAIDA   :      PINO_RELAY         VAR GPIO.4                *
'*          :      PINO_LED           VAR GPIO.5
'*
'*  CLOCK   : INTERNO 4MHz                                      *
'****************************************************************

    @ DEVICE  PIC12F629,INTRC_OSC_NOCLKOUT ' internal RC osc
    @ DEVICE  PIC12F629,MCLR_OFF           ' Disable external MCLR
    @ DEVICE  PIC12F629,WDT_OFF            ' Disable WatchDog timer
    @ DEVICE  PIC12F629,PROTECT_ON        ' Disable device protect
    @ DEVICE  PIC12F629,CPD_OFF            ' Disable Code-Protect
    @ DEVICE  PIC12F629,PWRT_ON            ' Enable Power-up timer
    @ DEVICE  PIC12F629,BOD_ON   

    DEFINE OSC 4

    ' Variaveis e alias

     PINO_INTERVALO_HORA     VAR GPIO.0
     PINO_TEMPO_ALIMENTA     VAR GPIO.1
     PINO_RELAY              VAR GPIO.4
     PINO_LED                VAR GPIO.5

'VARIAVEIS GLOBAIS

HORAS    VAR BYTE
MINUTOS  VAR BYTE
SEGUNDOS VAR BYTE

HORA_INTERVALO     VAR WORD
TEMPO_ALIMENTA     VAR WORD

    INCLUDE "MODEDEFS.BAS"

    CMCON=%00000111 ' Desabilitar Comparadores. Nao usados
    TRISIO=%000011 ' entradas: GP0 a GP3 saidas: GP4 e GP5
    OPTION_REG = %01111111 'resistencias de pullup
    WPU = %00111111 'despertar resistencias pullup

    'DESLIGAR RELAY

     LOW PINO_RELAY

     'APAGAR LED
     
     HIGH PINO_LED
     PAUSE 250
     LOW PINO_LED
     PAUSE 250
     HIGH PINO_LED
     PAUSE 250
     LOW PINO_LED
     PAUSE 250
         
     'LE ULTIMO INTERVALO E TEMPO ALIMENTAÇAO GRAVADOS NO ENDEREÇO DA EEPROM 0,1
     'NA HORA DE GRAVAR O PIC, DEVE-SE GARANTIR NO GRAVADOR QUE TENHA 0,0

     READ 0,HORA_INTERVALO     
     READ 1,TEMPO_ALIMENTA
     
     'ZERA HORA, MINUTOS, SEGUNDOS
     
     HORAS = 0
     MINUTOS = 0
     SEGUNDOS = 0
     
'MONITORA
WHILE 1 = 1
     GOSUB ATUALIZA_RELOGIO
     'VERIFICA SE HORÁRIO DE ALIMENTAR PEIXE
     IF HORA_INTERVALO = HORAS THEN
        GOSUB ALIMENTA_PEIXES
     ENDIF
     'VERIFICA SE É PARA MUDAR INTERVALO HORA PULL UP
     IF PINO_INTERVALO_HORA = 0 THEN
        GOSUB DEFINE_INTERVALO_HORA
     ENDIF
     'VERIFICA SE É PARA MUDAR TEMPO ALIMENTAÇÃO PULL UP
     IF PINO_TEMPO_ALIMENTA = 0 THEN
        GOSUB DEFINE_TEMPO_ALIMENTA
     ENDIF
WEND

'DEFINE INTERVALO HORA
DEFINE_INTERVALO_HORA:
     HORA_INTERVALO = 0
     WHILE PINO_INTERVALO_HORA = 0
         PINO_LED = 0
         PAUSE 1000
         PINO_LED = 1
         PAUSE 1000
         HORA_INTERVALO = HORA_INTERVALO + 1
         if HORA_INTERVALO > 24 THEN
            HORA_INTERVALO = 1
         ENDIF
     WEND
     WRITE 0, HORA_INTERVALO
'INDICAR QUE GRAVOU NOVO PARAMETRO
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
    'COMEÇA DO ZERO O TEMPO     
     HORAS = 0
     MINUTOS = 0
     SEGUNDOS = 0
     RETURN

'DEFINE_TEMPO ALIMENTAÇÃO
DEFINE_TEMPO_ALIMENTA:
     TEMPO_ALIMENTA = 0
     WHILE PINO_TEMPO_ALIMENTA = 0
         PINO_LED = 0
         PAUSE 500
         PINO_LED = 1
         PAUSE 500
         TEMPO_ALIMENTA = TEMPO_ALIMENTA + 1
     wEND
     WRITE 1, TEMPO_ALIMENTA
'INDICAR QUE GRAVOU NOVO PARAMETRO
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
    'COMEÇA DO ZERO O TEMPO     
     HORAS = 0
     MINUTOS = 0
     SEGUNDOS = 0
     RETURN

'ATUALIZA RELOGIO
ATUALIZA_RELOGIO:
    PAUSE 1000
    SEGUNDOS = SEGUNDOS + 1
    IF SEGUNDOS > 59 THEN
        SEGUNDOS = 0
        MINUTOS = MINUTOS + 1
    ENDIF
    IF MINUTOS > 59 THEN
        MINUTOS = 0
        HORAS = HORAS + 1
    ENDIF
    IF HORAS > 23 THEN
        HORAS = 0
    ENDIF
    RETURN   

'ACIONA RELAY ALIMENTAR PEIXES, DURANTE N SEGUNDOS
ALIMENTA_PEIXES:
    HIGH PINO_RELAY
    PAUSE TEMPO_ALIMENTA * 1000
    LOW PINO_RELAY
    'COMEÇA NOVA TEMPORIZAÇÃO
    HORAS = 0
    MINUTOS = 0
    SEGUNDOS = 0
    RETURN

    End
                 
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 19 Fev 2015 14:51

ze escreveu:sei uma: GP3 é só entrada mesmo. vc leu o d.s.? brinc... acontece...
desenho nas 1as páginas tem uma setinha apontando pra dentro.
Hiii!
Agora que você mencionou é que eu observei. Valeu!!!
:D
colocou RC externo? Sim! certeza? SIM!tente com osc interno mesmo. acho que é melhor. a não ser que vá variar a frequencia
Tive que colocar oscilador externo (RC) para reduzir o consumo ao máximo. Estou preparando um documento bem completo. Até agora tem 14 páginas. Depois eu mostro. Mas estou na simulação.
abç véi


Por mais que a gente leia o DS, sempre escapa algo.
É como eu costumo dizer. "Eletrônica é coisa do Demo", ou de masoquista, hehehe!

PS: Eu não estou usando GP3. Só tinha colocado como saída para ganhar um resistor. Como entrada precisa. Vou fazer isso (colocar o resistor de pull-up. É o único que não tem pull-up interno).

MOR_AL
Editado pela última vez por MOR_AL em 19 Fev 2015 15:23, em um total de 1 vez.
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 19 Fev 2015 14:57

tcpipchip escreveu:talvez ajude

Código: Selecionar todos
'****************************************************************
'*  Autor   : MIGUEL WISINTAINER                                *
'*                                                              *
'*  ENTRADAS: PINO_INTERVALO_HORA     VAR GPIO.0                *
'*            PINO_TEMPO_ALIMENTA     VAR GPIO.1                *
'*                        *
'*                                                              *                                                       
'*  SAIDA   :      PINO_RELAY         VAR GPIO.4                *
'*          :      PINO_LED           VAR GPIO.5
'*
'*  CLOCK   : INTERNO 4MHz                                      *
'****************************************************************

    @ DEVICE  PIC12F629,INTRC_OSC_NOCLKOUT ' internal RC osc
    @ DEVICE  PIC12F629,MCLR_OFF           ' Disable external MCLR
    @ DEVICE  PIC12F629,WDT_OFF            ' Disable WatchDog timer
    @ DEVICE  PIC12F629,PROTECT_ON        ' Disable device protect
    @ DEVICE  PIC12F629,CPD_OFF            ' Disable Code-Protect
    @ DEVICE  PIC12F629,PWRT_ON            ' Enable Power-up timer
    @ DEVICE  PIC12F629,BOD_ON   

    DEFINE OSC 4

    ' Variaveis e alias

     PINO_INTERVALO_HORA     VAR GPIO.0
     PINO_TEMPO_ALIMENTA     VAR GPIO.1
     PINO_RELAY              VAR GPIO.4
     PINO_LED                VAR GPIO.5

'VARIAVEIS GLOBAIS

HORAS    VAR BYTE
MINUTOS  VAR BYTE
SEGUNDOS VAR BYTE

HORA_INTERVALO     VAR WORD
TEMPO_ALIMENTA     VAR WORD

    INCLUDE "MODEDEFS.BAS"

    CMCON=%00000111 ' Desabilitar Comparadores. Nao usados
    TRISIO=%000011 ' entradas: GP0 a GP3 saidas: GP4 e GP5
    OPTION_REG = %01111111 'resistencias de pullup
    WPU = %00111111 'despertar resistencias pullup

    'DESLIGAR RELAY

     LOW PINO_RELAY

     'APAGAR LED
     
     HIGH PINO_LED
     PAUSE 250
     LOW PINO_LED
     PAUSE 250
     HIGH PINO_LED
     PAUSE 250
     LOW PINO_LED
     PAUSE 250
         
     'LE ULTIMO INTERVALO E TEMPO ALIMENTAÇAO GRAVADOS NO ENDEREÇO DA EEPROM 0,1
     'NA HORA DE GRAVAR O PIC, DEVE-SE GARANTIR NO GRAVADOR QUE TENHA 0,0

     READ 0,HORA_INTERVALO     
     READ 1,TEMPO_ALIMENTA
     
     'ZERA HORA, MINUTOS, SEGUNDOS
     
     HORAS = 0
     MINUTOS = 0
     SEGUNDOS = 0
     
'MONITORA
WHILE 1 = 1
     GOSUB ATUALIZA_RELOGIO
     'VERIFICA SE HORÁRIO DE ALIMENTAR PEIXE
     IF HORA_INTERVALO = HORAS THEN
        GOSUB ALIMENTA_PEIXES
     ENDIF
     'VERIFICA SE É PARA MUDAR INTERVALO HORA PULL UP
     IF PINO_INTERVALO_HORA = 0 THEN
        GOSUB DEFINE_INTERVALO_HORA
     ENDIF
     'VERIFICA SE É PARA MUDAR TEMPO ALIMENTAÇÃO PULL UP
     IF PINO_TEMPO_ALIMENTA = 0 THEN
        GOSUB DEFINE_TEMPO_ALIMENTA
     ENDIF
WEND

'DEFINE INTERVALO HORA
DEFINE_INTERVALO_HORA:
     HORA_INTERVALO = 0
     WHILE PINO_INTERVALO_HORA = 0
         PINO_LED = 0
         PAUSE 1000
         PINO_LED = 1
         PAUSE 1000
         HORA_INTERVALO = HORA_INTERVALO + 1
         if HORA_INTERVALO > 24 THEN
            HORA_INTERVALO = 1
         ENDIF
     WEND
     WRITE 0, HORA_INTERVALO
'INDICAR QUE GRAVOU NOVO PARAMETRO
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
    'COMEÇA DO ZERO O TEMPO     
     HORAS = 0
     MINUTOS = 0
     SEGUNDOS = 0
     RETURN

'DEFINE_TEMPO ALIMENTAÇÃO
DEFINE_TEMPO_ALIMENTA:
     TEMPO_ALIMENTA = 0
     WHILE PINO_TEMPO_ALIMENTA = 0
         PINO_LED = 0
         PAUSE 500
         PINO_LED = 1
         PAUSE 500
         TEMPO_ALIMENTA = TEMPO_ALIMENTA + 1
     wEND
     WRITE 1, TEMPO_ALIMENTA
'INDICAR QUE GRAVOU NOVO PARAMETRO
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
     PINO_LED = 1
     pause 250
     PINO_LED = 0     
     pause 250
    'COMEÇA DO ZERO O TEMPO     
     HORAS = 0
     MINUTOS = 0
     SEGUNDOS = 0
     RETURN

'ATUALIZA RELOGIO
ATUALIZA_RELOGIO:
    PAUSE 1000
    SEGUNDOS = SEGUNDOS + 1
    IF SEGUNDOS > 59 THEN
        SEGUNDOS = 0
        MINUTOS = MINUTOS + 1
    ENDIF
    IF MINUTOS > 59 THEN
        MINUTOS = 0
        HORAS = HORAS + 1
    ENDIF
    IF HORAS > 23 THEN
        HORAS = 0
    ENDIF
    RETURN   

'ACIONA RELAY ALIMENTAR PEIXES, DURANTE N SEGUNDOS
ALIMENTA_PEIXES:
    HIGH PINO_RELAY
    PAUSE TEMPO_ALIMENTA * 1000
    LOW PINO_RELAY
    'COMEÇA NOVA TEMPORIZAÇÃO
    HORAS = 0
    MINUTOS = 0
    SEGUNDOS = 0
    RETURN

    End
                 


Ha! BASIC!
Como é fácil!!!
Meu programa está em assembly porque alguns tempos tem que ser precisos.
Ôpa!!!
Será que eu troquei o ponto pela vírgula????
GPIO.GPx por GPIO,x????
Vou verificar!!!

Não, não. O certo é vírgula mesmo! :cry:
Valeu!
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor KrafT » 19 Fev 2015 15:09

MOR_AL, a tua briga é com GPIO3, que é só entrada:"GP3 TTL Input port w/ interrupt-on-change", ou GPIO4?

GPIO4 tem mais coisa amarrada:

Código: Selecionar todos
GP4 TTL CMOS Bi-directional I/O w/ programmable pull-up and
interrupt-on-change
AN3 AN A/D Channel 3 input
T1G ST TMR1 gate
OSC2 XTAL Crystal/resonator
CLKOUT CMOS FOSC/4 output
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 19 Fev 2015 15:25

KrafT escreveu:MOR_AL, a tua briga é com GPIO3, que é só entrada:"GP3 TTL Input port w/ interrupt-on-change", ou GPIO4?

GPIO4 tem mais coisa amarrada:

Código: Selecionar todos
GP4 TTL CMOS Bi-directional I/O w/ programmable pull-up and
interrupt-on-change
AN3 AN A/D Channel 3 input
T1G ST TMR1 gate
OSC2 XTAL Crystal/resonator
CLKOUT CMOS FOSC/4 output


Eu não estou usando GP3. Só tinha colocado como saída para ganhar um resistor. Como entrada precisa. Vou fazer isso (colocar o resistor de pull-up. É o único que não tem pull-up interno).
É. Tem mais coisa sim!

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 19 Fev 2015 15:37

Segue o fluxograma da parte principal do programa (sem as rotinas) para simplificar.

Vide figura em anexo.


Segue a parte principal do programa (sem as rotinas) para simplificar.

Código: Selecionar todos
 title "PIC12F675 – Módulo Cx"
;   Autor: MORis_ALkabes
;   Data: 19/02/2015
;   Versão: 1.0
;   Informações sobre o projeto:
;   Ambiente para a edição do texto em assembler, compilação e
;   verificação de funcionamento: MPLAB IDE V7.42.00.00 (2001-2006)
;   Diagrama esquemático: Figura 1 do arquivo Medidor de Nível de Água com   
;   PIC Módulo Caixa de Água.doc.
 list P=PIC12F675
 include <P12F675.INC>
 include <Macros_V1p6.asm>
 __Config _CP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _EXTRC_OSC_NOCLKOUT & _MCLRE_OFF
  errorlevel -302     ; Não alerta mudança de banco.

; Variáveis:
 CBLOCK   0x20      ; Localização e definição das variáveis.
   Cont      
   N_At      
   N_Med      
   N_Pulsos      
   Aux   
   Rasc   
   Tempo0      
   Tempo1      
 ENDC         
; Pinos
#define   Trans   GPIO,GP4   
#define   V0      GPIO,GP0   
#define   VR      GPIO,GP1   
#define   STT      STATUS   
#define   Inic   Aux,0   

;   Início do programa:

   org      0x0000
   goto   Principal
   org      0x0004
   return      
Principal:
   call   Inicio
Pr0:   
   clrf   INTCON
   bsf      VR
   call   T1s
   call   CAD_LgConvDlg
   bcf      VR
   call   SetaNivel
   btfss   Inic
   goto   Pr4
   bcf      Inic
Pr5:
   movf   N_Med,W
   movwf   N_At
Pr2:
   movlw   d'26'
   movwf   Cont
   call   Transmite
Pr3:
   bcf      INTCON,INTF
   bsf      INTCON,INTE
   sleep
   nop
   goto   Pr0
Pr1:
   decfsz   Cont

   goto   Pr3
   goto   Pr2
Pr4:
   movf   N_Med,W
   movwf   Rasc
   incf   Rasc
   R1IgR2 N_At, Rasc, Pr5
   movf   N_Med,W
   movwf   Rasc
   decf   Rasc
   R1IgR2 N_At, Rasc, Pr5
   goto   Pr1



Por aqui vou continuar quebrando a cabeça. :arrow:
MOR_AL
Você não está autorizado a ver ou baixar esse anexo.
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor ze » 19 Fev 2015 15:42

programar assim só masoquista (edit antes de ver seu fluxograma que está bem legal. portanto uma zoaçãozinha idiota com o asm e não c vc claro)

baixo consumo I: cristal 32768
baixo consumo II: o 4MHz interno mesmo. wdog habilitado, comando asm("sleep"). (olha o asm aí gente) o legal é que o wdog não reseta se em sleep. continua logo abaixo dele. mas o sleep reseta o wdog
Conceito: faz uma coisinha, dorme, wdog acorda, volta para Conceito.
ok. não é seu caso. mas dá licença de tentar somar?

em tempo I: dica pessoal do amigo fabim nos meados da década passada ... 2006 acho. Também um tal de fabio pereira... acho
em tempo II: o treco virou produto e vende até hoje... sério.

abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 20 Fev 2015 04:18

ze escreveu:programar assim só masoquista (edit antes de ver seu fluxograma que está bem legal. portanto uma zoaçãozinha idiota com o asm e não c vc claro)

baixo consumo I: cristal 32768 (Com RC externo. Menos um pino. O segundo é usado para o RC)
baixo consumo II: o 4MHz interno mesmo. wdog habilitado, comando asm("sleep"). (olha o asm aí gente) o legal é que o wdog não reseta se em sleep. continua logo abaixo dele. mas o sleep reseta o wdog (Consumo maior (Timerx funcionando) e acorda mais vezes para trabalhar somente a cada 2 horas, ou ocorrência de evento especial). Meu RC externo gera 50kHz. acorda 80 vezes menos.
Conceito: faz uma coisinha, dorme, wdog acorda, volta para Conceito.
ok. não é seu caso. mas dá licença de tentar somar?

em tempo I: dica pessoal do amigo fabim nos meados da década passada ... 2006 acho. Também um tal de fabio pereira... acho
em tempo II: o treco virou produto e vende até hoje... sério.
:lol:
abç

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor ze » 20 Fev 2015 08:42

de fato não sei se o timerx ou o rc rodando qual é o + guloso. talvez nem valha a pena comparar. Mas a título de curiosidade e valendo-se da teoria que na prática ela é outra, caso algum dia precise do pino do rc, pode-se programar das duas maneiras, alimentar o mc com a carga de um capacitor 10uf p.ex. e com multimetro comparar os dois tempos de descarga. Preferencialmente um programa útil e com mesma função. Claro, este é um teste bem rústico (uso de multímetro e 'a zóio'). Vale muitíssimo menos a pena fazer com equipamento adequado. Aliás nem sei porquê escrevi isso e muitíssimo menos porquê você leu...
De toda a forma vosso sucesso (e seu "valeu!!!", que considerei como um 'obrigado') já me deixa satisfeito
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 20 Fev 2015 14:34

ze escreveu:de fato não sei se o timerx ou o rc rodando qual é o + guloso. talvez nem valha a pena comparar. Mas a título de curiosidade e valendo-se da teoria que na prática ela é outra, caso algum dia precise do pino do rc, pode-se programar das duas maneiras, alimentar o mc com a carga de um capacitor 10uf p.ex. e com multimetro comparar os dois tempos de descarga. Preferencialmente um programa útil e com mesma função. Claro, este é um teste bem rústico (uso de multímetro e 'a zóio'). Vale muitíssimo menos a pena fazer com equipamento adequado. Aliás nem sei porquê escrevi isso e muitíssimo menos porquê você leu...
De toda a forma vosso sucesso (e seu "valeu!!!", que considerei como um 'obrigado') já me deixa satisfeito


Consegui filtrar as partes interessantes de toda bestei.. erh a sua conversa, hehe.
Também coloquei essa dúvida no fórum CDH e lá um cara me lembrou do registro ANSEL.
Minha resposta...
Agora acho que você matou a charada.

Quando se liga o uC ou ocorre um reset, os pinos que contém entradas para o CAD, estão configurados como entradas analógicas, pois encontram-se em '1'.

Eu estou usando apenas o pino GP0 como entrada analógica. O que ocorre é que, para consumir o mínimo possível (acordo o uC a cada 2 horas ou a cada evento especial), eu só tratava o CAD quando ia usá-lo. Ligava, convertia e desligava. Só dentro desta rotina (CAD_Lg_Conv_Dlg) é que eu fazia

bsf STATUS, RP0

movlw D'1'

movwf ANSEL

...

Vou alterar o programa e postar os resultados


Vou alterar o programa e postar o resultado.
Grato, Zé!!! :D

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor KrafT » 20 Fev 2015 15:29

Muitas vezes eu me imagino voltar à lecionar, ainda mais que estou concluindo o mestrado. Mas meus amigos sabiamente me definem como um "péssimo professor", me desencorajando a ter essa recaída.

Esse tópico é uma prova de que meus amigo estão certos: Ao listar os periféricos da GP4, eu inocentemente imaginava que a leitura seria "preciso verificar todos esses pontos para encontrar o problema", intento meu que vejo que foi infeliz.

Eu acho que essa é uma mensagem divina para que eu nunca, jamais, reconsidere voltar a dar aula. :mrgreen:

Mas fico feliz que o problema tenha sido encontrado. Mais feliz ainda pelo MOR_AL estar partilhando o conhecimento dele com o mudo.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: PIC12F675 - MPLAB - ASM - Comportamento Errado

Mensagempor MOR_AL » 20 Fev 2015 19:49

Valeu Kraft.
Mas tome cuidado. É difícil desistir de querer ensinar, se já ensinou antes. Parece que é uma doença crônica, hehe!
Bom.
Fiz as modificações, principalmente referentes ao registro ANSEL.
Agora quase todos os pinos funcionam corretamente.

Mas o danado do GP5 ainda teima em não funcionar.

No banco 1...
movlw b'00101101' ; Determina quais pinos são entradas e quais são saídas.
movwf TRISIO ; Entradas: GP5, GP3, GP2 e GP0. Saídas: GP4 e GP1.
Acontece que TRISIO fica b'00001101'

A palavra de configuração é:
__Config _CP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _EXTRC_OSC_NOCLKOUT & _MCLRE_OFF

Há um RC externo no pino GP5, que deveria ser usado para gerar o oscilador interno.
Já usei tanto _EXTRC_OSC_NOCLKOUT, como _INTRC_OSC_NOCLKOUT. O TRISIO continua como mostrado.

Será que o GP5 com o RC tem que trabalhar como saída, mesmo que haja um gate conectado a ele? Bom. Também tem um dreno conectado a ele.
Não há menção no manual se o pino GP5 tem que ser entrada ou saída. Vou procurar mais.

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Resolvido - PIC12F675 - MPLAB - ASM - Comportamento Errado?

Mensagempor MOR_AL » 20 Fev 2015 22:36

Bom.

Pesquisei no sítio da Microchip e muitos outros e não encontrei nenhuma informação sobre a programação do sentido do pino que recebe o RC.

Parece que a coisa fica definida quando se configura a palavra de configuração.

EXTRC_OSC_NOCLKOUT.

O bit que corresponde à direção do pino, se entrada ou saída, já fica definido e a programação não possui poder de especificar diferente de saída.

Se observarmos os outros modos de se gerar a oscilação, notaremos que o pino OSC1 é uma entrada. Isso nos leva a pensar (erroneamente) que na condição de RC externo o pino OSC1 também seja uma entrada.

Se pensarmos bem, vamos chegar a conclusão oposta.

Explico.

Para se fazer um oscilador RC é necessário um inversor e um RC na entrada dele. Mas a saída do inversor é realimentada para a entrada. Mais precisamente na junção do RC. Então na junção do RC há uma entrada do inversor e a saída do mesmo.

Fica aí estabelecida a dúvida.

A junção é uma entrada para a entrada do inversor e uma saída para a saída do inversor.

O detalhe é que, se existe uma saída conectada a esta junção RC, então a tensão nesse ponto vai ser determinada pela tensão existente na saída. Concluo então que a Microchip considerou este ponto como saída e é por este motivo que ao se tentar configurá-lo como entrada o compilador não permite.

Imagino até que os bits que determinam o oscilador na palavra de configuração, possuem um circuito que impede que o hardware possa ser alterado pelo programa.

Aliás, o único problema existente, que eu percebi, na realidade não existe. Apenas eu decidi que aquele pino deveria ser configurado como entrada. Além do compilador não permitir, nada mais é relacionado ao pino no programa.

Em outras palavras.

Tanto faz se eu tentar configurar aquele pino como entrada. Ele não aceita e fica configurado como saída. Como o pino está ocupado para a função de oscilador com RC externo (devido à palavra de configuração), nenhuma função mais pode ser atribuída a ele e, naturalmente, o restante do programa não o menciona.

Vou atribuir o pino como saída e o registro TRISIO vai acompanhar o registrador W (movwf TRISIO).

Caso alguém consiga um texto informando algum conflito com o meu texto, peço que poste aqui, para que possamos discutir.

Grato a todos.

PS:
Simulei o programa com o MPASM do MPLAB e TODAS as instruções tiveram suas funções realizadas corretamente!
Vou dar por encerrado o tópico!
Mais uma vez, grato a todos.


Como esta questão foi baseada em um trabalho de outro tópico, em breve estarei disponibilizando um arquivo em PDF, que apresenta todo projeto, até a obtenção do firmware. É o ponto em que me encontro no momento.

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x