Página 1 de 2
Iniciando em "C"

Enviado:
06 Mai 2008 21:26
por brasilma
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
}

Enviado:
06 Mai 2008 22:12
por Maurício
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

Enviado:
06 Mai 2008 23:18
por brasilma
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.

Enviado:
06 Mai 2008 23:31
por brasilma
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

Enviado:
07 Mai 2008 00:49
por Maurício
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

Enviado:
07 Mai 2008 12:52
por rubenprom
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

Enviado:
07 Mai 2008 14:12
por brasilma
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.

Enviado:
09 Mai 2008 16:33
por brasilma
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.

Enviado:
09 Mai 2008 18:04
por Maurício
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!
Mas desabilitar o JTAG é através dos fuses. Tem que desabilitar o JTAGEN e o OCDEN.
[]'s

Enviado:
09 Mai 2008 19:33
por rubenprom
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.

Enviado:
09 Mai 2008 19:51
por brasilma
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.

Enviado:
10 Mai 2008 00:40
por Maurício
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

Enviado:
10 Mai 2008 07:49
por brasilma
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)???

Enviado:
12 Mai 2008 06:54
por EDSONCAN
#include <avr/io.h>
Vc colocou isso no codigo?
Edson
www.moky.com.br

Enviado:
12 Mai 2008 08:32
por brasilma
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.