-
-
Puls von 1ms bis 30ms messen
Hallo,
Ich möchte mit dem Mega8 / Timer 1 eine Pulsmessung durchführen. Der Pulseingang ist an PD6 (ICP), Bei ansteigender Flanke soll der Timer1 auf null gesetzt werden und bei abfallender Flanke stoppen. Der Wert soll dann , wenn es mal funzt, ins RAM und dann weiterverarbeitet werden.
Im Simulator läuft es nur in der Hardware nicht. Ich habe am PD6 einen Puls-Generator.Also Schalterprellen kann nicht der Fehler sein. Auch zwischen 2 Pulsen ist genug Zeit. Irgendeinen Fehler mache ich - kann mir jemand weiterhelfen?????
Im voraus mal vielen Dank
Hier der ( im wahrsten Sinne
) Code:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint16_t wert,wort;
volatile uint8_t i,y=0;
SIGNAL(SIG_INPUT_CAPTURE1)
{
if(i>10)
{
wort=ICR1;// Timer auslesen
wert=wort;//>>8;//nur high byte
PORTB = wort;//>>8;// Zähler ausgeben
TCCR1B &=~(1<<ICES1);// Inter. Steigende Flanke
i=5;// Flag zurücksetzen
}
else
{
TCNT1=0;// Zähler auf Null = Reset Timer
TCCR1B |=(1<<ICNC1)|(1<<ICES1)|(1<<CS11)|(1<<CS10);// Inter.auf fallende Flanke
i=15;// Flag setzen
}
}
int main(void)
{
DDRB = 0xff;//Portb =Ausgabe
PORTD = 0x00;
TIMSK |= (1<<TICIE1);//Input Capture frei
TCCR1B |= (1<<ICES1)|(1<<CS11) | (1<<CS10);
sei();
while(1)
{ }
return 0;
}
-
Erfahrener Benutzer
Robotik Visionär
Bist du dir sicher das du da nicht einen Pin-wuxel drinnen hast. Du schreibst PD6 (ICP), das ist aber AIN0, ICP1 ist PB0. Wenn du AIN0 verwenden willst musst du auch den AC enablen.
Hubert
-
Hallo Hubert,
Danke für deine schnelle Nachricht. PIN-WUXEL - du hast recht. Ich weiß nicht wie ich nach dem Studium des Datenblattes daruf kommen konnte ICP an den PD6 anzuschließen????? Bin scheinbar langsam betriebsblind oder urlaubsreif, was weiß ich. Danke nochmal. Ich werde es am Montag umwuxeln 
Gruß Joachim
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen