Pages: [1]   Go Down
Author Topic: error de compilación "expected ')' befoer ';' token"?[SOLUCIONADO]  (Read 1631 times)
0 Members and 1 Guest are viewing this topic.
Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Llevo un par de horas atascado con esta tontería de programa. Es el ejemplo button pero estoy intentando programar los registros. En todos los comandos que he usado los registros de desplazamiento (<<) me da el mismo error: expected ')' befoer ';' token

Será una tontería pero no veo el error, he probado hasta instalando el AVR  studio y sigue dando el mismo error. A alguien se le ocurre que puede ser?

Code:
#include <avr/io.h>  //librería de entradas y salidas de los micros AVR
// constants won't change. They're used here to
// set pin numbers:
#define buttonPin PINB2;     // Pulsador (Pin10 en Arduino)
#define ledPin PORTB5;      // Diodo led (Pin13 en Arduino)

void setup(void);  //Función para configurar el micro

int main(void){
  // read the state of the pushbutton value:
  if(PINB&(1<<buttonPin)){
    PORTB|=(1<<ledPin);
  }
  else{
   PORTB&=~(1<<ledPin);
  }
}

void setup(void) {
  DDRB&=~(1<<buttonPin);   // initialize the LED pin as an output  
  DDRB|=(1<<ledPin);  // initialize the pushbutton pin as an input  
}

He realizado el mismo programa pero en vez de usar main y funciones de C he usado las de Arduino y compila estupendamente, el código que he probado :
Code:
const int buttonPin = PINB2;     // Pulsador (Pin10 en Arduino)
const int ledPin =  PORTB5;      // Diodo led (Pin13 en Arduino)

void setup() {
  DDRB&=~(1<<buttonPin);//pinMode(ledPin, OUTPUT);      
  DDRB|=(1<<ledPin);//pinMode(buttonPin, INPUT);  
}

void loop(){
  // read the state of the pushbutton value:
  if(PINB&(1<<buttonPin)){
    PORTB|=(1<<ledPin);
  }
  else{
    PORTB&=~(1<<ledPin);
  }
}

He simulado y los desplazamientos de pines están correctos, el problema está al poner el código en C. He provado con Arduino y Atmel Studio con los mismo errores de compilación.
« Last Edit: May 28, 2013, 01:56:05 pm by ionhs » Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 726
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

me parece que el error esta en el if
has puesto PINB en vez de portB
Logged

El que pregunta aprende, el que responde aprende a responder.

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hasta la noche no puedo probarlo pero no lo veo mal. Port es el registro para sacar 1 o 0. Pin es para leer el estado de las entradas. Ademas si estuviera mal no daria error eo compilador. Eso creo por lo menos. Salu2
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 726
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La referencia dice variable << numero de bits, y lo esta poniendo alrevez
Logged

El que pregunta aprende, el que responde aprende a responder.

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 729
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Hola,
no te puedo aclarar cosas relacionadas con el desplazamiento de bits. Pero he encontrado este documento

http://playground.arduino.cc/Code/BitMath

donde trae una serie de razones para no utilizar esta vía y utilizar pinMode(), digitalWrite() ...
Dice que se ahorra poquito tiempo, y se pierde mucho.

Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Justamente habia leido todo lo contrario en otro sitio diciendo que era mejor programar ek registro. Se pierde mucha velocidad de hacer blink 90000 veces al segundo, se pasa a 2,6 millones de al segundo. El tamaño de los scketch cae a la mitad. Yo creo que es bueno aprender a modificar registros y segun necesidad programar con funciones o con desplazamiento de bits. Sigo sin comprender porque no va.

He modificado el primer post para confirmar que el problema no está en los desplazamientos de registros, eso lo hace bien.
« Last Edit: May 27, 2013, 03:14:30 pm by ionhs » Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 729
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
dando palos de ciego, he intentado utilizar patrones binarios, y no da error
Code:
void setup()
{
   // pines 3  y 5 output
   DDRD = 0b00100100;
}

void loop()
{
   if( PIND3 & 0b00000100)  
      PORTD |=  0b00100000 ;
   else
      PORTD &= 0b11011111;
}

No sé si te vale, tal vez te sirva para seguir investigando.

« Last Edit: May 28, 2013, 01:42:25 pm by curro92 » Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias curro. Es el ; que he puesto al define. Con eso el programa compila bien como suponia era una tonteria. Gracias por las ideas.
« Last Edit: May 28, 2013, 01:57:10 pm by ionhs » Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 729
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
me alegro de que hayas solucionado, vaya fallo más tonto!

De todas formas, no entiendo por qué pones
#define ledPin PORTB5

¿NO tendría que ser esto otro?
#define ledPin  PINB5

Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En realidad los dos son correctos. Igual que si pongo 5. Al fin y al cabo con los bits de desplazamiento le digo cuanto se tienen que desplazar el bit 00000001 hacia la izquierda. Y son 5 posiciones. La libreria /io tiene a su vez includes con port y pin igual a 5. No se si esta muy claro lo que he intentado explicar. Salu2
Logged

Pages: [1]   Go Up
Jump to: