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; //
}
edgardo schrieb: > Ich habe nicht viel erfahrung mit dem und ich wäre sehr dankbar wenn > jemand mir helfen kann. Wo ist die Frage? :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.