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.