Forum: Analoge Elektronik und Schaltungstechnik Einfangen eines Eingangssignals mit Attiny2313 C-sprache


von edgardo (Gast)


Lesenswert?

Señoras y Señores,
sorry aber mein Deutsch  ist nicht so gut!!

Ich habe eine Fernsteuerung und ihr Empfänger für ein kleines Flugzeug 
dann bekomme ich ein PWM signal ich möchte das einfangen und dann ein 
paar sachen mit dem steuern.

Ich habe nicht viel erfahrung mit dem und ich wäre sehr dankbar wenn 
jemand mir helfen kann.

gruss

////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
/* uC: Attiny2313 */
#include <avr/io.h>
#include <avr/interrupt.h>
#include "regdef.h"
#include <stdlib.h>


volatile unsigned int counter;

int main(void)  {

  DDRB  = 0xfc;    //  Eingänge
  PORTB = 0x00;   // Pullups an Eingängen

  DDRD  = 0xbf;     // Eingänge,
  PORTD = 0x00;  // Pullups
  // Timer1 initialisieren:///////////////////////////////////////

  TCCR1A = 0;       // normal mode, keine PWM Ausgänge
  TCCR1B = (1<< ICNC1) + (1 << CS11)  // start Timer mit Systemtakt
    + (1 << ICES1);            // steigende Flanke auswählen
  TIMSK = (1<<TOIE0) + (1<<ICIE1) + (1<<TOIE1); // overflow und
Input-capture aktivieren,
  TIFR = (1<<ICF1);

  while(1)  {

    counter=0;
    ICR1=0;
    while(REG.xPORTB.BIT.B1!=0){REG.xPORTB.BIT.B6=1;}
    //if(ICR1>=5000){REG.xPORTB.BIT.B6=1;}
      }

}
ISR(TIMER1_CAPT_vect) {
  uint16_t tval;
  tval=ICR1;
}

ISR(TIMER1_OVF_vect)        // Timer1 Überlauf
  {
    ++counter;        //
  }

von Julian B. (julinho)


Lesenswert?

#include "regdef.h"   ????

von Floh (Gast)


Lesenswert?

edgardo schrieb:
> Ich habe nicht viel erfahrung mit dem und ich wäre sehr dankbar wenn
> jemand mir helfen kann.

Wo ist die Frage? :-)

von edgardo (Gast)


Lesenswert?

Sorry, jetzt ich schreibe besser



1.-Eingänge definieren

wenn ich  eine signal mit PD6(ICP1) einfangen möchte MUSS ich PD6 als 
eingang definieren (DDRD  = 0xBF;)??

  DDRB  = 0xfc;    // Eingänge
  PORTB = 0x00;
  DDRD  = 0xbf;   // Eingäang
  PORTD = 0x00;
///////////////////////////////////////////////////
/////////////////////////////////////////////////////
////////////////////////////////////////////////////

2.-Timer1 initialisieren(input capture)

so  habe ich richtig der Timer1  initialisieren??

// normal mode,
  TCCR1A = 0;

// start Timer mit Systemtaktsteigende Flanke auswählen
TCCR1B = (1<< ICNC1)+(1 << CS11)+(1 << ICES1);

// overflow und Input-capture aktivieren,
TIMSK = (1<<TOIE0) + (1<<ICIE1) + (1<<TOIE1);

TIFR = (1<<ICF1);



3.-
INTERRUPT

muss ich mit diese Interrupt arbeiten? das bedeutet wenn ich ein 1 
bekomme, in ICR1 kann ich wissen wie lange es hat gedauert??

ISR(TIMER1_CAPT_vect) {
  capture=ICR1;
}


|----|____|----|____|----|____|----|____|----|
\    /
 \  /
  \/
 ICR1


4.-

kann ich etwas so machen??

ICR1=0;
while(ICP1!=0){}
if(ICR1>>100){led_grun=1;}

ich hoffe, dass ihr mir verstehen und helfen könnt

gruss

ed

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.