Dúvidas iniciais com AVR !!!

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Mensagempor msamsoniuk » 30 Jan 2010 14:14

a frequencia de 20MHz para o core esta no HCS08RMv1/D de 2003 e refere-se ao GB60. se vc olhar na pagina do componente:

http://www.freescale.com/webapp/sps/sit ... B&tid=m8Hp

como vc pode ver, o bus clock eh de 20MHz a partir de um clock de referencia de 40MHz, tal qual eu indiquei.

agora se liga nesse aqui entao:

http://www.freescale.com/webapp/sps/sit ... M&tid=m8Hp

aqui vc tem um clock de referencia de 48MHz para gerar um clock do core a 24MHz, portanto o tempo seria de 208ns para MUL e 291ns para DIV! :)

se vc olhar o tempo de execucao das instrucoes vai encontrar varias que operam apenas em registros e requerem 1 clock. o fato de varias instrucoes requerem varios clocks refere-se ao fato do HCS08 nao ser arquitetura de harvard e portanto serializar os acessos. a diferenca eh nitida:

INCA e INCX consomem 1 clock, mas INC de memoria para memoria consome 5 clocks, pq a carga da propria instrucao consome 3 clocks (1 byte do operando + 2 bytes do ponteiro 16 bits), enquanto a carga, incremento e armazenamento consomem mais 2, resultado do HCS08 nao possuir arquitetura de harvard e nao ser uma arquitetura tipo load/store.

agora, eu nao conheco o AVR e nao sei dizer se ele precisa sempre carregar as coisas em registros (gastando instrucoes load/store extras) ou se ele pode fazer tudo diretamente na memoria tambem. se vc tem um pino de GPIO, seria chato ter q manipular ele em um registros, pois certamente iria demorar mais!

existe tambem a questao do enderecamento, que vao gerar tempos diferentes:

inerente, 8 ou 16 bits imediado, 8 bits direto, 16 bits extendido, 16 bits indexado, 16 bits indexado com pos-incremento, 16 bits indexado com offset, 16 bits indexado com offset e pos-incremento, 16 bits indexado com offset de 16 bits, offset relativo de 8 bits, stack pointer com offset 8 bits e stack pointer com offset 16 bits.

com isso, um ADD entre acumulador e memoria vai variar de 2 a 5 clocks, conforme o modo de enderecamento utilizado.

nao conheco os modos de enderecamento disponiveis no AVR, mas obviamente vc vai consumir ciclos de clock de acordo com o tipo de modo de enderecamento utilizado, nao tem milagres e a muito tempo os 68k mostraram-se melhores que muitos outros processadores quando aboliram as instrucoes INC em favor de integrar modos de enderecamento avancados com pos-incremento e pre-decremento. no lugar de um par MOV/INC, vc tem um MOVE que faz tudo com menos ciclos.

por exemplo, um strcpy() no 68k (um 680x0 qualquer com hw otimizado) seria:

loop:
move %a0@+,%a1@+; // equivale a (*p++=*q++)
bnz loop; // se nao passar um '\0', ele fica no loop

se vc imaginar que "nao existem milagres", a instrucao move de memoria para memoria vai consumir pelo menos 3 clocks. supondo que ele nao incrementa os ponteiros ao mesmo tempo, vc tem mais 2 clocks. mas nisso vc jah fez praticamente tudo, gastando mais 1 clock para o branch e totalizando 6 clocks. e se ele conseguir incrementar os dois ponteiros ao mesmo tempo, vc fecha com 5 clocks.

jah num processador RISC tradicional hipotetico:

loop:
ld %r0@,%r2; // tmp = *q
sto %r2,%r1@; // *p = tmp
inc %r0; // p++
inc %r1; // q++
tst %r2; // testa tmp
bnz loop; // senao passar um '\0', ele fica no loop

vc certamente vai gastar 2 clocks para ld e 2 para sto, mais um par para os incs, 1 para o tst e 1 para o branch, totalizando 8 clocks.

chutando para ambos um clock de 50MHz, vc teria no 68k CISC uma performance de 33MB/s contra 25MB/s para o outro processador RISC hipotetico orientado a load/store.

em contrapartida, o impacto da implementacao CISC do 68k reflete em um chip com area maior e portanto mais caro que seu concorrente RISC. microcodigo e conjunto de instrucoes RISC obviamente nao sao equivalentes, pq instrucoes de microcodigo podem ter largura realmente muito grande, portanto com funcionalidade cavalarmente maior que instrucoes RISC mais compactas (daih o reflexo em area no chip).

mas eh soh uma dica mesmo... eu acho o HCS08 interessante, particularmente acho perda de tempo usar um processador 8 bits hoje em dia quando vc pode usar um processador de 32 bits pelo menos preco! :)

RobL escreveu:
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:
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor RobL » 30 Jan 2010 18:30

Nos AVRs os pinos GPIOs podem ser setados diretamente com 1 clock.
Até 64 registros de I/O podem ser trabalhados diretamente "bitados".
A estratégia nos AVRs diferem dos demais, devido aos seus 32 registros ligados diretamente a ALU.
Portanto tudo que será operado deve estar nesses registros. Um ADD, neste caso leva 1 clock (um ciclo). O load/storage só será feito a partir de um resultado que não será mais operado.
O load/storage é sim um problema mas aí entra o assessoramento de um compilador para que o cara não fique "marcando passo" em vez de andar.
Por isso digo, os AVRs são mais preparados para uso de uma linguagem de alto nível. Não que não se possa ter excelentes resultados em assembly, mas sim maior atenção, para se tirar o proveito dos 32 registros works, pois o programador tem que olhar para frente, do ponto em que está, para saber quem sobe para sram e quem desce.

Há aplicações na qual 32 bits pode até atrapalhar e ficar até mais lento (depende do chip. considerando mesma f no bus) que em 8 bits, quando estas operações e transferência de dados, são predominantemente em 8 bits e eventualmente em 16bits, visto que, no caso de um XMEGA há tudo de bom(acesso direto a memo, etc) que se tem em um de 32 bits.
Não interpretar que estou dizendo que não se deve usar micro 32 bits. Sendo necessariamente contraditório, aconselho, até para piscar um led, usar 32 bits. Eu estou evitando fazer isto, com 32 bits!!! :wink:
Mas, não recomendo fazer um relógio de pulso com 32 bits, a não ser que carregue uma bateria nas costas, sim numa mochila!!!
O que brincadeira??? O que dizer dos relógios de pulso binários????
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Andre_Cruz » 02 Fev 2010 07:59

Agradeço a todos pelas respostas e esclarecimentos, estava concluindo um projeto e esse ficou em standy by por uns dias rsrsrss.

Alguém pode me indicar um AVR de 18 pinos e encapsulamento DIP, que suporte rodar a 40Mhz ou mais ?

Agradeço a todos.

Abraço

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

Mensagempor RobL » 02 Fev 2010 08:38

DIP não tem.
DIP só até 20MHz.
AVR para pouca quantidade só a linha ATmega 48,88,168,8A,328, 16,32 e outros não se encontra fácil em pequenas quantidades.
Acima de 400 peças encontra qualquer um aqui no BR (pode levar até 3 meses).

DIP penso que só Microchip.

No seu caso eu tentaria um NXP 32 bits LPC12xx, 13xx ou 14xx(usb device) ou um mais fácil de adquirir. Acho que roda até 72MHz e certamente seu algorítmo em 32 bits vai ficar muito rápido. O preço é menor que um PIC.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Re: Dúvidas iniciais com AVR !!!

Mensagempor Jairo15 » 13 Jun 2013 16:29

Pessoal,

Estou querendo ligar o MT8889, transceiver DTMF no ATMEGA64 ...

Minha dúvida é a seguinte:

Ligando o barramento de D0,D1,D2 e D3 do MT8889 diretamente na porta A do ATMEGA, como faço para ler e escrever na mesma porta?

Quando escrever um dado devo colocar DDRA=0xFF e quando ler um dado na porta colocar DDRA=0x00? Preciso ficar alterando em todo acesso de leitura e escrita? Dá algum problema?

Alguém já teve experiência nesse sentido que poderia dar uma opinião?

Abraço
Jairo15
Nibble
 
Mensagens: 52
Registrado em: 06 Fev 2009 12:59

Re: Dúvidas iniciais com AVR !!!

Mensagempor tcpipchip » 13 Jun 2013 17:06

void LER(void)
{
DDRC = 0x00; //entrada
//LENDO port
}

void ESCREVER(void)
{
DDRC = 0xff; //saida portb
//ESCREVENDO port
}

vais ligar mais algo no mesmo databus ?
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Dúvidas iniciais com AVR !!!

Mensagempor Jairo15 » 14 Jun 2013 07:54

Obrigado Tcpipchip,

Foi o que tinha imaginado, só queria confirmar ...

No momento será só o MT8889 ligado, mas penso que depois de cada escrita devo voltar a porta para entrada de novo com DDRA=0xff .

Obrigado pela ajuda !
Jairo15
Nibble
 
Mensagens: 52
Registrado em: 06 Fev 2009 12:59

Re: Dúvidas iniciais com AVR !!!

Mensagempor tcpipchip » 14 Jun 2013 08:42

A proposito Eng Jairo...pq nao usa BASCOM para AVR ? O código gerado fica enxuto...
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Anterior

Voltar para AVR

Quem está online

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

cron

x