-->
gpsim
$Data: Documento original 2006-11-09 08:27:47 $
$Data: Tradução e complemento 27/08/20012 01:11:25 $
Linux: para quem não tem medo do novo...
Introdução
Modificado
a configuração para remover a dependência
libgtk + extra-x11-3.0-0. Como resultado, não existe mais interface gui
libgtk + extra-x11-3.0-0. Como resultado, não existe mais interface gui
para
o gpsim. No entanto, as bibliotecas caracterizado por esta compilação
são
suficiente para Ktechlab, que fornece uma interface gráfica.
suficiente para Ktechlab, que fornece uma interface gráfica.
1.2
Executando
O criado executável anteriormente é chamado de: gpsim. As opções
de linha de comando podem ser especificadas quando gpsim é
invocado.
Gpsim [-?]
[-p <device> [<hex_file>]] [-c <stc_file>]
-v,
--version
Help
options:
-?, --help
Mostrar esta
mensagem de ajuda
Invocando
gpsim:
/diretório_do_arquivo
gpsim -s arquivo.cod
O gpsim
irá abrir o arquivo.cod e executar seu conteúdo.
Outro
exemplo:
/diretório_do_arquivo gpsim -p pic16f628 -s arquivo.cod -c
arquivo.sct
O gpsim
carrega o PIC16f628 abre o arquivo.cod e inicializa o arquivo de
comandos.sct(se vc já o tiver editado)
Capitulo 2
Interface
de linha de Comandos
A interface de linha de comando é bastante simples. A tabela abaixo
resume o comandos disponíveis Breves descrições destes comandos
também podem ser exibidas digitando help na linha de comando.
Attack
– anexar estimulos para os nós
break
- definir um ponto de ruptura ou parada
bus
- adicionar ou exibir nó de barramento
clear
- remover um ponto de ruptura
disassembly
- desmonte cpu atual
dump
- mostrar ou memória ram ou eeprom
frequency
-definir frequencia do processador
help
-ajuda
quit
-Saia gpsim
step
- Executar um ou mais instruções
stimulus
-Criar um estímulo
stopwatch
-Medida de tempo entre eventos
x
- (obsoleto) examinar e / ou modificar memória
Invocando
gpsim:
/diretório_do_arquivo
gpsim -s arquivo.cod
O gpsim
irá abrir o arquivo.cod e executar seu conteúdo.
Outro
exemplo:
/diretório_do_arquivo gpsim -p pic16f628 -s arquivo.cod -c
arquivo.sct
O gpsim
carrega o PIC16f628 abre o arquivo.cod e inicializa o arquivo de
comandos.sct
Exemplo do
como usar o gpsim
Este é um exemplo de um circuito simulando gpsim, é a verificação
do funcionamento dos comparadores em um PIC16F877A.
Modulo Led
Gpsim-led
é um módulo de LED de 7 segmentos para gpsim, que consiste em uma
biblioteca compartilhada que é carregada dinamicamente. Exemplos
Como usar o módulo estão incluídos.
-->
Este é um
resumo do circuito em gpsim dos primeiros passos para os iniciantes.
No meu
caso não abriu o GUI que, é a janela de visualização do gpsim,
tentei várias versões e inumeras vezes e nada. Enfim estou usando o
Gpsim versão 0.24.0 original de minha instalação como
recomendado.
Gpsim tem uma interface gráfica muito básica e não pode desenhar circuitos diretamente no modo gráfico, a príncipio é um pouco díficil, mas é o que temos ... alguém com conhecimento de C + + poderia se sentir incentivados a melhorar isso??
Gpsim tem uma interface gráfica muito básica e não pode desenhar circuitos diretamente no modo gráfico, a príncipio é um pouco díficil, mas é o que temos ... alguém com conhecimento de C + + poderia se sentir incentivados a melhorar isso??
Para
exemplificar estou usando um código fonte de modelo para este
tutorial: Led1.asm
;*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
PROJETO: Acionando Led *
;*
*
;*
DESENVOLVIDO: HENRY MARCONDES *
;*
VERSAO: 1.0 DATA: 01/02/12 *
;*
*
;*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
DESCRICAO DO ARQUIVO *
;*-----------------------------------------------------------------*
;*
Este projeto foi desenvolvido para testar o gpsim *
;===================================================================
;*
1-1 ARQUIVOS DE DEFINICOES *
;-------------------------------------------------------------------
#INCLUDE
<p16f873a.inc>
__CONFIG
_CP_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF &
_PWRTE_ON & _WDT_OFF & _XT_OSC
;===================================================================
;*
Descricao das Definicoes para PIC16f877A *
;------------------------------------------------------------------
;*CP_OFF
-> Codigo de Protecao desligado *
;*CPD_OFF
-> Memoria EEPROM desprotegida contra leitura *
;*BODEN_OFF
-> Sistema de baixa tensao DESLIGADO *
;*PWRTE_ON
-> Ativa Power Up Timer *
;*WDT_OFF
-> Watchdog desligado *
;*LVP_OFF
-> Sistema de programacao de baixa tensao desligado *
;*RS_OSC
-> Oscilador CRISTAL p/ frequencia 4MHz *
;*DEBUG_OFF
-> In circuit Debug desabilitado pino RB6 e RB7 -> I/O *
;===================================================================
;*
1-2 PAGINACAO DE MEMORIA *
;-------------------------------------------------------------------
;DEFINICAO
DE COMANDOS DE USUARIO PARA ALTERACAO D0 BANCO DE MEMORIA
#DEFINE BANK0 BCF
STATUS,RP0 ;SETA BANK 0 DE MEMORIA
#DEFINE BANK1 BSF
STATUS,RP0 ;SETA BANK 1 DE MEMORIA
;===================================================================
;*
1-3 VARIAVEIS *
;-------------------------------------------------------------------
;
DEFINICAO DOS NOMES E ENDERECOS DE TODAS AS VARIAVEIS UTILIZADAS *
CBLOCK 0x20 ;ENDERECO
INICIAL DA MEMORIA DE
TEMPO0 ;variavel
da rotina DELAY_MS
TEMPO1 ;variavel
da rotina DELAY_MS
FLAG ;Flag
Auxiliar para sistema
STATUS_TEMP
W_TEMP
ENDC
;===================================================================
;*
1-7 ENTRADAS E SAIDAS *
;-------------------------------------------------------------------
#DEFINE
LED PORTB,1
#DEFINE
BT1 PORTB,0
;===================================================================
;*
1-8 VETOR DE RESET *
;-------------------------------------------------------------------
ORG 0x00 ;ENDERECO
INICIAL DE PROCESSAMENTO
GOTO CONFIGURA
;===================================================================
;*
1-9 INICIO DA INTERRUPCAO *
;*
Salvar os Valores de W e Status para recuperar no fim da rotina *
;-------------------------------------------------------------------
ORG 0x04 ;ENDERECO
INICIAL DA INTERRUPCAO
MOVWF W_TEMP ;COPIA
W P/ W_TEMP
SWAPF STATUS,W ;INVERTE
STATUS E COLOCA EM W
MOVWF STATUS_TEMP
;COPIA W P/STATUS_TEMP
;===================================================================
;*
ROTINA DE SAIDA DA INTERRUPCAO *
;*
Recuperar os valores de W e STATUS e resetar o flag da interrup *
;-------------------------------------------------------------------
SAI_INT
SWAPF
STATUS_TEMP,W ;INVERTE STATUSE COLOCA EM W
MOVWF STATUS ;
MOVW W PARA STATUS
SWAPF W_TEMP,F ;INVERTE
W_TEMP E COLOCA EM F
SWAPF W_TEMP,W ;MOVE
W_TEMP PARA W
RETFIE
;===================================================================
;*
1-11 ROTINA DELAY (1mS ATE 256mS) *
;-------------------------------------------------------------------
DELAY_MS
MOVWF
TEMPO1
MOVLW
.250
MOVWF
TEMPO0
DECFSZ
TEMPO0,F
GOTO
$-1
DECFSZ
TEMPO1,F
GOTO
$-5
RETURN
;===================================================================
;*
1-14 INICIO DO PROGRAMA *
;-------------------------------------------------------------------
CONFIGURA
CLRF
PORTA
CLRF
PORTB
CLRF
PORTC
BANK1
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000010'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'11011011'
MOVWF OPTION_REG ;PUL-UPs
desabilitados
;int
na borda de subida para RB0
;TIMER0
incr pla maquina
;WDT
- 1:8 TIMER - 1-1
MOVLW B'00000000'
MOVWF INTCON
BANK0
BSF LED ;LIGA
LED
GOTO
MAIN
;===================================================================
;*
1-19 ROTINA PRINCIPAL *
;-------------------------------------------------------------------
;
A rotina de LIGA e DESLIGA o LED sempre que o BT1 estiver *
;pressionado
*
;------------------------------------------------------------------*
MAIN
BTFSC BT1 ;TESTA
se BT1=0
GOTO MAIN ;NAO
BTFSC LED ;TESTA
se LED=0
GOTO DESLIGA ;NAO,
entao desliga o LED
GOTO LIGA ;SIM,
entao liga o LED
DESLIGA
BCF LED
MOVLW 0XFF
CALL DELAY_MS
GOTO MAIN
LIGA
BSF LED
MOVLW 0XFF
CALL DELAY_MS
GOTO MAIN
;------------------------------------------------------------------*
;
FIM DO PROGRAMA *
;------------------------------------------------------------------*
END
Primeiramente
abrir um terminal shell (Konsole) e carregar um archivo.cod. Ou Cof,
este arquivo é gerado quando você compila (constrói) seu projeto no gputils pode ser feito no mesmo terminal( gpasm -s nomedoArquivo.asm), ou Piklab ou onde você
sempre tem feito.
/Modelo$
gpasm -p p16f873a Led1.asm -w 2
Se tudo
estiver correto o arquivo .cod será gerado no diretório (no meu
caso dir Modelo).
Abrindo o
gpsim: não esqueça que você tem que estar no diretótio onde se
encontra o 'arquivo .cod'
/diretório
do arquivo gpsim -s arquivo.cod
Você deverá visualizar algo do parecido com o descrito abaixo:
Você deverá visualizar algo do parecido com o descrito abaixo:
gpsim –
the GNUPIC
version:
Release 0.24.0
type
help for help
**gpsim>
Disabling WDT
**gpsim>
Para ir se
familiarizando com os comandos vamos a algumas instruções no gpsim:
Vamos
definir o processador, no meu caso PIC16F873A
**gpsim>
processor list
Confira se
o processador que você está usando consta na lista de processadores
suportados pelo gpsim.
**gpsim>
processor
Irá
mostrar o processador que esta definido no arquivo.cod caso sejá
difernte ou caso vc queira mudar o processador EX :
**gpsim>
processor pic16f877a
OBS: Não
esqueça de retornar ao processador original caso faça este teste
para evitar erros futuros.
Agora
vamos conferir os pinos do processador :
**gpsim>
processor pins
+--+----------\/----------+--+
L | 1|
portb7 |28| L
L | 2|
porta0 portb6 |27| L
L | 3|
porta1 portb5 |26| L
L | 4|
porta2 portb4 |25| L
L | 5|
porta3 portb3 |24| L
L | 6|
porta4 portb2 |23| L
L | 7|
porta5 portb1 |22| L
L | 8| portb0 |21| L
L | 9| |20| L
L |10| |19| L
L |11|
portc0 portc7 |18| L
L |12|
portc1 portc6 |17| L
L |13|
portc2 portc5 |16| L
L |14|
portc3 portc4 |15| L
+--+---------------------+--+
Verificando
a frequência do oscilador, como visto anteriormente o padrão do
gpsim é 20MHz. Basta então entrar com o comando:
**gpsim>
frequency
Clock
frequency: 20MHz
**gpsim>frequency
4000000.000000000
**gpsim>
frequency
Clock
frequency: 4MHz
É
possivel iniciar diretamente a simulação do arquivo.cod , pórem
provavelmente o circuito não terá o resultado esperado devido as
variáveis ou condição das entradas e saídas nos PORTS, que são
definidos pelos hardware acoplados ao PIC,(Leds, chaves, circuitos,
etc...) ou seja os módulos, na linguagem do gpsim.
O
procedimento para criar o circuito no gpsim começa por carregar uma
biblioteca de módulos, para efetuarmos os 'nós' (ligações) , a
"Biblioteca Add" que é meio escondida, é carregado
através do bloco libgpsim_modules.so, só então nós podemos
escolher os componetes e "Adicionar módulo", dar-lhe um
nome e definir os valores. Maiores detalhes ver tópico 2.13
Note que apesar de parecer um simples simulador o gpsim é muito poderoso e rico em informações de depuração, o pouco que trabalhei com MPLAB não consegui chegar ao nivel de simulação com drivers acoplados aos pinos do gpsim.
Módulos
Note que apesar de parecer um simples simulador o gpsim é muito poderoso e rico em informações de depuração, o pouco que trabalhei com MPLAB não consegui chegar ao nivel de simulação com drivers acoplados aos pinos do gpsim.
Módulos
Abrindo a
bliblioteca de módulos disponiveis no gpsim:
**gpsim>
module lib libgpsim_modules
Verificando
os módulos disponiveis:
A cada
versão do gpsim esses modulos podem variar um pouco, e como eu disse
anteriormente, (é usar o que temos disponível no momento),
**gpsim>
module list
Agora começa a parte que exige mais atenção, você precisa para criar os"nós", ... pinos, nomes... os componentes não se conectam diretamente uns aos outros, mas estão ligados a nós, para ligar duas coisas, primeiro crie um nó e, em seguida, conectar tudo ao nó.
Este arquivo foi escrito para gpsim.
Você pode usar o arquivo arquivo abaixo, como modelo ou referência, carregar o mesmo ou entrar com os dados “á unha....” .
Você pode usar o arquivo arquivo abaixo, como modelo ou referência, carregar o mesmo ou entrar com os dados “á unha....” .
gpsim-s mycode.cod-c netlist.stc
Se você quiser adicionar comandos, você pode criar outro arquivo. Stc e carregar este arquivo a partir dele. Algo parecido com isto:
#
----------- myproject.stc ---------------
# load s mycode.cod
#
frequency 4000000
# load c netlist.stc
Basta,
então, carregar este novo arquivo:
gpsim -c myproject.stc
#
Processor position:
# Module libraries:
module library
libgpsim_modules.so
#
Modules:
p16f873a.CONFIG=$ff
p16f873a.WarnMode=true
p16f873a.SafeMode=true
p16f873a.UnknownMode=true
p16f873a.BreakOnReset=true
p16f873a.BreakOnInvalidRegisterRead=true
p16f873a.BreakOnInvalidRegisterWrite=true
p16f873a.frequency=4000000,000000000
p16f873a.xpos=216,0000000000000
p16f873a.ypos=180,0000000000000
module
load led
led1
led1.xpos=384,0000000000000
led1.ypos=240,0000000000000
module
load led
led2
led2.xpos=384,0000000000000
led2.ypos=180,0000000000000
module
load switch
switch1
switch1.state=false
switch1.Ropen=100000000,0000000
switch1.Rclosed=1,000000000000000
switch1.xpos=60,00000000000000
switch1.ypos=180,0000000000000
module
load switch
switch2
switch2.state=false
switch2.Ropen=100000000,0000000
switch2.Rclosed=1,000000000000000
switch2.xpos=60,00000000000000
switch2.ypos=288,0000000000000
module
load pullup
pullup1
pullup1.resistance=1000,000000000000
pullup1.capacitance=0,000000000000000
pullup1.voltage=2,000000000000000
pullup1.xpos=276,0000000000000
pullup1.ypos=84,00000000000000
module
load pullup
pullup2
pullup2.resistance=1000,000000000000
pullup2.capacitance=0,000000000000000
pullup2.voltage=5,000000000000000
pullup2.xpos=144,0000000000000
pullup2.ypos=60,00000000000000
module
load pullup
pullup3
pullup3.resistance=1000,000000000000
pullup3.capacitance=0,000000000000000
pullup3.voltage=5,000000000000000
pullup3.xpos=216,0000000000000
pullup3.ypos=480,0000000000000
module
load pulldown
pulldown1
pulldown1.resistance=100,0000000000000
pulldown1.capacitance=0,000000000000000
pulldown1.voltage=0,000000000000000
pulldown1.xpos=36,00000000000000
pulldown1.ypos=396,0000000000000
#
Connections:
node nA2
attach nA2 pullup2.pin porta2 switch1.A
cm_stimulus_3
node nA3
attach nA3 pullup3.pin porta3
switch2.A cm_stimulus_4
node nB6
attach nB6 led1.in
portb6
node nB7
attach nB7 led2.in portb7
node
nGnd
attach nGnd pulldown1.pin switch1.B switch2.B
node
nUp
attach nUp pullup1.pin porta0
porta1 cm_stimulus_1 cm_stimulus_2
# End..
Se você
tentar usar esse arquivo de novo não vai funcionar ... pelo menos eu
não consegui, o problema é que casas decimais não tem que ir com
vírgulas, mas com pontos, que é resolvido rapidamente em seu editor
de texto para substituir a função.
Uma vez dispostas essas pequenas coisa o circuito pode ser usado em outras simulações.
Como sugerido pelo mesmo script no início:
Você pode usar este arquivo (netlist.stc) desta maneira:
gpsim-s-c mycode.cod netlist.stc
Uma vez dispostas essas pequenas coisa o circuito pode ser usado em outras simulações.
Como sugerido pelo mesmo script no início:
Você pode usar este arquivo (netlist.stc) desta maneira:
gpsim-s-c mycode.cod netlist.stc
Para criar um arquivo tipo netlist, abra um editor de sua preferência edite segundo suas necessidades e salve com a extenção .stc, no meu caso as posições dos componentes, eu usei o Kicad como referência, simplesmente copiei a localização dos componentes.
A princípio vamos utilizar o comando step, que a propria tradução já diz passo, este comando vai executar passo a passo cada linha linha de instrução do arquivo fonte e você pode acompanhar a seguência e os resultados de cada instrução ex:
**gpsim> step
**gpsim>GOTO CONFIGURA
0000000000000001
ETC....
Caso deseje avançar mais de uma linha pode-se definir o comando step como abaixo:
**gpsim> step 10
O gpsim vai executar 10 linhas de uma só vez , isso é muito útil para agilizar a simulação.
Outra ferramenta muito util na simulação é o conjunto break e run . Dica não acione o run
se você não tiver um break para parar a simulação. O comando break pode ser editado para
parar a simulação em diversas situações definidas pelo usúario .
Vamos a um exemplo prático:
Observe que no fonte editado como exeplo teos um delay ( DELAY_MS) então é de nosso interesse sair rápidamente desse loop para continuar os testes, então... inicialente criamos
um break:
**gpsim> break r T1
**gpsim> step
**gpsim>GOTO CONFIGURA
0000000000000001
ETC....
Caso deseje avançar mais de uma linha pode-se definir o comando step como abaixo:
**gpsim> step 10
O gpsim vai executar 10 linhas de uma só vez , isso é muito útil para agilizar a simulação.
Outra ferramenta muito util na simulação é o conjunto break e run . Dica não acione o run
se você não tiver um break para parar a simulação. O comando break pode ser editado para
parar a simulação em diversas situações definidas pelo usúario .
Vamos a um exemplo prático:
Observe que no fonte editado como exeplo teos um delay ( DELAY_MS) então é de nosso interesse sair rápidamente desse loop para continuar os testes, então... inicialente criamos
um break:
**gpsim> break r T1
A variável 'r' após break quer dizer "pare quando for feita uma leitura no registro T1"
podemos agora digitar 'run' . mas antes digite somente break e verá os dados do comando de
parada que você acabou de criar.
**gpsim> break
Agora sim digitamos 'run' , em sempre que o registro T1 for lido é feito o break, mesmo assim
ainda vai demorar muito para sair do loop, então vamos antecipar o fim .... usando os artifícios
do comando de leitura dos registros 'symbol'
**gpsim> symbol T1
E será mostrado o endereço do registro e seu valor, sabendo que quando T1 for zero o loop termina então podemos alterar seu valor
**gpsim> T1=0x01
Fazendo isso quando o simulador run chegar a T1 ocorre o break e T1 no próximo passo 'step' é decrementado chegando a '0' e o loop termina.
Henry