Exemplos de funçoes

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Exemplos de funçoes

Mensagempor Doth » 10 Abr 2007 14:33

Ola, estou começando a utilizar este mcu mas gostaria de ver alguns exemplos de codigos tipo configuração de serial, piscar led coisas assim.

Estarei utilizando o atmega162 por causa da segunda serial, e pelo oque eu li a respeito utilizarei o compilador winavr gravando com o ponyprog.

Se alguem quiser postar um exemplo de codigo de:
-Configuração e utilização da serial.
-Configuração e utilização de I2C.
-Qual quer outro codigo basico como piscar led ou coisa assim.

Desde ja obrigado.
//Ricardo Doth :D
Doth
Byte
 
Mensagens: 116
Registrado em: 12 Out 2006 17:35

Mensagempor tmarchesi2 » 10 Abr 2007 15:53

Boa tarde !

Eu tenho algumas rotinas bem simples que eu uso para testar meus protótipos, tenho algo como: serial232, ad .... pois estou procurando uma para testar o i2c entre 2 avr's. Só que tem um detalhe, eu uso o codevision como compilador, se interessar posso te enviar.

T+
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor Doth » 10 Abr 2007 16:21

Pois é, eu adoraria ver suas rotinas, se puder mandar por email ricardodoth@terra.com.br.

Eu gostaria de usar o codevision mas é pago e a versão gratuita não tem o Atmega162. :(

Estou querendo entender sobre os registradores desse modelo, mas ja vai ser um começo.

Estou começando a usar este Winavr ate agora não sei nem como se compila. :oops:

Estava tao feliz com meu at89s8252 por fui dizer pro meu chefe que tem um mcu mais barato com duas seriais. :(

Bom ainda bem que tem gente que entende. :D

Desde ja obrigado.
//Ricardo Doth
Doth
Byte
 
Mensagens: 116
Registrado em: 12 Out 2006 17:35

Mensagempor tmarchesi2 » 10 Abr 2007 22:47

Estou enviando os arquivos por e-mail, qualquer coisa me avise.

T+
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor Doth » 13 Abr 2007 23:30

Obrigado pelo email bem interesante, chegaram os atmega162, meu chefe ja tah na minha cola. vou trabalhar sabado e domingo nele. :P

Tipo ja tenho o codigo no at89s8252 e vou portar para o Atmega162, so quero socar mais uma serial pra conversar com um leitor e uma impressora pdv.

Mas não se acanhem quero ver mais codigos.
Doth
Byte
 
Mensagens: 116
Registrado em: 12 Out 2006 17:35

Mensagempor Doth » 16 Abr 2007 09:32

Bah pessoal não estou comprendendo muito esta historia de escrever e ler pinos.

Tipo se tenho um rele no pino1 do portD tenho que
DDRD |=0x01 //avisar que PD0 é saida

PORTD |=(1<<0) //setar o pino PD0 para 1

PORTD &= ~(1 << 0);//agora desligar o pino <--estranho neh :D

Agora para ler um pino como eu faço? tipo eu sei que tem configurar o DDRx mas tipo oque for zero é entrada? tipo:

DDRD |=00000001 // todas entradas menos PD_1?

ler uma destas entradas seira:

#define pinoD2 PIND && 02

if (pinoD2){} //

Estou usando o avr studio compilador gcc.

Desde ja obrigado
//Ricardo Doth
Editado pela última vez por Doth em 16 Abr 2007 17:47, em um total de 1 vez.
Doth
Byte
 
Mensagens: 116
Registrado em: 12 Out 2006 17:35

Mensagempor owerdrive » 16 Abr 2007 13:13

tem como enviar pra mim também? Meu email é owerdrive@yahoo.com.br
owerdrive
 
Mensagens: 2
Registrado em: 20 Dez 2006 13:53

Mensagempor tmarchesi2 » 16 Abr 2007 13:18

Entra neste link:

http://www.hpinfotech.ro/html/cvavr_doc.htm

Aqui você encontra um tutorial muito interessante em C para AVR, tem um exemplo de ler uma entrada com If.
Detalhe, este site é de um compilador comercial. Mas o que importa é lógica do negócio vale a pena dar uma estudada.

A rotina ali ficaria algo do tipo:

if (PORTD.2 == 0)
{
}

T+
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor Fábio Pereira » 16 Abr 2007 13:36

Olá Ricardo,

Acho que você está equivocado sobre alguns detalhes de C:

Quando você escreve: REGISTRADOR |= 0x01;

Você está apenas setando o bit 0 do registrador, os demais bits não serão alterados.

Para alterar todos os bits você deve escrever:

REGISTRADOR = 0x01;

Aí sim, todos os bits, com exceção do bit 0 serão apagados.

Outra coisa: a operação REGISTRADOR |= (1<<1);

Está setando o bit 1 e não o bit 0 ...

Até +
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor RobL » 16 Abr 2007 18:55

Veja bem os AVR tem 3 registros para cada porta (2 nos pics).
Conforme você verificou:
Estando a porta com saída, escrevendo 1L no registro PORTx aparecerá 1L na saida, se escrever 0L aparecerá 0L na saída.

Para ler a porta, é feito em outro registro o PINx (diferente dos PICs).

Nota importante:
O PINx é somente leitura. No entanto você poderá encontrar em algum código alguém escrevendo 1L em um pino de PINx. Isto trocará o estado do Pino e mudará o valor deste pino no registro PORTx e vai modificar (desligar) o Pullup desse pino (dependende de outros registros).
Este é mais um dos casos, comum nos AVRs, no qual escrever 1L em determinado bit de um registro muda o estado desse bit e outros que é feito para simplificar operações e em outros casos por segurança.

Outro detalhe interessante é que o registro PINx poderá ser lido independente do registro DDRx (porta como entrada ou saída). Isto pode não parecer mas tem muita utilidade. Alguém poderá perguntar. Por que vou ler o pino se acabo de colocar 1L na saída? Por exemplo, testar se o sinal de saída já subiu de fato, devido a carga capacitiva neste pino, para decidir o fluxo do programa, dentre outros.

Observar que é recomendável um NOP na mudança de direção mas por razões bem diferentes das usadas em um PIC. Nos AVRs, em tese, a leitura do PINx não é afetada pela RMW.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor eletroinf » 16 Abr 2007 20:04

Neste site tem um balaio de coisas sobre AVR:
http://hubbard.engr.scu.edu/avr/avrlib/ ... files.html
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

...

Mensagempor wil » 24 Abr 2007 20:29

Ricardo,

Vá para o site da Atmel, e procure pelos Application Notes para os Mcu´s de 8 bits.

Tem o I2C que você quer. Eu já usei e funciona certinho. Eu me refiro a versão em Assembly que usei. Tem outros códigos em C também para outras funções do Mcu´s, questão de dar uma olhada.

Até!
Wil
wil
Nibble
 
Mensagens: 55
Registrado em: 14 Out 2006 18:31

Mensagempor Doth » 29 Abr 2007 10:37

Mas qual o jeito mais facil para setar um pino do mcu para 1 ou 0?

Tipo so fazer ligar um led coisas do tipo.

Desde ja obrigado
//Ricardo Doth
Doth
Byte
 
Mensagens: 116
Registrado em: 12 Out 2006 17:35

Mensagempor Maurício » 29 Abr 2007 20:09

Primeiro, vc precisa configurar a porta como saída. Isso vc faz no registrador DDRx.
Nível 1 nos bits desse registrador, pino correspondente igual a saída.
Experimenta isto aqui. Roda no CodeVision.


Código: Selecionar todos
#include <mega16.h>
#include <delay.h>

#define PINO_SAIDA     PORTA.0      // PA0 nos pinos do integrado.

void inicializa_PORT ( void )
{
   DDRA |= 0x01;         // PA0 como saída;
   PINO_SAIDA = 0;      // PA0 com nível de saída zero;
}

void main ( void )
{
   inicializa_PORT ( );
   PINO_SAIDA = 1;         // acende/apaga o LED com 1
   delay_ms ( 1000 );      // espera 1 segundo
   PINO_SAIDA = 0;         // acende/apaga o LED com 0
   delay_ms ( 1000 );      // espera 1 segundo
   while (1);
}


[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP


Voltar para AVR

Quem está online

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

x