collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Focador eléctrico para telescópio ETX70  (Lida 7761 vezes)

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

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Focador eléctrico para telescópio ETX70
« em: 04 de Março de 2015, 13:32 »
Bom, como esta secção está tão pobrezinha e Assembly (quero já aqui desfazer um equivoco comum: "Assembler" é o nome do programa que assembla, "Assembly" é o nome da "linguagem) até tem um lugar especial no meu coração de developer, publicito aqui um projecto que já tem uns anos: um focador eléctrico para ETX70. Um ETX70 é um pequeno telescópio altazimutal motorizado da marca Meade. O telescópio é pequeno e na altura não tinha conhecimento de nenhum focador que fosse pequeno o suficiente para caber no telescópio.



O projecto completo consiste numa parte mecânica, electrónica de controle e respectivo software. Foi o 1º programa que fiz para AVR, e foi todo feito em Assembly, até porque o AT90S1200 (datasheet aqui), que se não estou em erro foi o 1º AVR, nem RAM tem (só tem os 32 registos do CPU). Ainda assim, e nos seus limitados 1K de flash (512 instruções), deu para fazer muita coisa (e acho que ainda sobraram alguns bytes :D). O focador tem botões que controlam a focagem (um motor de passo de drive de disquetes) com rampa de aceleração (facilmente podemos dar apenas 1 passo como acelerar ao máximo), tem 4 memórias com SAVE/GOTO e ainda pode ser controlado por porta série.

As páginas do projecto têm toda a informação, desde o documento de requisitos até ao Manual de Utilizador:
http://nsj.no.sapo.pt/astro/focador_electrico_ETX70.html
http://nsj.no.sapo.pt/astro/foc_tentativa3.html

Quem quiser apenas ir directo dar uma olhada no aspecto do programa, o código está aqui:
http://nsj.no.sapo.pt/astro/extras/etxef_code.zip

Acho que foi o único programa todo em Assembly que fiz para um AVR, o core tem muita performance.

Enjoy :)
« Última modificação: 04 de Março de 2015, 13:45 por Njay »

Online jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: Focador eléctrico para telescópio ETX70
« Responder #1 em: 04 de Março de 2015, 14:58 »
Muito engenhosa a solução, parabéns!!!

Se não estou errado foi esse AVR que era usado nas caixas descodificadoras da TVTel (e talvez outros operadores?), enquanto a codificação era analógica, ainda tenho uma algures em casa. Foi o primeiro micro-controlador com poder de processamento suficiente (1 instrução por ciclo), e até aparecer, reprogramável e com EEPROM/FLASH só PICs (16C84) (pelo menos a preços decentes e compradas à unidade).

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Focador eléctrico para telescópio ETX70
« Responder #2 em: 04 de Março de 2015, 15:59 »
A impressora 3d da altura

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.189
Re: Focador eléctrico para telescópio ETX70
« Responder #3 em: 04 de Março de 2015, 20:42 »
Muito bom, além de quereres fazer uma guilhotina também já programaste em assemby.  ??? ;D

Também adquiri na dimofel o AT90S1200, entretanto fiquei-me pelo AT89C2051, este já tem 128B de RAM, muito útil  :P
As grandes desvantagens são a programação em paralelo e a linguagem 8051 não ser muito prática além dos famosos 12 ciclos no mínimo por instrução.

Acredito que o AVR tem muito para dar se for programado em assembly, e mesmo o AT90S1200 põe o arduino a um canto em termos de performance ou capacidade de instruções.

@metRo_ LOL, o que é isso, ou melhor, o que tem a ver com assembly?
« Última modificação: 04 de Março de 2015, 20:45 por dropes »

StarRider

  • Visitante
Re: Focador eléctrico para telescópio ETX70
« Responder #4 em: 04 de Março de 2015, 21:41 »
... mesmo o AT90S1200 põe o arduino a um canto em termos de performance ou capacidade de instruções.

Essa afirmação não faz qual sentido, nem quem qualquer lógica, e mete o dedo na ferida: o pessoal realmente
não sabe o que é um "arduino".

Arduino não tem nem "capacidade" e muito menos "instruções" que se possa comparar com o equivalente num
MCU como queres dar a entender. Não se pode comparar um MCU (AT90S1200) com um um IDE e firmware
(na forma de libs) que é o que define a designação "arduino".

O firmware gerado por um "Arduino" tanto pode correr num AT90S1200  como num  ATMEGA328 ... ambos
estes MCUs tem o mesmo core AVR RISC. Logo, qualquer código gerado pelo IDE (e compliador) que o arduino
usa será SEMPRE mais lento num AT90S1200 do que num ATmega328  (arduino uno por exemplo) uma vez que
o ATmega328 poder ter um clock de 16Mhz e o AT90S1200  está limitado a 12Mhz.

Alem de que o ATmega328  (que equipa o mais basico das boards "arduinos") tem 131 instruções, contra
apenas 89 do AT90S1200 ... e em termos de performance um ATmega328  é capas de debitar 20Mips
conta apenas 12 MIPS do AT90S1200.

Abraços,
PA



Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.189
Re: Focador eléctrico para telescópio ETX70
« Responder #5 em: 04 de Março de 2015, 22:10 »
Creio que não usei os termos correctos...

Se formos comparar dois micros AVR conseguimos ver as diferenças entre eles, memórias, velocidade, I/O etc... pois não era isso que estava em causa, apenas a performance baseado nas diferentes linguagens de programação, C VS Assemby.
Usei o arduino como exemplo mas podia ser outro qualquer, o C corre rotinas de assemby pré-definidas, enquanto se for programado directamente em assembly, conseguimos adaptar melhor o código para o propósito (pode variar com a complexidade do pretendido).

Referi capacidade como uma listagem de funções que pretendemos executar, por mais que se otimize um código escrito em C, não ficará perto de um em assembly.

Daí a discrepância em querer comparar um produto com uma linguagem usando um MCU idêntico, isso concordo que não tem qualquer sentido.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Focador eléctrico para telescópio ETX70
« Responder #6 em: 04 de Março de 2015, 23:11 »
Não é bem assim, hoje em dia os compiladores são muito bons e optimizados. O assembly é melhor se precisares de saber o tempo que vai demorar a executar X instrução ou quiseres ter algum controlo sobre isso.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Focador eléctrico para telescópio ETX70
« Responder #7 em: 05 de Março de 2015, 00:09 »
O arduino não suporta o AT90S1200. O clock máximo do ATmega328P são 20MHz (daí os 20MIPS).
Não conheço em detalhe a diferença do instruction set entre o 90S1200 e o 328, mas a instrução que deve fazer mais "mossa" deve ser a de multiplicação (de cabeça não me lembro se tb há a de divisão), que há na série "mega" mas não nas outras séries mais pequenas (como a velha "90S" e a "tiny"). Nos chips que não a têm o GCC gera código para fazer a operação, mas claro que a performance (e o espaço ocupado) é bastante afectada se quiserem multiplicação genérica*.

Consegue-se fazer muito bom código em C com o GCC, especialmente se lhe dermos uma ajudinha. Quando preciso de optimizar (por performance ou espaço), ponho o GCC a deixar um ficheiro intermédio que tem o C todo convertido para assembly, com as correspondentes linhas de C em comentário. Aí uso-o para "orientar" o GCC (fazer algumas alterações no código C) no sentido de optimizar mais agressivamente. Isto permite fazer código bastante bom, tenho 1 ou 2 projectos que fazem um monte de coisas também em 1KB de flash e são 99% C.


*Por falar em multiplicação, já quase toda a gente sabe que multiplicar por uma potência de 2 se pode fazer com shifts. Mas também há formas relativamente rápidas de multiplicar por outros valores (para CPUs que não têm instrução de multiplicação); por exemplo multiplicar por 5 é somar 2 multiplicaçõpes por 2 mais o multiplicando, por 7 é multiplicar por 8 e subtrair o multiplicando, etc.
« Última modificação: 05 de Março de 2015, 00:22 por Njay »

StarRider

  • Visitante
Re: Focador eléctrico para telescópio ETX70
« Responder #8 em: 05 de Março de 2015, 00:26 »
Creio que não usei os termos correctos...

Se formos comparar dois micros AVR conseguimos ver as diferenças entre eles, memórias, velocidade, I/O etc... pois não era isso que estava em causa, apenas a performance baseado nas diferentes linguagens de programação, C VS Assemby.
Usei o arduino como exemplo mas podia ser outro qualquer, o C corre rotinas de assemby pré-definidas, enquanto se for programado directamente em assembly, conseguimos adaptar melhor o código para o propósito (pode variar com a complexidade do pretendido).

Referi capacidade como uma listagem de funções que pretendemos executar, por mais que se otimize um código escrito em C, não ficará perto de um em assembly.

Daí a discrepância em querer comparar um produto com uma linguagem usando um MCU idêntico, isso concordo que não tem qualquer sentido.

Boas,

Se estas a falar na diferença de optimização dos compiladores então ai estamos de acordo.

De uma forma ou de outra, praticamente todos os compiladores de C/C++ para AVR (incluindo o GCC que
é o compilador que o arduino usa) geram "machine code" (ficheiros .OBJ) ... no mundo do AVR muitos
compiladores de C geram primeiro ASM que depois é compilado pelo assemblador da Atmel (avrasm2.exe).
No fundo tudo depende do compilador de C em si, as optimizações que este faz e no código que este gera,
e nesse campo existem grandes diferenças.

No caso do arduino a coisa então vai de mal a pior, pois muitos utilizadores usam libs feitas por terceiros,
por vezes feitas autenticamente a martelo por pessoas que ainda percebem menos de quem as está a usar,
e no fim fica uma mixórdia de tal forma que que quer em tamanho quer em desempenho fica uma autentica
bosta.

Voltando à vaca fria, programar em assembly é realmente um bom exercício, ensina mesmo muito, mas não
concordo que o código gerado a partir de um source em assembly tenha que ser mais compacto e mais rápido
do que um feito em C ... tudo depende do "artista" e do compilador, e existem compiladores de C que são
realmente muito bons e conseguem gerar ASM mais eficaz que muitos humanos conseguiriam.

Abraços,
PA

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Focador eléctrico para telescópio ETX70
« Responder #9 em: 23 de Março de 2015, 20:32 »
E então, alguma dúvida sobre o código ;) ?

Macros dão muito jeito para programar em Assembly e faço uso delas. Para lidar com a complexidade é preciso tentar ao máximo por um lado criar "rotinas inline" e por outro dar nomes às coisas, caso contrário só temos nomes de registos (R0, R1, Z, HL, AX, EDI, 0x23 etc etc conforme a arquitectura) e posições de memória (números, registos mais deslocamentos).
« Última modificação: 23 de Março de 2015, 20:38 por Njay »