Go Down

Topic: Problemas con Registro OCR1A (Read 68 times) previous topic - next topic

DiegoPelusa12

Nov 20, 2017, 09:06 pm Last Edit: Nov 22, 2017, 05:20 pm by surbyte Reason: Errores y códgios van con etiquetas.
Hola A todos

He estado trabajando con Arduino UNO, tratando de manipular el registro OCR1A pero al momento de hacer que incremente o decremente con push buttons no puedo lograr hacer esa variacion del valor.

El registro se queda en el mismo valor al intentar incrementarlo o decrementarlo, este es mi codigo. tendre algo mal.

Code: [Select]
void setup()
{
cli();
TCCR1B=0;
TCCR1A=0;
TCCR1B |= 0x09;  //WGM12=1 CS10=1
TCCR1A |=0x83; //COM1A1=1 WGM11=1 WGM10=1  
DDRB |= 0x02; // OC1A declared as output
OCR1A =512;  //Default: 50% of duty-cycle
DDRD = 0x00;
sei();


}
void loop()
{
 Serial.begin(9600);
 while(1)
 {
   if(PIND==0x04)
   {
     OCR1A= OCR1A + 1;
           Serial.println(OCR1A);

     //delay(800);
   }
   if(PIND==0x08)
   {
     
     OCR1A = OCR1A -1;
     Serial.println(OCR1A);
     //delay(800);
   }
   // the register OCR1A (0-1023) modifies      
    // the duty-cycle.  
 }
}

surbyte

para que el while(1) si ya estas en loop que es un while(1)

Esto es una mezcla del pasado y el presente de ATMEL, decidete como programar!
en realidad el loop es while(1)

No sabemos como estan los pines conectados, si PIND tiene algun bit en 1, esto

Code: [Select]
if(PIND==0x04) jamas se cumplirá.

Deberías enmascararlo

Olvida los OCR1A y solo prueba con un contador simple, funciona?

Lucario448

No sabemos como estan los pines conectados, si PIND tiene algun bit en 1, esto

Code: [Select]
if(PIND==0x04)
 jamas se cumplirá.

Deberías enmascararlo
Registro PIND para que sea igual a 0x04, tendría que SOLO el pin 2 estar en estado alto. Lo mismo con 0x08, excepto que ahí se refiere al pin 3. "Enmascararlo" vendría siendo algo como:

Code: [Select]
if (PIND & 0x04)

Go Up