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