Hi Sprinter,
danke für deine Antwort, eine Antwort kommt so spät weil ich etwas arg im stress war die letzten Tage, doch jetzt hab ich mich damit mal wieder beschäftigt.
Habs jetzt erstmal soweit geschafft das überhaupt schon mal was flakert, kann ja den Code hier mal posten, auf das ihr mir vielleicht noch etwas unter die arme greifen könn/würdet wie auch immer.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
int main(void)
{
int T1,T2;
DDRB &= ~(1<<PB0);
PORTB &= ~(1<<PB0);
DDRD = 0xff; //für die Ausgabe über LEDs
PORTD = 0xff;
while(1)
{
//ACSR &= ~(1<<ACIC);
//Zähler starten ohne vorteiler
TCCR1B = 0;
TCCR1B |= (1<<CS10);
TCCR1B |= (1<<ICES1);
TCCR1B |= (1<<ICNC1);
sei();
TIMSK = (1<<TICIE1); //Interrupt für ICP
sei(); //einschalten für erste messung
//nach der ersten flanke wird der timer gestartet
//nach der zweiten Flanke ist die Periodendauer
//ermittelt
//es wird der gespeicherte wert aus dem ICR1
//register zur berechnung verwendet
while(TIFR & (1<<ICF1));
TCCR1B = 0; //Zähler stoppen
TCNT1= 0;
T1=T2=0;
T1 = ICR1;
T2 = ICR1H;
TIFR &= ~(1<<ICF1);// oder das hier beides
TIMSK = 0; // nach unten
if(T1>>0 & 0x01)
PORTD &= ~(1<<PD0);
if(T1>>1 & 0x01)
PORTD &= ~(1<<PD1);
if(T1>>2 & 0x01)
PORTD &= ~(1<<PD2);
if(T1>>3 & 0x01)
PORTD &= ~(1<<PD3);
if(T1>>4 & 0x01)
PORTD &= ~(1<<PD4);
if(T1>>5 & 0x01)
PORTD &= ~(1<<PD5);
if(T1>>6 & 0x01)
PORTD &= ~(1<<PD6);
if(T1>>7 & 0x01)
PORTD &= ~(1<<PD7);
}
}
mfG der Grave
Lesezeichen