Página 1 de 1

Duvidas com atmega168

MensagemEnviado: 16 Abr 2009 22:31
por cassiolws
Bom eu trabalho com PIC´s e estou começando com AVR´s. O uC que tenho em mãos eh o ATMEGA168 que eu chamo de MEGA168 (comecei com ele porque, eu iria começar com o 48, mas como nao consegui nenhum e consegui o 168 vi que é a mesma arquitetura e so muda o tamanho das memórias foi ele mesmo), então vai la:

Coloco aqui minhas perguntas e o que eu entendi e vcs forristas de plantão que puderem me ajudar vão dando as dicas!

a) Como funciona a frequência de trabalho?
Pelo que entendi ele nao tem divisor de frequência por exemplo se você colocar ele pra rodar a 20Mhz ele vai trabalhar a 20MIPs!

b) Ele possui oscilador interno? Se sim como ativo esse recurso?
Pelo que entendi sim, mas nao entendi como ativar.

Ah estou programando em C com o microC for Avr mas estou pensando em mudar para o Code Vision.

Abraço a todos!

MensagemEnviado: 17 Abr 2009 08:57
por Maia
Todas essas configurações são feitas nos fuses. Ele tem um divisor por 8 do clock e tem oscilador interno de 8 MHz. Para facilitar use essa página.

http://www.engbedded.com/fusecalc/

Abraços,
Maia

MensagemEnviado: 17 Abr 2009 13:42
por styg
a) nao tem divisor de frequencia, entao teoricamente 20MHz = 20MIPS
(teoricamente pq nem todas as instruções gastam apenas 1 ciclo)
b) possui de 8MHz, e ja vem ativado de fabrica com divisor por 8, resultando em 1MHz.
então é só alimentar e já podes gravar o código nele e começar a brincadeira.

compilador recomendo o avrstudio, e é grátis

MensagemEnviado: 18 Abr 2009 09:44
por RobL
Na família ATmega 48, 88, 168:
Se estivermos falando de oscilador, todas as fontes de clock (cristal, osc interno, externo, etc) tem sim divisor de frequencia por software. Divide por 1,2,4,8,16,32,64,128 e 256, inclusive pode ser modificada durante o processamento "runtime" (bits CLKPR do registro do prescaler).

O oscilador interno vem habilitado de fábrica. Gera 8Mhz mas vem configurado por default para resultar em 1Mhz (CKDIV8 ativo ajusta o prescaler para dividir por oito).
Poderá ser desabilitado através do fuse CKSEL por onde podemos selecionar os demais tipos de oscilador.

MensagemEnviado: 24 Abr 2009 02:27
por cassiolws
Opaaa conssegui entender essa parte inicial, ja conssegui fazer o 168 se comunicar com o mundo haha passei minha função de lcd para o codevision e tudo mais. Agora preciso entender como funciona os timers, ainda não tive tempo de olhar no datasheet, assim que eu olhar e as duvidas surgirem posto aqui...

No momento minha duvida eh sobre o Codevision.

Como faço para trabalhar bit a bit em uma variavel?

tentei dessa forma, como se faz com os registradoes.
ex.:

unsigned char EXEMPLO;

EXEMPLO.0 = 1; // bit zero da variavel exemplo setado.

e assim não funfo, haha sei que eh um problema simples mas eh que aqui num foi, tentei outras maneira mais num deu tb..
Comé que faz esse negócio em em???

fico no aguardo.. abraço a todos[/b]

MensagemEnviado: 24 Abr 2009 08:27
por Sergio38br
bom dia, declara tua variavel como bitfield (struct).. a sintaxe depende de compilador para compilador.

ex.:
Código: Selecionar todos
typedef struct
{
  unsigned char b0:1;
  unsigned char b1:1;
  unsigned char b2:1;
  unsigned char b3:1;
  unsigned char b4:1;
  unsigned char b5:1;
  unsigned char b6:1;
  unsigned char b7:1;
}variavel;

variavel.b0 = 1;
variavel.b1 = 0;



[ ]'s
Sergio

MensagemEnviado: 24 Abr 2009 08:36
por Maia
Pode fazer assim tb:

PORTC &= ~(1 << 5); // bit 5 da porta C = 0

PORTC |= (1 << 5); // bit 5 da porta C = 1

Abraço,
Maia

MensagemEnviado: 24 Abr 2009 14:54
por RobL
Com microcontrolador o uso direto de funções lógicas, para setar / resetar bits é imediato, super eficiente, sem uso de stack, e outros recursos, conforme o exemplo do Maia. Struct vai reservar variáveis e outras. Struct organiza melhor o fonte mas pode não ser interessante com um microcontrolador pequeno por exigir mais recursos.

MensagemEnviado: 29 Abr 2009 01:44
por cassiolws
Bom algumas dessas formas eu ja conhecia e outras havia imaginado, sei que existem n formas de se fazer isso, mas no caso minha pergunta seria especifica ao codevision se ele possui acesso direto a cada bit de uma variavel de 8 bits, pois ele possui acesso direto ao bits dos registradores, dai então surgiu a duvida, até agora não encontrei nada referente ao assunto, mas que eh estranho é, enfim vo me virando por aqui logo posto mais duvidas e pelo que vejo elas serão pertinentes a Timers =D

Obrigado a todos.

MensagemEnviado: 29 Abr 2009 08:07
por Sergio38br
Na verdade a maioria dos compilador tem acesso ao bitfield, que é definido geralmente no arquivo .h do componente que é utilizado , onde por meio de struct é possivel acessar os bits de cada registrador.

[ ]'s
Sergio

MensagemEnviado: 29 Abr 2009 12:45
por brasilma
Faço da forma como o Maia demonstrou, para quem estava acostumado com Assembly tbem achei muita coisa pra pouco, mas depois acabei me acostumando. :)

MensagemEnviado: 30 Abr 2009 18:20
por cassiolws
Pois é eu to achando mta coisa, pois tb programo Asembly e programo C para Pic , utilizo o MikroC e nele isso fica bem facíl de se fazer pois tem acesso ao bitfields... mas sem problemas vamos por bolean mesmo! e ver no que vai dar.