Iniciando em "C"

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Iniciando em "C"

Mensagempor brasilma » 06 Mai 2008 21:26

Pessoal,

Desculpem minha ignorancia, não estou me entendo com o WinAVR.

Estou fazendo uma rotininha para escrever no LCD e o compilador está dando erro nessas duas linhas abaixo, o que estou fazendo de errado???


// Porta e Bits de Escrita no LCD
#define LCD_Port PORTA
#define LCD_E PORTC.2
#define LCD_RS PORTC.3


void delay_us(double timedelay_us); // Declaração de funções implicitas em delay.h
void delay_ms(double timedelay_ms);

void _E (void)
{
LCD_E = 1; <<< error: expected ';' before numeric constant
delay_us(5);
LCD_E = 0; <<< error: expected ';' before numeric constant
}
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Maurício » 06 Mai 2008 22:12

Salve, brasilma!

Tem algum header aí com a definição dos ports? Se não, o compilador não vai saber o que significa PORTC.2, p. ex.

Sai fora disso, rapaz!! ehehehehehehe
Use um compilador que funciona:

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

Limitado em 2K, mas já dá pra ver como o bixinho funfa!
US$220 a licença do full.
Vale a pena!

Qualquer coisa, MP.

[]'s
"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

Mensagempor brasilma » 06 Mai 2008 23:18

Beleza Maurício!!!

Só podia ser vc mesmo, tô apanhando como cachorro, rs, rs.

Estou com o CV instalado e achei ele maravilhoso, vi que ele tem ferramenta pronta para LCD, você diz em que porta deseja conectar e ele monta para você.

Meu problema é que daqui algum tempo precisarei extrapolar com a conecção de um GLCD e outras coisas, então gostaria de inicialmente estar fazendo tudo "no braço", até mesmo para aprender melhor o "C" (para quem programava em ASM já estou no Céu).

Estou meio perdido pois mudou tudo, familia de controlador, linguagem, ambiente de trabalho.

Vou dar uma olhada nas definições mas eu coloquei:

#include <avr/io.h> // Definições de endereços dos dispositivos no AVR
#include <avr/iom32.h>


Abraços,
MArcos.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor brasilma » 06 Mai 2008 23:31

Imaginando que seja um erro de sintaxe nas definições, mudei de:

#define LCD_E PORTC.2

para:

#define LCD_E PORTC2

e agora nas linhas abaixo está dando:

LCD_E = 1; <<< error: invalid lvalue in assignment
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Maurício » 07 Mai 2008 00:49

Tem que ver nos helps do WinAVR como é que ele configura os endereços dos pinos.

Essa notação: PORTC.2, quem usa é o CodeVision, mas, antes, ele define o endereço do port em um header da máquina que vc vai usar, o MEGA8, p. ex., desse jeito:

Código: Selecionar todos
sfrb PORTC=0x15;


No header MEGA8.h, no diretório INC do CodeVision, vc tem essas definições.
Não sei se no WinAVR essas definições são iguais.

Parecido com o Keil pro 8051, onde vc definia antes, o endereço de memória do port:

Código: Selecionar todos
sfr P0   = 0x80;


Abre um header do CodeVision e do WinAVR, pra mesma máquina, para vc poder ver como eles são configurados.

Isso muda em cada compilador, mas, como eu só uso o CodeVision, nem me preocupei com isso. eheheheheheh

Aliás, nem configurar os ports eu sei!!! kkkkkkkkkkkkkkkkkkkkk
Tou ficando bem mal-acostumado!!! kkkkkkkkkkkkk

[]'s
"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

Mensagempor rubenprom » 07 Mai 2008 12:52

Brasilma!

Voce está usando qual AVR?? No caso se voce for usar o mega16 para cima, tem que ter cuidado especial na hora de setar o PORTC, voce deve saber configurar, eu nao sei como, mas eu tambe tentei mandar dados pelo PORTC, e nao funcionava, até que vi que tinha de desabilitar a opçao de JTAG. Isso nao sei como faz

mas era isso

Abraços
rubenprom
Byte
 
Mensagens: 222
Registrado em: 16 Out 2006 00:23
Localização: Porto Alegre - RS

Mensagempor brasilma » 07 Mai 2008 14:12

Olá Ruben,

Estou usando o ATmega32L, acho que é bem o que você e o Maurício estão falando, creio que tenha de configurar a porta antes, vou batalhar hoje a noite nisso e descobrindo algo retorno.

Obrigado.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor brasilma » 09 Mai 2008 16:33

Pessoal a "questã" era a seguinte (falei que estou começando em C):

Semantica para setar bit "sfr |= _BV(bit)":

PORTx |= _BV(Pxbit); // _BV(Pxbit) é igual a (1<<Pxbit)

Para resetar "sfr &= ~(_BV(bit))":

PORTx &= ~(_BV(Pxbit));

Para melhorar a compreenção do programa pode-se usar a notação assim:

#define LCD_E_ON PORTC |= (1<<2)
#define LCD_E_OFF PORTC &= ~(1<<2)

E depois no programa simplesmente:

LCD_E_ON;
LCD_E_OFF;

Neste tempinho de "apagão" do forum desenvolvi meu conjunto de rotinas de delay, pois o conjunto padrão consumia muita memória.

Sempre contando com a ajuda dos colegas, logo chego lá.

Grande Abraço.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Maurício » 09 Mai 2008 18:04

rubenprom escreveu:Brasilma!

Voce está usando qual AVR?? No caso se voce for usar o mega16 para cima, tem que ter cuidado especial na hora de setar o PORTC, voce deve saber configurar, eu nao sei como, mas eu tambe tentei mandar dados pelo PORTC, e nao funcionava, até que vi que tinha de desabilitar a opçao de JTAG. Isso nao sei como faz

mas era isso

Abraços


É verdade! Eu nunca me lembro disso, porque o CodeVision faz automático! :oops:

Mas desabilitar o JTAG é através dos fuses. Tem que desabilitar o JTAGEN e o OCDEN.

[]'s
"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

Mensagempor rubenprom » 09 Mai 2008 19:33

O Codevision faz automatico na hora de declarar se é Entrada ou Saida da Porta, ou seja, na hora de declarar a direção da porta, DDRC (que é tratado neste caso), este pode ser

DDRC = 0xFF; PORTC como Saida
DDRC = 0x00; PORTC como Entrada

OBS: Esse trecho é usado para usar todo o PORTC, mas se quiser usar alguns pinos, por exemplo, os ultimos 4 como saida e os primeiros 4 como entrada, voce pode declarar da seguinte maneira

DDRC = 0x0F ; que equivale a dizer DDRC = b00001111 ; (b de binario)

Bom, isso faz o Codevision na hora de Configurar. Mas agora na hora de desabilitar o JTAG, muito cuidado na hora de mexer nos fusses, CUIDADO MESMO!!, senao voce pode acabar travando o coitado do AVR, que foi que aconteceu no meu caso. Pergunte pro Mauricio como fazer e com pinças se é possivel. Se puder alguem deixar um pequeno tutorial de como mexer nesse fuses passo a passo, seria uma otima ideia, hehe

Att

Ruben

PD: Por experiencia, te recomendaria trabalhar com o ATmega8, sao baratinhos e o perigo de travar os fuse é um pouco menor, mas vale a pena.
rubenprom
Byte
 
Mensagens: 222
Registrado em: 16 Out 2006 00:23
Localização: Porto Alegre - RS

Mensagempor brasilma » 09 Mai 2008 19:51

Olá Ruben e Maurício,

Muito importante essa informação do JTAG, vou verificar e retorno aqui.

Alguns pinos da porta C não estão funcionando, achei que eu tinha queimado, e pode ser isso.

No mais está tudo beleza.

Abraços.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Maurício » 10 Mai 2008 00:40

O fusível do JTAG não pega nada! Vc habilita ou não. Esse daí não trava a máquina, não, ehehehehehehe
Se vc usa o Ponyprog, aí tú tá no sal! O Pony dá acesso aos fuses de programação serial (ISP), e se vc desabilitar, aí sim, tú tá lascado! ehehehehehehe

Experiência própria....

Pra desabilitar os fuses JTAGEN e OCDEN (on-chip debug enable), é através do software do gravador que vc usa. Se vc marcar, vc habilita. Se desmarcar, desabilita.
No CodeVision eles estão fáceis! Tem um painel com a maioria dos fuses "seguros" que vc pode habilitar/desabilitar.

Vira e mexe eu danço com esse port! Esqueço do infeliz do JTAG e até lembrar.... afffff!!!!

[]'s
"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

Mensagempor brasilma » 10 Mai 2008 07:49

Com relação a fusíveis estou meio tranquilo, o meu gravador paralelo (alta-tensão) dos '51 também serve para os AVR (é um Elnec '51&AVR), então se fizer alguma besteira via ISP conserto com ele.

*** Os pinos do port C que não estavam funcionando era realmente por causa do JTAG, desabilitei e agora estão normal, e eu que já estava achando que tinha queimado, rs, rs ***

Aliaz já li, que os AVR como no caso dos '51 (ao menos os da Atmel), vc pode até ligar invertido (pino 21 no 1) que não dá nada, isso é muito bom pros desatentos e apressados (como eu, rs, rs).

O problema dele é que não consigo mais usar no meu micro, pois só tem USB, então esses dias fiz um up-grade no antigo - comprei mais um pente de 512 de memória, e fiz funcionar o dual-channel, formatei e instalei de novo o win, agora ele tá novo em folha aqui do meu lado.

Estou usando ele para trabalhar só com os '51 e no novo só AVR.

---------------------------------------------------------------------------

Por falar nesses assuntos, alguém sabe alguma coisa sobre o "boot-loader" (inicialização que o compilador agrega ao programa)???
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor EDSONCAN » 12 Mai 2008 06:54

#include <avr/io.h>

Vc colocou isso no codigo?


Edson
www.moky.com.br
EDSONCAN
Word
 
Mensagens: 876
Registrado em: 11 Out 2006 14:11

Mensagempor brasilma » 12 Mai 2008 08:32

Bom dia Edson,

Tem esse include sim obrigado, o problema era de sintaxe mesmo, pois estou acostumendo com o compilador, este problema foi resolvido como descrito acima, agora vamos aos outros, rs, rs.

Abraços.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Próximo

Voltar para AVR

Quem está online

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

x