ZX-BATTLE
COMPUTADOR ZX SPECTRUM
Emuladores
Jogos
Programação
Sites
Utilitários
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
LINKS
 
Inicio Site
 
 

COMPUTADOR - ZX SPECTRUM


TUTORIAIS



"Como Ligar o ZX Spectrum ao Raspberry PI3"

    - Parte 1 de 10 - Hardware Necessário para o Projecto.- Ver
    - Parte 2 de 10 - Instalação do S.O. do Raspberry PI3. - Ver
    - Parte 3 de 10 - Instalação de alguns utilitários necessários.- Ver
    - Parte 5 de 10 - Apresentação dos Programas utilizados no Projecto.- Ver


- Parte 4 de 10 - Teste da Conexão entre Raspberry e ZX Spectrum.

    Chegou finalmente o momento da acção, vamos começar por ligar todos os cabos e equipamentos usados no nosso projecto. Observe a fig.4.1 para ter uma ideia, não se esqueça que deve ligar a ficha DB9 Macho Cinzenta ao Raspberry e a Preta ao ZX Spectrum.

zx

    O protocolo RS232 usa um START BIT e um STOP BIT para sincronizar a comunicação. É utilizada uma lógica invertida, quer dizer, para representar o nível lógico "0" usa-se uma tensão alta (+15V) e para o nível lógico "1" uma tensão baixa (-15V). Resumindo é o seguinte:

Start Bit = +15Volts
Stop Bit = -15Volts
Nivel Lógico 0 = +15Volts
Nível Lógico 1 = -15Volts

    A sequência de Transmissão/Recepção é a seguinte:

StartBit, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, StopBit.

    A norma RS232 usa ainda um Parity Bit que é opcional, no nosso projecto não vamos usar esse bit. Examine a fig.4.2 para ter uma visão concreta da sequência dos dados.

zx

    Ligue agora à corrente o Rasberry, o ZX Spectrum e o Monitor. Neste momento o Rasberry apresenta uma tensão electrica de +5,5Volts no pino TXD e o Spectrum de +7Volts também no mesmo pino. Assim que usarmos a Microdrive a tensão do pino TXD do ZX Spectrum desce automaticamente para -15Volts. O valor destas tensões não é muito importante porque a margem de variação é grande. Para o valor lógico "0" a tensão pode estar compreendida entre +3V e +15V. No caso do valor lógico "1" a tensão pode variar entre -3V e -15V.

    No ZX Spectrum é usado o porto 247 para ler a linha RXD. O valor da linha é dado no bit 7. Digite este pequeno programa no Spectrum para ler a linha RXD.

10 LET d=IN 247
15 POKE 23692,0
20 PRINT d: GOTO 10

    Se a variável D for menor que 128 significa que a tensão no pino RXD está na gama de -3V a -15V, caso contrário a tensão tem um valor entre +3V e +15V.

    No Raspberry PI3 temos ainda que configurar a porta RS232, para isso digite no programa Putty o comando:

sudo raspi-config

    e siga os passos indicados nas imagens seguintes:

zx

zx

zx

zx

zx

zx

zx

    Após ter feito as configurações e reiniciado o Raspberry vamos fazer novamente o Login no programa Putty e digitar o comando:

echo "dtoverlay=disable-bt" | sudo tee -a /boot/config.txt

    Com este último comando terminámos as configurações do sistema operativo do Raspberry. Vamos agora dedicar-nos ao desenvolvimento dos programas para a comunicação serial entre os dois computadores. No Raspberry vamos usar uma linguagem de programação chamada "Python". Escolhemos esta linguagem por ser a mais fácil e rápida de aprender e também por ser a mais utilizada para desenvolver pequenos programas para o Raspberry. 

    Todas as linguagens de programação usam as chamadas "Bibliotecas" para controlar o hardware instalado. Estas Bibliotecas não são mais do que rotinas criadas especificamente para a função pretendida, por isso  temos que instalar a Biblioteca para controlar a porta Serial do Raspberry com o seguinte comando:

sudo apt-get install python3-serial

e pronto chegamos finalmente ao fim de todas as configurações, vamos apenas apresentar o primeiro programa para executar no Raspberry. Este programa tem como objectivo testar a comunição entre o Raspberry e o ZX Spectrum. É obrigatório respeitar as letras maiúsculas e minúsculas no momento de escrever um programa porque o sistema faz distinção entre elas. Por exemplo as palavras "serial" e "Serial" são interpretadas de modo diferente. Outra coisa importante consiste no alinhamento do texto, cada bloco de código deve ficar alinhado na mesma coluna. Posto isto eis o primeiro programa.

    Use o editor NANO para escrever o programa:

nano p4.py

zx

    Este programa recebe o byte da porta RS232 enviado pelo ZX Spectrum e envia de volta o byte para o ZX Spectrum pela porta RS232, veja a descrição do programa:

- Importa a Biblioteca "serial" usada para controlar a porta RS232.
- Importa a Biblioteca "time" necessária para as funções de temporização.
- Abre e configura a porta Serial a 9600 Bauds.
- Cria um ciclo infinito com a instrução "while True:". As instruções seguintes são executadas infinitamente.
- Lê um byte da porta RS232 "rxd = rs.read(1)".
- Faz uma pausa de 0,1 segundos.
- Escreve um byte na porta RS232 "rs.write(rxd)".
- Mostra no ecrã o byte recebido.

    Para o ZX Spectrum temos também um programa. Este programa usa algumas rotinas em ASM "Código-Máquina" para se conseguir uma velocidade suficientemente alta. Estas rotinas estão colocadas nas linhas DATA do programa BASIC. No programa criamos um ciclo de contagem decrescente com a instrução FOR, essa contagem começa no numero 63 e termina no 0.  Enviamos a contagem (Byte a Byte) para o Raspberry e esperamos que o Raspberry nos envie esses valores de volta. Para que o teste tenha sucesso é necessário que os bytes recebidos sejam iguais aos bytes enviados ao Raspberry. 

    Há duas formas de obter o programa, uma é escrever o programa que mostramos a seguir directamente no ZX Spectrum, a outra é descarregar o ficheiro WAV ou TAP e carrega-lo no ZX Spetrum através dum leitor de audio (Gravador de Cassetes ou Leitor de MP3).

    Digite este programa no ZX Spectrum ou descarregue o ficheiro mais à frente.

10 BORDER 0: PAPER 0: INK 6: GOSUB 1000
13 PRINT "Testando Comunicacao c/ RPI3!"
15 PRINT : PRINT "Aguarde um memento ...": PRINT
20 FOR t=63 TO 0 STEP -1
25 POKE 50000,t: POKE 65006,1
30 RANDOMIZE USR 65002
35 LET f=USR 65000
40 LET d=PEEK 50000
45 PRINT d: POKE 23692,0
50 IF f<>1 THEN PRINT : PRINT PAPER 2; FLASH 1;"Raspberry PI3 nao encontrado!": STOP
55 IF d<>t THEN PRINT "Erro de Comunicacao!": STOP
60 NEXT t
65 PRINT : PRINT PAPER 1; INK 6; FLASH 1;"Cabo RS232 Testado C/ Sucesso!": PRINT : PRINT : PRINT
999 STOP
1000 CLEAR 29999: RESTORE 2000
1005 LET m=65000: LET s=0
1010 READ d: IF d>255 THEN GOTO 1050
1015 POKE m,d: LET m=m+1: LET s=s+d: GO TO 1010
1050 IF d<>s THEN PRINT "Data Error!": STOP
1060 RETURN
2000 DATA 24 ,5 ,24 ,45 ,80
2010 DATA 195,0 ,243,14 ,127
2020 DATA 6 ,100,42 ,236,253
2030 DATA 30 ,20 ,205,44 ,254
2040 DATA 56 ,5 ,16 ,247,72
2050 DATA 24 ,20 ,119,35 ,30
2060 DATA 20 ,205,44 ,254,48
2070 DATA 3 ,13 ,32 ,244,237
2080 DATA 75 ,236,253,237,66
2090 DATA 68 ,77 ,251,201,243
2100 DATA 42 ,236,253,58 ,238
2110 DATA 253,71 ,126,30 ,20
2120 DATA 205,105,254,35 ,16
2130 DATA 247,251,201,229,197
2140 DATA 14 ,247,22 ,128,33
2150 DATA 230,27 ,62 ,1 ,211
2160 DATA 254,237,120,162,32
2170 DATA 7 ,43 ,124,181,32
2180 DATA 246,24 ,27 ,46 ,128
2190 DATA 123,31 ,131,198,1
2200 DATA 87 ,21 ,32 ,253,167
2210 DATA 83 ,237,96 ,203,4
2220 DATA 203,29 ,48 ,243,203
2230 DATA 59 ,29 ,32 ,253,55
2240 DATA 62 ,0 ,211,254,125
2250 DATA 47 ,193,225,201,229
2260 DATA 47 ,103,62 ,2 ,211
2270 DATA 254,62 ,239,211,239
2280 DATA 46 ,10 ,62 ,1 ,14
2290 DATA 247,237,121,83 ,21
2300 DATA 32 ,253,175,203,28
2310 DATA 23 ,45 ,32 ,243,62
2320 DATA 0 ,211,254,225,201
2330 DATA 19710: REM SOMA TOTAL
9998 STOP
9999 SAVE "RS-TEST" LINE 10

    Programa "RS-TEST" - Download

   Depois de ter os dois programas prontos, execute primeiro o programa do Raspberry PI3 com o comando:

Python3 p4.py

A seguir execute o programa do ZX Spectrum com RUN. Se tudo estiver bem é mostrada a mensagem "Cabo RS232 testado c/ Sucesso!". Por agora é tudo, no próximo tutorial vamos apresentar os programas para executarem a nossa tarefa, transformar o Raspberry num Servidor de ficheiros para o ZX Spectrum.

Até à Próxima!

Anterior     Seguinte






P
U
B
L
I
C
I
D
A
D
E
Copyright 2005-2023 ZX-Battle. Todos os direitos Reservados