Dúvidas iniciais com AVR !!!

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Dúvidas iniciais com AVR !!!

Mensagempor Andre_Cruz » 25 Jan 2010 07:50

Olá a todos,

Frequento o forum diariamente nos tópicos relacionados a uC PIC.
Não é de hoje que eu tenho vontade de aprender outros uC, ja olhei alguns datasheets e continuo com dúvida.

1) Vi em uma documentação a Atmel que a divisão de 16 bits por 16 bits, leva 105 ciclos, gostaria de saber como calcula o tempo de cada ciclo, acredito que seja ciclo de maquina.

2) É dificil programar em ASM ??

3) Existe algum AVR com poucas I/O ??

Agradeço a todos que ajudarem.

Abraço

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Milhoci » 25 Jan 2010 11:26

1- Calcula-se o ciclo assim: ciclo = 1 / frequencia do clock

2- Não, eu acho o ASM do avr um dos mais fáceis.

3- Existem desde uC com 8 pinos até 144 dá uma olhadinha aqui ó http://www.atmel.com/dyn/products/param ... ection=ASC

Milhoci
Milhoci
Byte
 
Mensagens: 148
Registrado em: 12 Out 2006 18:46

Mensagempor Andre_Cruz » 25 Jan 2010 11:55

Milhoci,

Agradeço a resposta.

Quer dizer que se eu usar um AVR com a frequência de clock de 16 MHz.

Ciclo = 1/Frequência de Clock
Ciclo = 1/16MHz
Ciclo = 0,0000000625 S ou 62,5 nS

Esta correto ?

Os preços dos AVR's estão na faixa de quanto alguém pode me informar ?

Muito obrigado

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor _blackmore_ » 25 Jan 2010 12:18

Andre_Cruz

boa tarde!! :)
Eu não tenho conhecimento do AVR, mas um amigo meu de longa está se aventurando com estes bixinhos.
Segundo um colega de longa data, os AVR tem algumas vantagens e ele disse ainda que está muito tranquila a mudança de plataforma de PIC para AVR para ele.
Comentou que a gravação é simples, existem softwares livres para trabalhar os AVR, documentação é muito boa, programar em ASM é muito mais simples que PIC, me disse que a velocidade é 4x maior que a dos PIC, menor preço ... etc, etc ...

abrax!
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Milhoci » 25 Jan 2010 12:38

Bom pra programar avr é preciso de um programador que pode ser feito com resistores e uma porta paralela. Mas se você quiser algo melhor, ou seu PC não tiver porta paralela, tem um gravador da atmel que chama AVR DRAGON, tem aqui www.grupocn.com.br e custa 100 reais, o bixim é USB e tem as interfaces de programação por SPI, DebugWire, e JTAG.
Para programar eles você pode usar o AVR studio com o winavr, programando em C e o custo da plataforma é zero.
Atualmente os AVRs mais modernos tem debug (como o Atmega88) que tem na farnell. Quanto ao preço eu estou achando meio difícil achar eles no Brasil por um preço bom.
Agora, para os AVRs mais poderosos eu vi que não compensa, compensa muito mais pegar um ARM, acabam saindo o mesmo preço com um desempenho maior e com mais periféricos.


Milhoci



[link corrigido ]
Editado pela última vez por Milhoci em 25 Jan 2010 20:08, em um total de 1 vez.
Milhoci
Byte
 
Mensagens: 148
Registrado em: 12 Out 2006 18:46

Mensagempor Andre_Cruz » 25 Jan 2010 12:50

Milhoci,

O que eu preciso é:

Dividir 16Bits por 16Bits em menos de 10uS, o ideal seria 5uS, mas pra quem esta usando no PIC 206uS.
Se o meu cálculo do tempo de 1 ciclo estiver correto, 62,5 nS usando a rotina de divisão encontrada na documentação da Atmel, gasta 105 ciclos ou seja 6,5 uS, pra mim esta bom.

Trabalhando com o clock de 16MHz é possível gerar uma interupção a cada 1uS ?

Valeww

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Maia » 25 Jan 2010 14:22

Olá,
O site correto da CN é http://www.grupocn.com.br/ .
Alguns MCUs da Freescale têm instruções de divisão com muito menos clocks. Dá uma olhada.
Só pq o PIC divide o clock por 4 não quer dizer que os AVR são 4x + rápidos. Pelo que já li os PICs fazer operações com dados na memória e os AVRs têm que trazer tudo pros registradores internos primeiro.
Eu uso muito o ATMEGA168. Pino compatível com o MEGA8 mas vai até 20 MHz.
Abraços,
Maia
Avatar do usuário
Maia
Byte
 
Mensagens: 348
Registrado em: 15 Out 2006 16:25
Localização: Rio de Janeiro

Mensagempor RobL » 25 Jan 2010 15:01

Quando calcular o número de ciclos de um bloco de programa, fique atento para o número de ciclos de cada instrução utilizada. A maioria leva um ciclo mas outras 2 ciclos ou mais dependendo da instrução e do chip.
Os AVRs são mais preparados para usar os benefícios de uma linguagem de alto nível, ou melhor, o assessoramento de um compilador, devido à sua vantagem de 32 registros ligados à ALU. Essa "vantagem" poderá desaparecer se mal administrada em asm.
Conforme colocaram o asm do AVR é tão simples quanto o PIC.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Andre_Cruz » 25 Jan 2010 19:09

Maia,

Poderia me passar mais detalhes, do uC da freescaler ?

Preciso de interupção externa, timer pode ser de 8 bits mesmo, e 8 I/O.

Abraço a todos

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Maia » 25 Jan 2010 20:34

Eu só dei uma pesquisada no Google e vi uns com a instrução IDIV no assembly. Nunca usei eles. Dá uma perguntada na seção Freescale do fórum.
Abraço,
Maia
Avatar do usuário
Maia
Byte
 
Mensagens: 348
Registrado em: 15 Out 2006 16:25
Localização: Rio de Janeiro

Mensagempor RobL » 26 Jan 2010 08:41

Me interessei em dar uma olhada nesta instrução e ví que o MC68HC11 tem a instrução que o Maia informou "IDIV". É um chip interessante.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor msamsoniuk » 26 Jan 2010 09:33

o HC11 eh meio antigo! mas de qq forma, todos os processadores da freescale possuem MUL/DIV, incluindo os HC08 de 8 bits... eu sempre pensei que todo mundo sabia disso! hehehe :)

RobL escreveu:Me interessei em dar uma olhada nesta instrução e ví que o MC68HC11 tem a instrução que o Maia informou "IDIV". É um chip interessante.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor RobL » 29 Jan 2010 22:18

Continuo não sabendo visto que MUL leva 5 ciclos e DIV 7 ciclos. Se for como microcódigo tipo ASM51 que gera um monte de operações lógicas... , não vale.
Qurero saber se são hardware dedicados como nos AVRs(só tem multiplicador) que faz mul 8 x 8 resultado 16bits em 1 ciclo. Tem hardware de divisão, em um micro de 8 bits ??? Pode até ter, deve ser raro.
Conforme já escrevi, se for uma variável por uma constante 16 x 16 usando o recíproco (produto pelo inverso) com o multiplicador por hardware, dá para diminuir para a metade ou menos ainda o número de ciclos.

Por exemplo. Verifique se com essas instruções MUL ou IDIV, resolve o problema do moço.
Eu penso que só no AVR ou algum parrudo de 32bits. Se não me engano, agora tem chip AVR rodando em 32MHz (105 ciclos leva 3,28 us).
Um AVR fará a rotina que ele comentou com 105 cliclos a 20MHz em 5,25us.
Bota aí o seu Freescale para fazer 105 ciclos em 5,25us. Como disse, o chip é interessante e só.
Não esquecer, a 20Mhz tem uma certa estabilidade a ruído. A trocentos MHz PLL sei não.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor msamsoniuk » 30 Jan 2010 00:06

no caso dos HCS08, o clock tipico do core seria 20MHz, sendo que jah vi algumas variacoes operando a 24MHz e um extremo de 120MHz no caso do core licenciado para integrar em uma FPGA. entao no pior caso, operando com 20MHz, a operacao MUL de 5 clocks vai consumir apenas 250ns e a operacao DIV de 7 clocks vai consumir apenas 350ns.

mas note que, apesar de competirem com PICs, os cores HCS08 sao derivados de microprocessadores utilizados em computadores da decada de 70, portanto eh uma familia tipicamente CISC e com certeza usa microcodigo. mas apenas com operacoes logicas realmente nao tem como condensar tanto, entao imagino que usa um mix de hardware dedicado e microcodigo, portanto acho que nao tem como reproduzir essa performance em um mcu 8 bits apenas com instrucoes RISC simples.

o HCS08 nao eh uma maravilha em termos de recursos, mas comparado com o PIC ateh que vai bem: possui um acumulador A de 8 bits, um registro de indice HX de 16 bits (que pode operar como 2 registros H e X de 8 bits), um stack pointer SP de 16 bits e um program counter PC de 16 bits. o registro HX eh uma mao na roda pq permite uma serie de operacoes de 16 bits, incluindo soma e subtracao de 16 bits.

o fato de nao precisar de paginacao e poder colocar codigo e dados em qq lugar do espaco unificado de memoria de 64KB jah eh um avanco substancial em relacao as limitacoes da arquitetura de harvard do PIC e eliminam os problemas associados a paginacao. nas versoes maiores que vc tem 60KB de flash e 4KB de sram, vc pode enderecar tudo linearmente! :)

uma outra coisa q eu acho legal nele eh ter 32 vetores de interrupcao, ou seja, nao precisa ficar tratando nada na mao, quando ocorre uma interrupcao jah cai direto na funcao de tratamento correta e nao precisa ficar perdendo tempo tentando descobrir qual periferico esta em panico.

sei lah, eu sou contra esse negocio de ficar sofrendo atoa! :)

RobL escreveu:Continuo não sabendo visto que MUL leva 5 ciclos e DIV 7 ciclos. Se for como microcódigo tipo ASM51 que gera um monte de operações lógicas... , não vale.
Qurero saber se são hardware dedicados como nos AVRs(só tem multiplicador) que faz mul 8 x 8 resultado 16bits em 1 ciclo. Tem hardware de divisão, em um micro de 8 bits ??? Pode até ter, deve ser raro.
Conforme já escrevi, se for uma variável por uma constante 16 x 16 usando o recíproco (produto pelo inverso) com o multiplicador por hardware, dá para diminuir para a metade ou menos ainda o número de ciclos.

Por exemplo. Verifique se com essas instruções MUL ou IDIV, resolve o problema do moço.
Eu penso que só no AVR ou algum parrudo de 32bits. Se não me engano, agora tem chip AVR rodando em 32MHz (105 ciclos leva 3,28 us).
Um AVR fará a rotina que ele comentou com 105 cliclos a 20MHz em 5,25us.
Bota aí o seu Freescale para fazer 105 ciclos em 5,25us. Como disse, o chip é interessante e só.
Não esquecer, a 20Mhz tem uma certa estabilidade a ruído. A trocentos MHz PLL sei não.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor RobL » 30 Jan 2010 10:43

BSETn DIR 4 5
BCLRn DIR 4 5
CPHX DIR 4 5
NEG DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
COM DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ASL DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ASR DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
LSL DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
LSR DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ROL DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ROR DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
DEC DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
INC DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
TST DIR,IX,IX1,SP1 3,2,3,4 4,3,4,5
JSR DIR,EXT,IX 4,5,4 5,6,5
JMP DIR,EXT,IX 2,3,2 3,4,3
BSR REL 4 5
Div2 vs. Div4
On M68HC08 MCUs, the output of the primary clock source (whether it is an external crystal, PLL,
internal oscillator, etc.) is divided by four to create the system bus clock. To obtain an 8-MHz bus clock,
the oscillator must run at 32 MHz.
On the HCS08 MCUs, the clock source is divided by two instead of four. So to obtain the same 8-MHz
bus, only a 16-MHz oscillator is required.


Leitores, estamos falando do HCS08 e não de um AVR.
Acima, esses números seguidos 2,3,4,5,6, são número de ciclos dessas intruções (do HCS08). Obviamente os AVRs fazem isto com 1 ciclo no máximo 2, sem divisão de clock.

Refazendo suas "contas": 20MHz clock -> Bus = 10MHz DIV 7 ciclos = 700ns (e não 350ns). Aqui foi só uma distração do grande Marcelo Sam, pois o cara sempre sabe o que fala (só as vezes exagera mas vale).
Isto se usar uma só vez DIV para seu bloco de divisão, o que é pouco provável.
Observando que a maioria das insturções levam mais que 2 ciclos 3,4,5e6 ciclos, a linha HCS08 é boa para programar mas em velocidade, fica somente melhor que os 8051.
É preciso cuidado com o aumento de velocidade, na linha HCS08 em relação a M68HC (clock /4), pois nos HCS08, quase todas instruções tiveram no mínimo 1 ciclo a mais.
Olha esse negócio de propaganda enganosa :wink:
Fora a velocidade, os modelos Freescale são muito interessantes (mais uma vez).

Resumo: 8bits velocidade é com AVR.
Bateria : XMEGA bate qualquer 32bits em performance / consumo energia.
Pô, não vale comparar com PICs. :cry:
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Próximo

Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x