collapse

* Posts Recentes

Rede de comboios elétricos totalmente autónomos 10 ton em Rust em realtime. por blabla
[18 de Setembro de 2022, 18:44]


NiMH por 18650 por almamater
[18 de Setembro de 2022, 17:21]


How We Get Down to 0.2nm CPUs and GPUs - TechTechPotato por blabla
[18 de Setembro de 2022, 15:38]


Nova secção de Raspberry Pi Bare Metal em C e em Rust e Systems Programming por blabla
[04 de Setembro de 2022, 08:55]


The code for AGI will be simple - John Carmack and Lex Fridman por blabla
[29 de Agosto de 2022, 07:36]


Wavelets: a mathematical microscope por blabla
[28 de Agosto de 2022, 20:50]


Bom livro - Dive Into Systems por blabla
[28 de Agosto de 2022, 12:19]


graus negativos inclinação por josecarlos
[28 de Agosto de 2022, 11:31]


Super obsolescência super programada? por SerraCabo
[06 de Agosto de 2022, 11:36]


Motor de aspirador por dropes
[02 de Agosto de 2022, 22:18]

Autor Tópico: APERTURE Laboratories  (Lida 590 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.105
APERTURE Laboratories
« em: 23 de Dezembro de 2021, 20:54 »




Video brevemente  ::)

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.364
    • Tiago Rodrigues
Re: APERTURE Laboratories
« Responder #1 em: 23 de Dezembro de 2021, 23:27 »
 :D

Um dos meus jogos favoritos, quero ver que andaste a fazer.

Offline blabla

  • Mini Robot
  • *
  • Mensagens: 245
Re: APERTURE Laboratories
« Responder #2 em: 24 de Dezembro de 2021, 11:30 »
@dropes também aguardo pelo vídeo com muito interesse!

Cumprimentos e votos de um feliz Natal para todos,
João

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.105
Re: APERTURE Laboratories
« Responder #3 em: 24 de Dezembro de 2021, 18:12 »
Adorei os jogos do Portal, puzzles originais, uma história cativante e sempre com o seu sentido de humor.

Como sempre ando á "luta" com a gravação de filmes em LCDs... a luz tem de ser moderada e a máquina passa para modo noturno, 10fps não chega para as animações.

Ei de lá chegar, sou persistente e só demorei 5 meses a criar isto  :)



Boas festas para todos e um feliz Natal ;D

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.364
    • Tiago Rodrigues
Re: APERTURE Laboratories
« Responder #4 em: 24 de Dezembro de 2021, 19:18 »
De certeza que tudo o que tens aprendido nesse processo dava para um livro ou um filme, pelo que se vieres a detalhar mais sobre esse assunto, não te esqueças de partilhar.

Adoro o Portal, a forma como no fim do jogo já pensamos com mecânicas do jogo como se elas fizessem parte do nosso mundo, é claro o humor que acaba nessa música mítica.

Boas festas a todos!

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.105
Re: APERTURE Laboratories
« Responder #5 em: 25 de Dezembro de 2021, 17:25 »


Mais tarde publico as fontes, código, esquema, etc...
« Última modificação: 25 de Dezembro de 2021, 17:27 por dropes »

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.105
Re: APERTURE Laboratories
« Responder #6 em: 27 de Dezembro de 2021, 18:17 »


Lado esquerdo Attiny85, suporte ISP funcional.
Lado direito Display com reset temporizado (apr. 0,5ms), linha SDA bidirecional, condensador de 330pF ao gnd na linha SCK, para eliminar interferências parasitas quando da leitura da memória interna do display (GRAM).
Também lado direito a memória flash 2MB, CS temporizado (apr. 500ms).
A leitura da memória é efetuada quando CS está low, infelizmente toda a vez que se vai ler um byte desta memória, tem de se executar a operação de leitura, seguidamente do endereço e só depois se consegue obter o byte pretendido. Para colmatar o abandono da leitura e atraso significativo (comunicação partilhada com o display), a memória fica activa permanentemente, entretanto separada através de resistências para evitar conflitos.
A entrada de SCK na memória é bloqueada sempre que a linha CS fica LOW (modo display), através de um díodo simples (experimentei um schottky sem sucesso).

Etapa amplificadora de audio:


A frequência PWM é alta (+-800kHZ) e na filtragem basta um simples filtro passa baixo, neste caso por volta de 1kHZ. No amplificador escolhi um IC de baixo ruído extraído de um leitor de CDs para fones. A configuração paralela providencia uma saída de menor impedância, neste caso 8ohms, embora o volume também seja baixo.
O ganho é unitário.
 


Antes de programar o micro, os fuses devem ser implementados para possibilitar o modo PLL no código, neste caso:
Low=F1 High=DF Ext=FF
https://www.engbedded.com/fusecalc/
Na configuração, o sinal PLL é obtido multiplicando por 8 o oscilador interno de 8MHz, resultando em 64MHz; este pode ser usado como clock de sistema após dividido por 4.
Bascom:
'Enable the PLL
 Pllcsr.plle = 1
'Wait for the PLL to lock
While Pllcsr.plock = 0
Wend
'Enable the 64MHz clock  /4=16MHz
Pllcsr.pcke = 1


A calibração do clock interno (8MHz) também é fundamental para se atingir os pretendidos 24MHz,
   


Segundo a ficha técnica desta calibração (OSCCAL register), não deve ser alterar acima de 10% o seu valor. No meu caso calibrei 1º para obter 16MHz certos, valor que me deu Osccal=98, para chegar aos 24MHz o valor foi de Oscall=212.
Ldi R24 , 212      '24MHZ
Out Osccal , R24


Embora tenha calibrado para 50%, ainda não verifiquei qualquer falha no seu funcionamento, procurei no entanto o seu limite, e a partir de 223 bloqueia (sem avariar).

Configuração TIMER0 para 11.025Hz:
Config Timer0 = Timer , Prescale = 8 , Clear Timer = 1
Enable Ovf0


O contador segundo esta configuração, dá 11719, entretanto existe algum atraso devido a outros procedimentos e o resultado é aproximado.

Tive dificuldades de obter o sinal PWB em PB4 (OC1B), as informações pela net foram infrutíferas, até que tentei a configuração pelo “Codevision AVR Wizard”:

'----------------------------TIMER 1 PWM
'TCCR1 – Timer/Counter1 Control Register
'CTC1 PWM1A COM1A1 COM1A0 CS13 CS12 CS11 CS10
    Tccr1 = &H1
'GTCCR – General Timer/Counter1 Control Register
'TSM PWM1B COM1B1 COM1B0 FOC1B FOC1A PSR1 PSR0
'    0      1           1             0            0         0       0       0
    Gtccr = &B01100000
'TCNT1 – Timer/Counter1
    Tcnt1 = &H00
    Ocr1a = &H00
    Ocr1b = &H80 ‘Mid
    Ocr1c = &HFF
    Config Portb.4 = Output


O sinal PWM é modelado alterando o registo Ocr1b:
Ocr1b = Value

- Water Ripple -

Não estava previsto, mas resolvi implementar nos 15% de memória ainda disponíveis.
Conheço bem o algoritmo para gerar o efeito fogo no PC, mas este parecia-me mais adequado, com áudio via pwm, nº aleatório.

https://web.archive.org/web/20160418004149/http://freespace.virgin.net/hugo.elias/graphics/x_water.htm
https://thecodingtrain.com/CodingChallenges/102-2d-water-ripple.html

O 2 problemas quando se quer apresentar algum efeito gráfico, são a falta de memória e a velocidade.
O 1º consegui ultrapassar usando a própria memória do display para enviar e receber; configurei em modo de 18bits e todas as informações foram trabalhadas em formato 6 bits x 3canais rgb, difícil mas não impossível.
A velocidade deixou de ser problema quando se faz o processamento em série, ou melhor, cada pixel é calculado de forma igual, independentemente do valor dele.

Outro truque foi de partilhar o local das variáveis, para o efeito “Water dripple” uso 4 arrays de 64bytes, esse espaço é partilhado com variáveis do “Still Alive” através do procedimento “Overlay”, usa exactamente o mesmo endereço mas com nomes diferentes.

.Sei que Bascom não é uma ferramenta de programação muito adoptada, preferem C ou algo parecido; desde miúdo que programo, comecei com QBasic depois Pascal e sempre de olho em C. Não sei porquê mas sempre tive dificuldades em entender C, falha minha, e até assembler me parecia mais confortável de entender… acredito que não depende da linguagem mas sim da forma que se escreve e se entende,  para gerar um código limpo.

A biblioteca de controle do display for completamente alterada, SPI em hardware na maior parte das funções.
A união de Som, Imagem e Texto foi possível via VB6, o sincronismo no seu melhor.