Index

24
CLIP RaboVisão V.6 (24.Setembro.2004) J.P. Casainho Página 1 de 24 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!

Transcript of Index

Page 1: Index

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

J.P. Casainho Página 1 de 24

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!

Page 2: Index

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

J.P. Casainho Página 2 de 24

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).

Page 3: Index

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

J.P. Casainho Página 3 de 24

- 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!!

Page 4: Index

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

J.P. Casainho Página 4 de 24

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.

Page 5: Index

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

J.P. Casainho Página 5 de 24

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: [email protected] ; ;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.

Page 6: Index

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

J.P. Casainho Página 6 de 24

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

Page 7: Index

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

J.P. Casainho Página 7 de 24

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:

Page 8: Index

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

J.P. Casainho Página 8 de 24

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:

Page 9: Index

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

J.P. Casainho Página 9 de 24

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:

Page 10: Index

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

J.P. Casainho Página 10 de 24

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..

Page 11: Index

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

J.P. Casainho Página 11 de 24

; 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.. ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Page 12: Index

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

J.P. Casainho Página 12 de 24

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; ;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

Page 13: Index

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

J.P. Casainho Página 13 de 24

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".

Page 14: Index

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

J.P. Casainho Página 14 de 24

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..

Page 15: Index

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

J.P. Casainho Página 15 de 24

;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

Page 16: Index

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

J.P. Casainho Página 16 de 24

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

Page 17: Index

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

J.P. Casainho Página 17 de 24

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.. ;

Page 18: Index

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

J.P. Casainho Página 18 de 24

; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; ;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..

Page 19: Index

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

J.P. Casainho Página 19 de 24

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.. ; ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Page 20: Index

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

J.P. Casainho Página 20 de 24

; ;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

Page 21: Index

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

J.P. Casainho Página 21 de 24

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”.

Page 22: Index

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

J.P. Casainho Página 22 de 24

: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

Page 23: Index

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

J.P. Casainho Página 23 de 24

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

To:[email protected]

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

Page 24: Index

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

J.P. Casainho Página 24 de 24

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