collapse

* Posts Recentes

Meu novo robô por josecarlos
[Hoje às 18:54]


No meio desta crise de MCUs e dev-boards quais as dev-boards que estão a usar? por jm_araujo
[Ontem às 23:54]


Dimmer PWM para controlo de resistencia eletrica 2500W por blabla
[26 de Janeiro de 2022, 21:28]


STM32 BluePill in Rust - Project template por blabla
[25 de Janeiro de 2022, 09:45]


Pequenos guias com informação sobre programação e eletrónica. por blabla
[23 de Janeiro de 2022, 21:28]


GPS Disciplined Oscillator por SerraCabo
[23 de Janeiro de 2022, 00:44]


Fita de LEDs RGB por blabla
[18 de Janeiro de 2022, 13:47]


KGM Edgelit Displays por SerraCabo
[18 de Janeiro de 2022, 10:25]


Saiu Kicad 6.0.1 por SerraCabo
[17 de Janeiro de 2022, 16:47]


Keyboard - A promessa de se atingir 500+WPM - Words Per Minute por blabla
[16 de Janeiro de 2022, 14:00]

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

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

Online dropes

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




Video brevemente  ::)

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.355
    • 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: 101
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

Online dropes

  • Mini Robot
  • *
  • Mensagens: 2.050
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.355
    • 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!

Online dropes

  • Mini Robot
  • *
  • Mensagens: 2.050
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 »

Online dropes

  • Mini Robot
  • *
  • Mensagens: 2.050
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.