Index
-
Upload
api-3762369 -
Category
Documents
-
view
128 -
download
1
Transcript of 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!
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).
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!!
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.
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.
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
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:
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:
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:
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..
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.. ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
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".
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..
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
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
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.. ;
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..
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.. ; ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
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”.
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
CLIP RaboVisão V.6 (24.Setembro.2004)
J.P. Casainho Página 23 de 24
From:"_GorDoN_" <*****@*******.pt>
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
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