Ir ao conteúdo

Posts recomendados

Postado

Eae...

Estou precisando aprender a programar AVR em C.

Eu sei programar PIC's em C, e uso o CCS compiler para isso. Nele eu só preciso colocar o nome do PIC, frequencia, selecionar as portas que serão de saídas/entradas, LCD, etc...

Mas para os AVR eu não achei nenhum compilador prático que nem este...

Alguem ai tem algumas dicas para me dar? para programá-los em C.

O que muda na linguagem de uma para o outro?

Por exemplo...

No PIC quando me referio ao pino A0 eu escrevo PIN_A0 , como seria isso no AVR?

como eu configuro os pinos de i/o para os AVR?

Eu baxei o WINAVR que é o compilador de C para ele, mas não achei nada sobre isso, e também ja procurei na internet...

Se alguem puder me ajudar, agradeço!

obrigado.

Postado

Salve, Smarley2.

Eu uso o CodeVision. É praticamente, C ANSI.

http://www.hpinfotech.ro/

Eae...

Estou precisando aprender a programar AVR em C.

Eu sei programar PIC's em C, e uso o CCS compiler para isso. Nele eu só preciso colocar o nome do PIC, frequencia, selecionar as portas que serão de saídas/entradas, LCD, etc...

Mas para os AVR eu não achei nenhum compilador prático que nem este...

Alguem ai tem algumas dicas para me dar? para programá-los em C.

O que muda na linguagem de uma para o outro?

Não conheço PICs, mas, se tratando de C, pouca coisa.

Por exemplo...

No PIC quando me referio ao pino A0 eu escrevo PIN_A0 , como seria isso no AVR?

como eu configuro os pinos de i/o para os AVR?

Os AVRs não são descritos por pinos. Os AVRs tem portas de oito bits.

PORTA, PORTB, PORTC, PORTD, etc.

O pino zero de qualquer uma dessas portas, é referenciado assim:

PORTA.0 ==> ESCRITA; PINO ZERO DE PORTA

PIND.5 ==> LEITURA; PINO CINCO DE PORTD

O CodeVision, através do Wizard, configura a máquina inteira pra você. E no final, já gera o main com as configurações corretas da máquina. É um compilador bem profissional.

[]'s

Postado

hmm...

interessante, apesar de ser pago vou baxar este programa para conferir...

Nele, como eu faço por exemplo, para colocar tal saída em estado alto ou baixo?

No pic eu escreveria

output_high(PIN_A0);

output_low(PIN_A0);

obrigado pela ajuda!

Postado

Eu uso uma macro para o pino:

#define PINO_SAIDA    PORTA.0

void main ( void )
{
PINO_SAIDA = 1;
PINO_SAIDA = 0;
}

Mas, você pode criar suas próprias macros, inclusive, essa que você citou do PIC.

[]'s

Postado

hmm, agora eu estou entendendo melhor...

No PIC eu não precisava diferenciar a escrita(PORTX.x) da leitura(PINX.x), para ele é sempre a mesma nomenclatura(PIN_Xx)...

No caso dos teste então dever sem a mesma coisa, por exemplo...



#define PINO_LEITURA PINA.0
#define PINO_SAIDA PORTA.1

void main ( void )
{
if(PINO_LEITURA) // Caso PINO_LEITURA esteja em 1, ele entra...
{
delay_ms(1000);
PINO_SAIDA = 1;
}
PINO_SAIDA = 0;
}

Quais são as bibliotecas específicas que tem para eles?

Eu ja li sobre uma <avr/io.h>.

Quando eu programava em C com o CCS eu não precisava adicioná-las, ele fazia sozinha e não me mostrava ali quais eram...

Mas eu não lembro se ele adicionava a delay.h, eu não lembro se era delay_ms(x); ou _delay_ms(x); para dar o comando...

valeu pela ajuda!

Acabei de testar aqui com o AVRStudio 4, que é o compilador de C distribuido pela Atmel, e estes comandos de atribuição como o #define PORTA_SAIDA PINA.0 não funcionam... Ele diz que PINA.0 não foi declarado, eu acho que ele não esta entendendo que é o PINO 0 da PORTA A... A nomenclatura para ele deve ser diferente... E também não consegui usar o delay, de maneira nenhuma... delay_ms, _delay_ms, adicionei a biblioteca dalay.h, mas ele não possuí ela, achei meio estranho...

Postado

Salve, Smarley2.

As bibliotecas são todas as do C ANSI, mais as específicas pra cada modelo de máquina.

Dependendo de uma característica qualquer, o próprio wizard já inclui essas bibliotecas (LCD, p. ex.). As outras, o programador é quem inclui.

O AVRStudio não é compilador de C. Ele é compilador de assembly, e depurador tb.

Compilador de C, são os WinAVR (GCC), CodeVision e IAR. Não conheço outros.

O que você está querendo fazer (compilar programa C no Studio), não vai funcionar.

você precisa de um compilador C, que gere o arquivo de depuração COFF, que é usado no Studio para fazer debug. É isso!

Se você não for debugar, nem do Studio precisa. Basta o HEX gerado pelo compilador, e depois gravar o chip.

Bons programas! :-BEER

Maquineta fantástica, essa!!!

[]'s

Postado
O WinAVR não tem wizard. Lá. é tudo na mão. Melhor pra aprender a máquina, mas, péssimo pra produtividade.

[]'s

Aham, percebi isso!

Ja fiz um programa simples com o CodeVisionAVR e foi fácil, mas como eu estou com a versão de graça o programa só pode ter 2Kb, para testes ele irá servir mas para o trabalho final não... Mas só consegui compilar para C...

O CodeVision corverte o arquivo para .hex?? Se não faz isso, tu me recomenda algum??

Pois eu vou simulá-lo no Proteus...

abraço!

  • 2 semanas depois...
Postado

Olá Smarley!

Estou fazendo um projeto usando um Atmel ATMEGA8 e programando em C. Estou programando com as ferramentas da própria Atmel (WinARV e AVRStudio) junto com o PonyProg.

Em relação a isso está tudo beleza. É meu primeiro projeto com o esse microprocessador. Estou gostando, só estou com problemas para "Pegar" os dados lidos de um arquivo que leio num pendrive.

Se tiver alguma dica para mim, agradeço muito.

Abraço.'.

  • Membro VIP
Postado

...Eu uso o CodeVision. É praticamente, C ANSI.

[]'s

Salve , Maurício !!! (desculpe o plágio da saudação..)

Depois de muito tempo programando os 8051 em ASM e os AVRs em Basic (BascomAVR), decidi me aventurar em programar também em C.

A pergunta é:

você sabe se o código gerado em C é menor que o do BascomAVR?

Em termos de quantidade de linhas de programa para um mesmo resultado, qual seria o menor.

Esta é pro smarley.

Baixei esta versão do codevision e está completa e sem vírus... só me falta aprender C ...hehe

http://www.4shared.com/file/24992857/8a866a77/CodeVision_AVR_1253_license__professional_version_.html?s=1

Postado

Salve, soschip!

É! C é bem mais prático! Fora o fato de você usar uma única linguagem pra vários tipos de dispositivos programáveis.

Com relação ao tamanho do código, aí depende. Em um outro fórum, uma comparação similar resultou em um código menor, mas, C é bem guloso quando se trata de usar funções embutidas.

Não sei com relação ao Bascom, porque eu não programo mais em Basic, não sei nem utilizar, mais!

Meu livro é uma boa referência programando os 8051 em C.

Depois, usar C no AVR é a mesma coisa.

http://www.editoraerica.com.br/buscafinal.asp?cod=0778

Precisando, dá um toque!

[]'s

Olá Smarley!

Estou fazendo um projeto usando um Atmel ATMEGA8 e programando em C. Estou programando com as ferramentas da própria Atmel (WinARV e AVRStudio) junto com o PonyProg.

Em relação a isso está tudo beleza. É meu primeiro projeto com o esse microprocessador. Estou gostando, só estou com problemas para "Pegar" os dados lidos de um arquivo que leio num pendrive.

Se tiver alguma dica para mim, agradeço muito.

Abraço.'.

Pra isso, você vai ter que implementar uma interface USB pra acessar o pendrive.

O site do Rogério tem boas referências nesse assunto. Clique na opção: Porta USB.

http://www.rogercom.com/index.htm

[]'s

Postado
Salve , Maurício !!! (desculpe o plágio da saudação..)

Depois de muito tempo programando os 8051 em ASM e os AVRs em Basic (BascomAVR), decidi me aventurar em programar também em C.

A pergunta é:

você sabe se o código gerado em C é menor que o do BascomAVR?

Em termos de quantidade de linhas de programa para um mesmo resultado, qual seria o menor.

Esta é pro smarley.

Baixei esta versão do codevision e está completa e sem vírus... só me falta aprender C ...hehe

http://www.4shared.com/file/24992857/8a866a77/CodeVision_AVR_1253_license__professional_version_.html?s=1

Obrigado pelo link!

Postado

Ola pessoal esta É primeira vez que uso este forum ! E achei incrivel as dicas de vocês !

Gostaria de saber se É possivel desbloquear uma atmel 89c4051 , ja protegida! Caso possam me ajudar agradeÇo desde ja !

AbraÇo a todos ! Roger...

  • Membro VIP
Postado

Olá, roger... bem vindo!

Não é possível desbloquear... só apagando e regravando novamente.

Se fosse possível, não seria nada interessante pra quem cria programas, como eu, usar ele ou outro microcontrolador sem uma proteção eficiente do programa.

Postado

Saudações a todos!

Olá Maurício, muito obrigado pelo retorno.

Eu peguei o projeto pela metade para dar continuidade. O circuito já está montado com o ATMEGA8 e um VDIP (leitor USB), realmente é como lá no site do Rogério.

Porém o programa lê as 3 primeiras linhas do arquivo que são:

1a. linha - A identificação de que o arquivo foi gerado pelo meu sistema no micro.

2a. linha - A quantidade de linhas de dados

3a. linha - 1a. linha de dado

... aí ele não lê mais.

Gostaria de alguma dica ou até um exemplo de como eu deveria pegar os dados lidos do arquivo. Senão, vou recomeçar do zero, abandonando o que foi desenvolvido até aqui.

Abraços.'.

Postado

soschip!

Não sei se te serve como referência, mas, eu terminei um programa de um relóginho aqui, simples, usando Mega8 e cristal de 32K, mais 6 teclas, sendo que somente 5 estão implementadas, e o programa consumiu 420 bytes. Acredito que com a sexta implementada, ele deva ir lá pra casa dos 550/600 bytes.

Isso porque eu não usei nenhuma biblioteca externa, somente as minhas mesmo, dentro do programa.

ah! em C, claro!

O circuito usa 4 displays de 7 segmentos e 4 decoders 4511. E quem manda os dados para esses latches, são 2 shift-registers 4094.

A leitura do teclado é feita através de um shift-register paralelo 74165.

Varredura com 32K, não dá!

É isso!

[]'s

  • Membro VIP
Postado

Interessa muito para aprendizado, pois ainda estou em dúvida sobre se devo investir (tempo) em aprender outra linguagem e você sabe como é difícil pra que já usa uma, talvez muito mais do que pra quem não programa em nada. Temos os vícios...

Só uma ideia... ao invés de usar os 74165, não poderia usar os latches do 4511... não ficaria mais fácil, se é que tem pino sobrando no m8.

Seria +/- ist:

4 pinos para dados em comum + 4 para cada latch-enable dos 4511, e até um oscilador para os pinos BI (blank input) para piscar em certas situações.

Valeu!

Postado

Salve, soschip.

Na minha mensagem anterior, no lugar de BYTES, leia WORDS! Esquecí que as instruções do AVR são de 16 bits, ehehehehehe

No caso do C, eu sou muito suspeito pra falar qualquer coisa, (eheheheheh) mas, a vantagem que eu vejo no C, é que por ser de alto nível, com ela você pode programar qualquer outro tipo de dispositivo programável.

Realmente aprender uma linguagem nova leva tempo, mas depois que se aprende, é igual andar de bicicleta, e C é muito parecido com assembler. A curva é bem elevada.

O 74165 é pra ler teclas. A entrada dele é paralela, e a saída é serial. Não entendí como eu poderia usar os 4511 pra ler teclas. Bota um desenhinho pra nóis aí, dom, que eu gostaria muito de saber, ehehehehheh

Rapaz! Com 32KHz, fazer todo esse processo é problema! Não conseguí fazer uma varredura estável, e ainda processar todo o restante do programa. Eu tinha tentado antes e não ficou legal. O cara não ficava estável nem com ciclos de 500us. Menos do que isso acho que não dá, a máquina vai ficar pendurada só pra fazer varredura. Mas, valeu!

Vai no C, cara! Depois você não precisa usar nenhum outro tipo de linguagem!

[]'s

  • Membro VIP
Postado

Pra varrer teclas? Desculpe, pensei que ele era serial/paralelo e estava usando para colocar os dados nas entradas dos 4511...

mas, então como está colocando? Está ligando cada 4511 diretamente nos ports do mega48, ou seja 16 pinos?

  • Membro VIP
Postado

O esquema de ligação do 4511 que sugeri foi este. Assim, você não tem que desloca 16 bits e não precisa dos cis 4094. Os pino latch-enable 'guarda' o dado no 4511 com um pulso negativo (mais precisamente na borda de subida). Ver datasheet.

MEGA8-4511.jpg

  • 2 meses depois...
Postado

Eu Tenho um Gravador que grava todos os modelos da familia AVR, na realidade é um kit didático que permite o desenvolvimento de muitos projetos

(comunicação serial: RS 232, RS 485, RS 422 e CAN via fibra óptica ou normal; comuincação USB, internete, RF com módolo hibrido; circuitos PWMs, controles de temperaturas. saídas e entradas digitais, saindas e entradas analógicas, teclados matriciais, LCDs, dispalays de sete segmentos, entradas para termopares, relógios digitais emuitos outros.)

Este kit foi desenvolvido por mim mesmo!

Respondendo a sua pergunta.

veja com é fácil:

1- Tipos de dados em linguagem C para WinAVR

Em C, como na maioria das linguagens, os dados são divididos tipos: inteiro, real, caracter, etc.

Esta divisão se deve basicamente ao número de bytes reservados para cada dado. Cada tipo de dado

possui um intervalo de valores permitidos.

1.1 Tipos básicos

Abaixo segue uma lista dos tipos básicos de dados permitidos em C. Os tipos char e int são

inteiros e os tipos float e double são de ponto flutuante.

Tipo Tamanho Intervalo Uso

char 1 byte -128 a 127 número muito pequeno e caracter ASCII

int 2 bytes -32768 a 32767 contador, controle de laço

float 4 bytes 3.4e-38 a 3.4e38 real (precisão de 7 dígitos)

double 8 bytes 1.7e-308 a 1.7e308 científico (precisão de 15 dígitos)

1.2 Declaração de variáveis

Para que se possa usar uma variável em um programa, é necessário fazer uma declaração de

variável antes. A declaração de variáveis simplesmente informa ao processador quais são os nomes

utilizados para armazenar dados variáveis e quais são os tipos usados. Deste modo o processador pode

alocar (reservar) o espaço necessário na memória para a manipulação destas variáveis. É possível

declarar mais de uma variável ao mesmo tempo, basta separá-las por vírgulas (,).

Sintaxe: A sintaxe para declaração de variáveis é a seguinte:

tipo variavel_1 [, variavel_2, ...] ;

Onde tipo é o tipo de dado e variavel_1 é o nome da variável a ser declarada. Se houver

mais de uma variável, seus nomes são separados por vírgulas.

Exemplo: Declaração das variáveis:

int i;

int x,y,z;

char letra;

float nota_1,nota_2,media;

double num;

No exemplo acima, i, x, y e z foram declaradas variáveis inteiras. Assim elas podem armazenar

valores inteiros de -32768 até 32767. Do mesmo modo letra foi declarada como variável caracter

podendo receber valores de -128 até 127 ou caracteres do conjunto padrão ASCII. As variáveis nota_1,

nota_2 e media foram declaradas como ponto flutuante tipo float e num como ponto flutuante tipo

double.

A declaração de variáveis é feita, em geral, dentro de uma rotina. Por exemplo, a rotina principal

main(). Deste modo se diz que está se fazendo uma declaração de variáveis locais. Variáveis locais

podem ser referenciadas apenas dentro da rotina dentro da qual foi declarada, neste caso a rotina

main().

Exemplo: Observe o uso da declaração de variáveis no trecho de programa abaixo:

void main(){

float raio, area; // declaracao de variaveis

raio = 2.5;

área = 3.14 * raio * raio;

}

Veja um exemplo prático!

#include <avr/io.h>

#include <avr/delay.h>

#define led1 (1 << 0)

#define led2 (1 << 7)

#define liga_led1() (PORTB |= led1)

#define liga_led2() (PORTB |= led2)

#define desliga_led1() (PORTB &= ~(led1))

#define desliga_led2() (PORTB &= ~(led2))

void main (void)

{

unsigned char counter;

//set PORTB for output

DDRB = 0xFF;

while (1)

{

//liga PB0

liga_led1();

//liga PB7

liga_led2();

//agurada tempo pequeno para simulação para implementação real

//otempo da função _delay_loop_2( ) deve ser aumentado

counter = 0;

while (counter != 5)

{

//wait (30000 x 4) cycles = wait 120000 cycles

_delay_loop_2(3);

counter++;

}

//desliga PB0

desliga_led1();

//desliga PB7

desliga_led2();

//wait (10 * 120000) cycles = wait 1200000 cycles

counter = 0;

while (counter != 5)

{

//wait (30000 x 4) cycles = wait 120000 cycles

_delay_loop_2(3);

7

counter++;

}

}

}

Observe os comandos em negrito, é através deles que os led’s são ligados e desligados pois isso foi

definido através dos defines.

Fui!!!

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...