Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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!!
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).
- 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!!
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..
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.
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
;
; Inicio do programa principal..
;
inicio:
;
;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
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:
movlw 0x5F
movwf byte_para_enviar ;o nosso dado.. 0x5F..
call enviar_byte
;
;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"..
;
movlw 0xA0
movwf byte_para_enviar ;o CONTROL byte de escrita..
call enviar_byte
movlw 0x50
movwf byte_para_enviar ;o LOW byte do endereço 0x0050..
call enviar_byte
movlw 0xA1
movwf byte_para_enviar ;o CONTROL byte de leitura..
call enviar_byte
movlw 32
movwf contador_3
ler_e_verificar_os_32bytes:
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:
call atrazo_meio_segundo
LED_verde_ON_LED_vermelho_OFF:
call atrazo_meio_segundo
LEDs_ligados:
call atrazo_meio_segundo
LEDs_desligados:
call atrazo_meio_segundo
LED_verde_ON_LED_vermelho_OFF_1:
call atrazo_meio_segundo
;
; 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..
LED_vermelho_OFF:
call atrazo_meio_segundo
LED_vermelho_ON:
call atrazo_meio_segundo
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
pisca_LED_verde:
call atrazo_meio_segundo
call atrazo_meio_segundo
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;Rotina que gera o Acknowledge..
fazer_ACKNOWLEDGE:
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:
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
call atrazo_20us
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:
decfsz contador_1
goto ler_byte_1 ;voltar a ler mais um bit até completar o byte..
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;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".
teste_escrita_24LC64:
teste_escrita_24LC64_0:
call atrazo_20us
call atrazo_20us ;40us de atrazo para dar tempo da 24LC64 acabar o "burn" dos
;dados internamente..
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
teste_escrita_24LC64_2:
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
;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!!
call atrazo_20us
bcf PORTB,serial_clock;Serial Clock = 0
ACK_ERRO:
call atrazo_20us
bcf PORTB,serial_clock;Serial Clock = 0
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;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
e_b_saida_0:
enviar_byte_2:
call atrazo_20us
bsf PORTB,serial_clock ;Serial Clock = 1
call atrazo_20us
bcf PORTB,serial_clock ;Serial Clock = 0
call atrazo_20us
;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!!
call atrazo_20us
bcf PORTB,serial_clock ;Serial Clock = 0
ACK_ERRO_1:
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;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:
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:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;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..
;
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;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
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”.
: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
From:"_GorDoN_" <*****@*******.pt>
To:casainho@yahoo.com
Subject:gordon
ordem de canais:
sexyhot
playboy
sportv
telecine1
telecine2
disney
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!!
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