Sei sulla pagina 1di 24

CLIP RaboVisão V.6 (24.Setembro.

2004)

O CLIP RaboVisão é uma aplicação que permite programar/alterar o conteúdo de uma memória 24LC64.
Foi feito com o objectivo de alterar a 24LC64 que existe na BOX da RaboVisão. Altera os endereços 0x0060 até ao 0x007F - 32 endereços
-, colocando-os com o valor 0x5F. Foi o que me “pediram” para fazer, e que desbloquearia os canais da RaboVisão.

NOTA (V.6): Datasheet da Serial EEPROM I2C de 64kb Microchip - 24LC64.pdf, leitura indispensável!!

BUS I2C ocupado:


Quando se liga a BOX, fica uma luz vermelha ligada á frente. Verifiquei com o meu multímetro que o pino 17 do PIC16C63A-04 está
ligado ao pino 5 - Serial Data - da 24LC64 e o pino 24 do PIC16C63A-04 ligado ao pino 6 - Serial Clock - da 24LC64. Com a BOX ligada, a
linha de 5 volts na placa alimenta as várias partes do circuito a 5 volts.. alimentando também o PIC16C63A-04 que coloca a linha de
Serial Data do BUS I2C a 5 volts e a linha de Serial Clock a 0 volts - é o que me parece. Assim, ligando a BOX e tentando programar a
memória não conseguimos, pois o BUS I2C é controlado pelo PIC16C63A-04!!
Para a conseguirmos programar temos nós de controlar o BUS I2C.. disseram-me que mantendo pressionados os três botões que estão á
frente na BOX, o BUS I2C é libertado, e é verdade que eu mesmo testei.
Outra maneira de conseguirmos programar a 24LC64, a que o CLIP RaboVisão usa, é não usar a alimentação da BOX, desligando-a e
alimentarmos nós mesmo a linha dos 5 volts, mas, não colocar 5 volts na linha, colocar antes uns 2.5 volts. O PIC16C63A-04 só começa a
funcionar acho eu que a partir dos 4 volts enquanto que a 24LC64, segundo o datasheet, a partir dos 2.5 volts, o objectivo é alimentar a
24LC64 com uma tensão inferior á necessária á para o PIC16C63A-04 funcionar. O que acontece é que o PIC16C63A-04 não funcionando,
deixa de controlar o BUS I2C!!
Verifiquei que a 24LC64 funciona até com tensões de alimentação muito inferiores aos 2.5 volts!!

Comunicação entre 24LC64 e PIC16F84:


Os níveis lógicos da 24LC64 não são os mesmos que o PIC16F84, quando ela é alimentada com uma tensão inferior aos 5 volts. O 1
lógico da 24LC64 é o mesmo que o valor da alimentação a que ela está submetida, logo, neste caso, se a alimentarmos com 2.5 volts, o 1
lógico que ela colocar na linha de Serial Data será 2.5 volts, valor que para o PIC16F84 é 0 lógico!! Para resolver este caso, primeiro usei
um comparador, mas, depois de falar com o Gremlins ele disse-me que um simples BC547 dava para este caso..
Montagem em emissor comum, sempre que o transístor está ao corte, no pino 9 do PIC estão 5 volts - 1 lógico. Esta situação acontece
quando a linha de SDA, serial data está com 0 volts -0 lógico.
Quando a linha de SDA passa para valores superiores aos 0.7 volts, o transístor satura, fazendo com que o seu colector tenha 0 volts,
chegando assim ao pino 9 do PIC o valor lógico 0. Resumindo, 1 lógico na SDA, 0 lógico á entrada pró PIC e vice-versa!

J.P. Casainho Página 1 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

O hardware:

- O 78L05 regula, mantendo constante sempre 5 volts á sua saída, enquanto que á entrada se usa uma pilha de 9 volts.
- O PIC16F84 pode ser qualquer um desde que possa funcionar a 4 MHZ, usando-se para isso o cristal de 4MHZ.
- O transistor BC547, simplesmente está em funcionamento tipo um interruptor, quando a linha SDA tem 0 volts, á entrada pró PIC, estão
5 volts(1 lógico). Quando a linha SDA tem uma tensão superior a 0.7 volts, á entrada pró PIC, estão 0 volts(0 lógico).

J.P. Casainho Página 2 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

- A resistência variável de 1K, faz de divisor de tensão para que possamos variar a tensão a que alimentamos a 24LC64. É de notar
podemos conseguir todos os valores desde os 5 volts até aos 0 volts, o ideal é alimentar a 24LC64 com 2.5 volts, tensão a qual o BUS I2C
estará livre..
- Os LEDs servem de sinalização e as resistencias para limitarem a corrente que por eles passam..
- O Botão de pressão é para colocar o pino 12 do PIC16F84 a 0 volts quando pressionado, esse pino está sempre a 5 volts, 1 lógico
graças á resistência de 22K liagada entre ele e os 5 volts.

NOTA (V.6): O 78L05, se substituído pelo 7805 e a R variável de 1k, substituída por 100 ohms, os resultados serão melhores!!

A ficha:

A ficha, inventei como uma vez me disseram, cortei ao meio uma base de 18 pinos, e aproveitei um dos lados, soldei os fios e foi só
enfiar nos pinos.. a BOX em que experimentei foi uma de 9 pinos.

NOTA (V.6): O pino entre o azul e o verde é o RESET do PIC16C63A-04!! Assim, pode-se ter a caixa alimentada – luz vermelha á frente
ligada – e ligar o pino de RESET ao azul, GND. Assim a luz vermelha á frente deve se desligar, porque o PIC16C63A-04 deixa de funcionar
e liberta então o BUS I2C!!

J.P. Casainho Página 3 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

O Software:

1º - LED verde a piscar, CLIP RaboVisão á espera que o botão de pressão seja pressionado.
Inicialmente, o LED verde pisca num LOOP até que pressionemos o botão de pressão. Deste modo o utilizador, assim que liga a pilha,
apercebe-se de que o CLIP RaboVisão está a funcionar e aguarda a sua ordem, pressionar o botão de pressão, para começar a
comunicação com a 24LC64 e assim alterar os dados necessários..

2º - Escrever os 32 bytes a 0x5F sequencialmente apartir do endereço 0x0060.


Escreve sequencialmente os 32 bytes. Modo de escrita "PAGE WRITE". No fim espera, verifica até que a 24LC64 termine o ciclo de escrita
interno.

3º - Lê os 32 bytes na 24LC64 e verifica se estão a 0x5F.


É sempre boa politica ler e verificar se os bytes foram alterados com sucesso. Caso algum dos 32 bytes não tenha sido correctamente
escrito, com o valor 0x5F, o LED vermelho liga!! resta só desligar o CLIP RaboVisão e iniciar tudo de novo!!

4º - FIM -> LEDs vermelho e verde a piscar malucamente!!


Finalmente, se tudo correu bem até aqui, os 32 bytes foram alterados com sucesso e os dois LEDs vermelho e verde piscam.

ERRO - LED vermelho ligado:


Caso exista algum erro a comunicar com a 24LC64, quando ela não envia o bit de ACKNOWLEDGE, o LED vermelho liga!! é preciso
desligar o CLIP RaboVisão e tentar de novo!!
Este erro acontece quando a tensão de alimentação da 24LC64 é insuficiente, deve-se então aumentar, rodando a resistência variável de
1K até se conseguir a correcta.
Pode também ser o facto de se estar alimentar o PIC16C63A-04 e ele não liberta o BUS I2C, neste caso, uma luz vermelha acende á
frente na BOX, rodar a resistência variável baixando o valor da tensão de alimentação para a 24LC64, acontece também que a luz
vermelha a frente na BOX apaga-se.
Outro erro possível é quando ao escrever os 32 bytes na 24LC64, existe uma altura em que ela demora um certo tempo a escreve-los
internamente, contudo pode acontecer algum problema e ela não concluir essa tarefa num determinado periodo de tempo, então o LED
vermelho liga e só resta desligar o CLIP RaboVisão e começar tudo de novo.

J.P. Casainho Página 4 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

NOTA:
Esta aplicação foi testada por mim numa BOX "Videotel Mod: VT-1000 Fabricado em Portugal por: SETCOM electronica s.a."
que me foi emprestada.
Esta informação só deve ser usada para motivos, fins de aprendizagem.
A informação contida neste ficheiro, assim como o seu autor não são responsáveis por qualquer violação ou qualquer acto
menos correcto de terceiros. O autor declina toda a responsabilidade que lhe possa ser atribuida pelo conteúdo deste
ficheiro.

;Ficheiro: "CLIP RaboVisão II (29.Abril.2002).asm"


;
;
;Esta informação só deve ser usada para motivos, fins de aprendizagem.
;A informação contida neste ficheiro, assim como o seu autor não são responsáveis por qualquer
;violação ou qualquer acto menos correcto de terceiros.
;O autor declina toda a responsabilidade que lhe possa ser atribuida pelo conteúdo deste
;ficheiro.
;
;Ficheiro de teste para um CLIP que programa uma 24LC64 usando o PIC16F84 a 4MHZ..
;Para mais informação visita a página: http://tvrabo.cjb.net
;ou podes contactar o autor pelo e-mail: casainho@yahoo.com
;
;Entradas para o PIC:
;
;pino 9 do PIC, PORTB,3 -> Serial Data IN.. (LÓGICA INVERTIDA)
;pino 13 do PIC, PORTB,7 -> Botão de pressão..
;
;
;Saidas do PIC:
;
;pino 7 do PIC, PORTB,1 -> Serial Clock..
;pino 8 do PIC, PORTB,2 -> Serial Data OUT..
;pino 11 do PIC, PORTB,5 -> LED verde..
;pino 12 do PIC, PORTB,6 -> LED vermelho..
;
;NOTAS: Segundo o datasheet(24LC64 Microchip), a velocidade máxima da 24LC64 á tensão
;minima de alimentação é 100KHZ, este código feito para ser usado com um PIC a usar um
;cristal de 4MHZ de modo a que as rotinas de atrazo estejam ajustadas mais ou menos aos
;50KHZ.. garantindo assim uma boa comunicação.

J.P. Casainho Página 5 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

list p=16f84
#include p16f84.inc
RADIX DEC
__CONFIG 3FEAH ;high speed, code protec..

;###############################################################################################
;
;definição de variáveis:
;
contador_atrazo_1 equ 0x0c
contador_atrazo_2 equ 0x0d
contador_1 equ 0x0e
contador_2 equ 0x0f
byte_para_enviar equ 0x10
byte_lido equ 0x11
contador_3 equ 0x12

;definição de constantes:
;
serial_data_out equ 2
serial_data_in equ 3
serial_clock equ 1
LED_verde equ 4
LED_vermelho equ 5
botao_pressao equ 6

;
;###############################################################################################

ORG 00H

bsf STATUS,RP0 ;BANK 1


bsf OPTION_REG,7 ;PULL-UPS PORTB OFF..
movlw 11001001B ;saidas: LED vermelho, Verde, Serial Clock e Serial Data Out..
movwf TRISB
movlw 00011111B ;PORTA não usada.. todos os pinos como alta impedancia..
movwf TRISA

J.P. Casainho Página 6 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

bcf STATUS,RP0 ;BANK 0

;
; Inicio do programa principal..
;

inicio:

bcf PORTB,LED_vermelho ;LED_vermelho desligado ao inicio..


bcf PORTB,LED_verde ;LED_verde desligado ao inicio..

call pisca_LED_verde ;LED verde a piscar e avançar só se o botao de pressao for


;pressionado..

bcf PORTB,LED_verde ;LED verde desliga.. caso ele "volte" ligado


;da rotina "pisca_LED_verde"..

;
;Escrever os 32 bytes sequencialmente, modo "PAGE WRITE", como descrito no datasheet
;da 24LC64 da Microchip..
;
call START ;iniciar a comunicação com a 24LC64..

movlw 0xA0
movwf byte_para_enviar ;o CONTROL byte de escrita..
call enviar_byte

clrf byte_para_enviar ;o HIGH byte do endreço 0x0060..


call enviar_byte

movlw 0x60
movwf byte_para_enviar ;o LOW byte do endereço 0x0060..
call enviar_byte

movlw 32
movwf contador_3 ;valor usado para o LOOP seguinte "escrever_os_32bytes"..

escrever_os_32bytes:

J.P. Casainho Página 7 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

movlw 0x5F
movwf byte_para_enviar ;o nosso dado.. 0x5F..
call enviar_byte

decfsz contador_3 ;fazer este LOOP 32 vezes, nr de bytes a escrever..


goto escrever_os_32bytes

call STOP ;parar a comunicação com a 24LC64.. ela inicia o ciclo de


;escrita interno..

call teste_escrita_24LC64 ;testo e espero que ela acabe o ciclo de escrita


;interno..

;
;Agora que escrevi os 32 bytes, vou ler a memória e verificar se os 32 bytes estão a 0x5F,
;se a escrita correu OK.. modo "Sequencial Read"..
;

call START ;iniciar a comunicação com a 24LC64..

movlw 0xA0
movwf byte_para_enviar ;o CONTROL byte de escrita..
call enviar_byte

clrf byte_para_enviar ;o HIGHT byte do endreço 0x0050..


call enviar_byte

movlw 0x50
movwf byte_para_enviar ;o LOW byte do endereço 0x0050..
call enviar_byte

call START ;continuar comunicação.. leitura sequencial..

movlw 0xA1
movwf byte_para_enviar ;o CONTROL byte de leitura..
call enviar_byte

movlw 32
movwf contador_3

ler_e_verificar_os_32bytes:

J.P. Casainho Página 8 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

call ler_byte ;leio o byte..

call fazer_ACKNOWLEDGE ;"confirmo" á 24LC64 que recebi o byte com sucesso o byte..

movlw 0x5F
subwf byte_lido,W ;byte_lido - 0x5F = 0 ??
btfsc STATUS,Z
call ERRO_escrita_0x5F ;o valor de "byte_lido" é diferente de 0x5F!! ERRO..

decfsz contador_3
goto ler_e_verificar_os_32bytes ;voltar a "ler_e_verificar_os_32bytes" até que
;que o "contador_3" seja 0, altura em que já lemos e verificamos os 32 bytes..

;
;Aqui já chegamos ao fim da nossa tarefa com sucesso.. falta só assinalar isso "brincando"
;com os LEDs..
;

LED_verde_OFF_LED_vermelho_ON:

bsf PORTB,LED_vermelho ;LED vermelho ligado..


bcf PORTB,LED_verde ;LED verde desligado..

call atrazo_meio_segundo

LED_verde_ON_LED_vermelho_OFF:

bcf PORTB,LED_vermelho ;LED vermelho desligado..


bsf PORTB,LED_verde ;LED verde ligado..

call atrazo_meio_segundo

LEDs_ligados:

bsf PORTB,LED_vermelho ;LED vermelho ligado..

call atrazo_meio_segundo

LEDs_desligados:

J.P. Casainho Página 9 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

bcf PORTB,LED_verde ;LED verde desligado..


bcf PORTB,LED_vermelho ;LED vermelho desligado..

call atrazo_meio_segundo

LED_verde_ON_LED_vermelho_OFF_1:

bsf PORTB,LED_verde ;LED verde ligado..

call atrazo_meio_segundo

goto LED_verde_OFF_LED_vermelho_ON ;e repete o LOOP infinitamente..

;
; FIM do programa principal..
;

;##############################################################################################
;...........................................................................................
;
;
; ROTINAS ROTINAS ROTINAS ROTINAS ROTINAS ROTINAS ROTINAS ROTINAS ROTINAS ROTINAS ROTINAS
;
;
;...........................................................................................
;##############################################################################################

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
ERRO_escrita_0x5F:
;
;Se esta rotina é chamada é porque houve um erro a escrever na memória.. sinaliza-se piscando
;o LED vermelho..

J.P. Casainho Página 10 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

LED_vermelho_OFF:

bsf PORTB,LED_vermelho ;LED vermelho ligado..

call atrazo_meio_segundo

LED_vermelho_ON:

bsf PORTB,LED_vermelho ;LED vermelho desligado..

call atrazo_meio_segundo

goto LED_vermelho_OFF ;e repete o LOOP infinitamente..


;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
pisca_LED_verde:

bsf PORTB,LED_verde ;LED verde liga..

btfss PORTB,botao_pressao ;testo o botão de pressão..


return

call atrazo_meio_segundo

bcf PORTB,LED_verde ;LED verde desliga..

btfss PORTB,botao_pressao ;testo o botão de pressão..


return

call atrazo_meio_segundo

goto pisca_LED_verde ;volta ao inicio do LOOP..


;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

J.P. Casainho Página 11 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina que gera o Acknowledge..

fazer_ACKNOWLEDGE:

bcf PORTB,serial_data_out ;Serial Data = 0


call atrazo_20us ;atrazo de 20us..
bsf PORTB,serial_clock ;Serial Clock = 1
call atrazo_20us ;atrazo de 20us..
bcf PORTB,serial_clock ;Serial Clock = 0
call atrazo_20us ;atrazo de 20us..

return
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina lê um byte enviado pela 24LC64, para usar seguidamente depois de se enviar o
;"CONTROL BYTE de leitura".. retorna com o valor do byte lido na variável "byte_lido".
;Variaveis usadas: "byte_lido" e "contador_1".

ler_byte:

bsf STATUS,RP0 ;BANK 1


movlw 11001101B ;Serial_data_out como pino de entrada..
movwf TRISB
bcf STATUS,RP0 ;BANK 0

movlw 8
movwf contador_1 ;contador = 8, número de bits a ler..

ler_byte_1:

call atrazo_20us
bsf PORTB,serial_clock ;Serial Clock = 1

J.P. Casainho Página 12 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

call atrazo_20us

btfss PORTB,serial_data_in ;verificar o valor da Serial Data..


goto l_b_zero

bsf byte_lido,0 ;byte "byte_lido" com o 1º bit fica com o valor 0..
goto ler_byte_2

l_b_zero:

bcf byte_lido,0 ;byte "byte_lido" com o 1º bit fica com o valor 1..

ler_byte_2:

rlf byte_lido ;desloco para a esquerda o byte..

bcf PORTB,1 ;Serial Clock = 0


call atrazo_20us

decfsz contador_1
goto ler_byte_1 ;voltar a ler mais um bit até completar o byte..

bsf STATUS,RP0 ;BANK 1


movlw 11001001B ;Serial_data_out como pino de saida..
movwf TRISB
bcf STATUS,RP0 ;BANK 0

return ;voltar da rotina.. "byte_lido" é o byte lido!!


;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina que só retorna depois da 24LC64 ter escrito os dados internamente..
;caso o Acknowledge falhe é porque existiu uma falha ao enviar o dado, então o PIC adormeçe e
;o LED vermelho fica ligado.. desligar o CLIP e iniciar tudo de novo..
;Variaveis usadas: "byte_para_enviar", "contador_1" e "contador_2".

J.P. Casainho Página 13 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

teste_escrita_24LC64:

clrf contador_2 ;contador_2 = 0

teste_escrita_24LC64_0:

call atrazo_20us
call atrazo_20us ;40us de atrazo para dar tempo da 24LC64 acabar o "burn" dos
;dados internamente..

call START ;inicio da comunicacao com a 24LC64..

movlw 0xA0
movwf byte_para_enviar ;enviar control byte de escrita..

movlw 8
movwf contador_1 ;contador_1 = 8

teste_escrita_24LC64_1:

btfss byte_para_enviar,7
goto teste_escrita_24LC64_2

bsf PORTB,serial_data_out ;Serial Data OUT = 1


goto teste_escrita_24LC64_3

teste_escrita_24LC64_2:

bcf PORTB,serial_data_out ;Serial Data OUT = 0

teste_escrita_24LC64_3:

call atrazo_20us
bsf PORTB,serial_clock ;Serial Clock = 1
call atrazo_20us
bcf PORTB,serial_clock ;Serial Clock = 0
call atrazo_20us

rlf byte_para_enviar ;roda para a esquerda o byte..

decfsz contador_1 ;contador-1, contador=0 ??


goto teste_escrita_24LC64_1 ;volta para trás para enviar outro bit.. os 8 bits
;ainda não foram todos enviados..

J.P. Casainho Página 14 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

;Ao chegar aqui já foi enviado o byte, tenho de verificar se a 24LC64 recebeu OK o byte,
;se sim ela gera o bit de Acknowledge!!

bsf STATUS,RP0 ;BANK 1


movlw 11001101B ;Serial_data_out como pino de entrada..
movwf TRISB
bcf STATUS,RP0 ;BANK 0

bsf PORTB,serial_clock ;Serial Clock = 1


call atrazo_20us
btfss PORTB,serial_data_in ;Serial Data IN = 0 ?!?
goto ACK_ERRO ;não.. Acknowledge ERRO..

call atrazo_20us
bcf PORTB,serial_clock;Serial Clock = 0

call STOP ;fim da comunicacao com a 24LC64..

bsf STATUS,RP0 ;BANK 1


movlw 11001001B ;Serial_data_out como pino de saida..
movwf TRISB
bcf STATUS,RP0 ;BANK 0

return ;voltar da rotina..

ACK_ERRO:

call atrazo_20us
bcf PORTB,serial_clock;Serial Clock = 0

bsf STATUS,RP0 ;BANK 1


movlw 11001001B ;Serial_data_out como pino de saida..
movwf TRISB
bcf STATUS,RP0 ;BANK 0

J.P. Casainho Página 15 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

decfsz contador_2 ;se este loop de tentativa de esperar pelo Acknowledge


goto teste_escrita_24LC64_0 ;da 24LC64 sinalizando a finalizacao da escrita dos
;dados internamente, chegar ao fim, entao há um erro na escrita da 24LC64..
;como diz no datasheet da memória, "5 ms max write cycle time", cada um destes loops anteriores
;demora pelo menos 40us, 40us*255 = 10200 us > 5 ms..

bsf PORTB,LED_vermelho ;LED vermelho ligado, ERRO na comunicação com a 24LC64!!


sleep ;adormeçer o PIC..
;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina que envia para a 24LC64 um byte contido na variavel "byte_para_enviar"..
;Só retorna caso o byte seja enviado com sucesso.. caso o Acknowledge falhe é porque existiu
;uma falha ao enviar o dado, então o PIC adormeçe e o LED vermelho fica ligado..
;desligar o CLIP e iniciar tudo de novo..
;Variaveis usadas: "bye_para_enviar" e "contador_1".

enviar_byte:

movlw 8
movwf contador_1 ;contador_1 = número de bits a enviar..

enviar_byte_1:

btfss byte_para_enviar,7
goto e_b_saida_0

bsf PORTB,serial_data_out ;Serial Data OUT = 1


goto enviar_byte_2

e_b_saida_0:

bcf PORTB,serial_data_out ;Serial Data OUT = 0

enviar_byte_2:

call atrazo_20us
bsf PORTB,serial_clock ;Serial Clock = 1

J.P. Casainho Página 16 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

call atrazo_20us
bcf PORTB,serial_clock ;Serial Clock = 0
call atrazo_20us

rlf byte_para_enviar ;roda para a esquerda o byte_para_enviar..

decfsz contador_1 ;contador_1 - 1 ; contador_1 = 0 ??


goto enviar_byte_1 ;volta para trás para enviar outro bit.. os 8 bits ainda não
;foram todos enviados..

;Ao chegar aqui já foi enviado o byte, tenho de verificar se a 24LC64 recebeu OK o byte, se sim
;ela gera o bit de Acknowledge!!

bsf STATUS,RP0 ;BANK 1


movlw 11001101B ;Serial_data_out como pino de entrada..
movwf TRISB
bcf STATUS,RP0 ;BANK 0

bsf PORTB,serial_clock ;Serial Clock = 1


call atrazo_20us
btfss PORTB,serial_data_in ;Serial Data IN = 0 ?!?
goto ACK_ERRO_1 ;não.. Acknowledge ERRO..

call atrazo_20us
bcf PORTB,serial_clock ;Serial Clock = 0

bsf STATUS,RP0 ;BANK 1


movlw 11001001B ;Serial_data_out como pino de saida..
movwf TRISB
bcf STATUS,RP0 ;BANK 0

return ;voltar da rotina..

ACK_ERRO_1:

bsf PORTB,LED_vermelho ;LED vermelho ligado, ERRO na comunicação com a 24LC64!!


sleep ;adormeçer o PIC..

J.P. Casainho Página 17 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina de START..
;Rotina feita como descrito no datasheet da memória 24LC64:
;A linha de Serial Data muda de 0 para 1 durante um impulso de Clock..

START:

bsf PORTB,serial_data_out ;Serial Data = 1


call atrazo_20us ;atrazo de 20us..
bsf PORTB,serial_clock ;Serial Clock = 1
call atrazo_20us ;atrazo de 20us..
bcf PORTB,serial_data_out ;Serial Data = 0
call atrazo_20us ;atrazo de 20us..
bcf PORTB,serial_clock ;Serial Clock = 0
call atrazo_20us ;atrazo de 20us..

return
;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina de STOP..
;Rotina feita como descrito no datasheet da memória 24LC64:
;A linha de Serial Data muda de 0 para 1 durante um impulso de Clock..

STOP:

bcf PORTB,serial_data_out ;Serial Data = 0


call atrazo_20us ;atrazo de 20us..
bsf PORTB,serial_clock ;Serial Clock = 1
call atrazo_20us ;atrazo de 20us..
bsf PORTB,serial_data_out ;Serial Data = 1
call atrazo_20us ;atrazo de 20us..

J.P. Casainho Página 18 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

bcf PORTB,serial_clock ;Serial Clock = 0


call atrazo_20us ;atrazo de 20us..
return
;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina de atrazo..
atrazo_20us:

nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
nop ;1us
;16 NOP's.. => 16us..

return ;2us..

;
; Tempo total da rotina: 20us..
;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

J.P. Casainho Página 19 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

;
;Rotina de atrazo de 1 milisegundo.
milisegundo:
movlw 248 ;1us
movwf contador_atrazo_1 ;1us

milisegundo_1:
decf contador_1 ;1us
btfss STATUS,Z ;2us se saltar, else 1us
goto milisegundo_1 ;2us
nop ;1us
nop ;1us
nop ;1us
return ;2us
; Tempo: 1+1+(247*4)+3+3+2=998+2(call)=1.000/1.000.000=0,001 segundo=1 milisegundo.
;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
atrazo_meio_segundo:
movlw 124
movwf contador_atrazo_2

atrazo_meio_segundo_1:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
call milisegundo
call milisegundo
call milisegundo

J.P. Casainho Página 20 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

call milisegundo
decf contador_atrazo_2
btfss STATUS,Z
goto atrazo_meio_segundo_1
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
return
; Tempo: 1+1+(124*4016)+4015+11+2=497998+2(call)=498.000/1.000.000= 0.498 segundos..
;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

end

NOTA (V.6): O HEX está na seguinte página. Selecionar o texto da página seguinte, copiar para a memória, colar num ficheiro .TXT e
dar-lhe o nome do ficheiro – “CLIP RaboVisão II (29.Abril.2002).hex”.

J.P. Casainho Página 21 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

:1000000083168117C93086001F3085008312452072
:100010000612BC20A03090009C2090019C20503003
:1000200090009C20203092005F3090009C20920B2A
:100030001428C5206D20BC20A03090009C20900189
:100040009C20503090009C20BC20A13090009C202F
:100050002030920055204E205F30110203194020BD
:10006000920B2A2886160612E82086120616E82029
:100070008616E82006128612E8200616E8203228A6
:100080008616E8208616E82040280616061F080077
:10009000E8200612061F0800E82045280611CE2099
:1000A0008614CE208610CE2008008316CD30860020
:1000B000831208308E00CE208614CE20861D622842
:1000C000111463281110910D8610CE208E0B5B2821
:1000D0008316C9308600831208008F01CE20CE20FF
:1000E000BC20A030900008308E00901F79280615A3
:1000F0007A280611CE208614CE208610CE20900DB0
:100100008E0B75288316CD30860083128614CE2080
:1001100086199228CE208610C5208316C930860005
:1001200083120800CE2086108316C9308600831201
:100130008F0B6E288616630008308E00901FA22851
:100140000615A3280611CE208614CE208610CE20B8
:10015000900D8E0B9E288316CD3086008312861458
:10016000CE208619BA28CE2086108316C930860084
:1001700083120800861663000615CE208614CE2052
:100180000611CE208610CE2008000611CE2086143F
:10019000CE200615CE208610CE20080000000000DC
:1001A000000000000000000000000000000000004F
:1001B0000000000000000000000000000800F8300F
:1001C0008C008E03031DE1280000000000000800E1
:1001D0007C308D00000000000000000000000000E6
:1001E000000000000000000000000000DF20DF2011
:1001F000DF20DF208D03031DEA280000000000003F
:1002000000000000000000000000000000000000EE
:020210000800E4
:02400E00EA3F87
:00000001FF

J.P. Casainho Página 22 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

From:"_GorDoN_" <*****@*******.pt>

To:casainho@yahoo.com

Subject:gordon

Date:Mon, 25 Mar 2002 21:12:01 -0000

Tive a falar contigo ao tlm á pouco


Aqui tens informação á cerca do tipo e localizaçao de canais bloqueados na bin.

ordem de canais:
sexyhot
playboy
sportv
telecine1
telecine2
disney

Margem sul entre bytes 66 até 71


005f_005f_005f_005f_005f_005f
( 5f = desblok, 1f = blokeado )

Serra da Estrela entre bytes 64 até 6f


005f_005f_005f_005f_005f_005f
( 5f = desblok, 1f = blokeado )

Castelo Branco entre bytes 6e até 79


0046_0046_004a_004a_004a_004a
( 5f = desblok, 00 = blokeado )

Estarraja entre bytes 68 até 73

J.P. Casainho Página 23 de 24


CLIP RaboVisão V.6 (24.Setembro.2004)

005f_005f_005f_005f_005f_005f
( 5f = desblok, 1f = blokeado )

Aquele desblokeio que o teu clip faz como podes ver, nao faz a zona de castelo branco, nao sei se á mais zonas como esta. o que o clip
faz na minha teoria é um desbloqueio de deve funcionar na maioria das zonas do pais, meter tudo a 5f naqueles endereços e depois a box
actualiza-se por ela propria ( como pudes-te confirmar ).
...

NOTA (V.6): A primeira versão deste CLIP RaboVisão foi feita em Março de 2002!!

Agradecimentos: Gremlins, Rei do Bem, Gordon e Dário Angelo.

Endereços úteis:
1. Fórum de suporte BOX ATMEL TvRabo Cabo - BoxAtmel.cjb.net
2. Fórum de suporte BOX ATMEL V6 - RaboVisão cabo e TvRabo Cabo - AtmelV6.cjb.net

J.P. Casainho Página 24 de 24

Potrebbero piacerti anche