also, es funktioniert, zumindest teilweise. Ich musste (wegen code:blocks) noch ein paar libs inkludieren und auch die multiIO initialisieren, jetzt lässt sich der code bei mir auch starten:
Code:
//#include "RP6ControlLib.h"
#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_MultiIOLib.h"
#include "RP6Control_I2CMasterLib.h"
#include "RP6Control_LFSBumperLib.h"
#include "RP6ControlServoLib.h"
#include "RP6Control_OrientationLib.h"
//#include "standard.h"
/*****************************************************************************/
uint16_t distanz_PC5 = 0;
volatile uint16_t zeit_PC5 = 0;
volatile uint16_t timestamp_last_PC5 = 0;
uint16_t distanz_PC6 = 0;
volatile uint16_t zeit_PC6 = 0;
volatile uint16_t timestamp_last_PC6 = 0;
/*****************************************************************************/
ISR(TIMER1_CAPT_vect)
{
//Wenn steigende Flanke
if(TCCR1B & (1<<ICES1))
{
//Flankenerkennung auf fallend
TCCR1B ^= (1<<ICES1);
//aktuelen timer-wert speichern
timestamp_last_PC5 = ICR1;
timestamp_last_PC6 = ICR1;
}
//fallende Flanke
else
{
//Flankenerkennung auf steigend
TCCR1B ^= (1<<ICES1);
//Laufzeit = aktueller timerwert - vorheriger timerwert
zeit_PC5 = ICR1 - timestamp_last_PC5;
zeit_PC6 = ICR1 - timestamp_last_PC6;
}
}
/*****************************************************************************/
void HCSR04_vorn (void)
{
// Messung
DDRC |= (1 << PC5);//Trig als Ausgang
PORTC &= ~(1<<PC5);//TRIG auf low
DDRD &= ~(1<<PD6);//Echo als Eingang
PORTD &= ~(1<<PD6);//ECHO pullup AUS
//Timer konfigurieren
TCCR1A = 0; // normal mode, keine PWM Ausgänge
//Noise Canceler aktivieren, Flankenerkennung auf steigende, Prescaler auf 64
TCCR1B |= (1<<ICNC1) | (1<<ICES1) | (1<<CS11) |(1<<CS10);
//ICP Interrupt aktivieren
TIMSK |= (1<<TICIE1);
//Globale Interrupts aktivieren
sei();
distanz_PC5 = (zeit_PC5*4)/58;
mSleep(100);
// Trig
PORTC |= (1<<PC5);//Trig high
_delay_us(12);
PORTC &= ~(1<<PC5);//TRIG auf low
_delay_ms(50);
//Werte ausgeben
writeString("zeit_PC5: ");
writeIntegerLength(zeit_PC5, DEC, 4);
writeChar('\n');
writeString("distanz_PC5: ");
writeIntegerLength(distanz_PC5, DEC, 4);
writeChar('\n');
mSleep(2000);
}
/*****************************************************************************/
void HCSR04_hinten (void)
{
// Messung
DDRC |= (1 << PC6);//Trig als Ausgang
PORTC &= ~(1<<PC6);//TRIG auf low
DDRD &= ~(1<<PD6);//Echo als Eingang
PORTD &= ~(1<<PD6);//ECHO pullup AUS
//Timer konfigurieren
TCCR1A = 0; // normal mode, keine PWM Ausgänge
//Noise Canceler aktivieren, Flankenerkennung auf steigende, Prescaler auf 64
TCCR1B |= (1<<ICNC1) | (1<<ICES1) | (1<<CS11) |(1<<CS10);
//ICP Interrupt aktivieren
TIMSK |= (1<<TICIE1);
//Globale Interrupts aktivieren
sei();
distanz_PC6 = (zeit_PC6*4)/58;
mSleep(100);
// Trig
PORTC |= (1<<PC6);//Trig high
_delay_us(12);
PORTC &= ~(1<<PC6);//TRIG auf low
_delay_ms(50);
//Werte ausgeben
writeString("zeit_PC6: ");
writeIntegerLength(zeit_PC6, DEC, 4);
writeChar('\n');
writeString("distanz_PC6: ");
writeIntegerLength(distanz_PC5, DEC, 4);
writeChar('\n');
mSleep(2000);
}
/*****************************************************************************/
void taster_M32(void)
{
uint8_t key = getPressedKeyNumber();
if(key)
{
while(getPressedKeyNumber());
switch(key)
{
case 1:
setLEDs(0b0001);
HCSR04_vorn();
break;
case 2:
setLEDs(0b0010);
HCSR04_hinten();
break;
}
}
}
/*****************************************************************************/
int main(void)
{
// initRP6Control();
initRP6Control();
multiio_init();
initLCD();
while(true)
{
taster_M32();
}
return 0;
}
die jeweiligen messungen werden durch die tasten der m32 ausgelöst, allerdings wird beim druck auf die taste 2 das vorhergehende ergebnis der taste 1 ausgegeben. Also muss man die ausgaben die durch die taste 1 entstehen noch irgendwo "nullen"...
ansonsten ähnelt die situation meinem vorhergehenden test, wenn ich auf PD6 die Sensoren umstecke, läufts, wenn beide Sensoren angeschlossen sind - nicht...
die ausgabe im terminal:
Code:
Terminal cleared!
zeit_PC5: 0694
distanz_PC5: 0047
zeit_PC6: 0694
distanz_PC6: 0047
zeit_PC5: 0694
distanz_PC5: 0047
zeit_PC6: 0694
distanz_PC6: 0047
Lesezeichen