Von Makefiles hab ich keine Ahnung (arbeite mit einem extra 'scheme')![]()
probier' mal:
Code:/*****************************************************************************/ // Includes: #include "RP6ControlLib.h" // The RP6 Control Library. // Always needs to be included! //#include "RP6I2CmasterTWI.h" //notfalls diese zwei zeilen auch noch //#include "inttypes.h" //#include "avr/io.h" /*****************************************************************************/ #define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT))) #define cbi(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT))) /*****************************************************************************/ //Prototypen void usleep(unsigned char usec); int usonic(void); /*****************************************************************************/ // Main function - The program starts here: int main(void) { initRP6Control(); // Always call this first! The Processor will not work // correctly otherwise. // Play a sound to indicate that our program starts: sound(100,40,64); sound(170,40,0); mSleep(400); setLEDs(0b0000); initLCD(); // Initialize the LC-Display (LCD) // Always call this before using the LCD! showScreenLCD(" SRF05 ", " Messung "); mSleep(500); //int abstand=usonic(); //FunktionsAufruf // .... (abstand); Ausgabe auf dem LCD return 0; } /*****************************************************************************/ //***********************************************// // VOID USLEEP // Wartet fuer 100*usec Mikro-Sekunden // = msleep mit 10x hoeherer Aufloesung // msleep(1) entspricht usleep(10) //***********************************************// void usleep(unsigned char usec) { for (int s=0; s<usec; s++) { for (long int i=0; i<140; i++) { asm volatile("nop"); asm volatile("nop"); } } } //Auszug aus ibex_header_v117.h //(c) Bernhard Stiehle 2008-2010 //***********************************************// // INT USONIC // liefert den Abstand des Ultraschallsensors // in Zentimetern. Es muss die Type SRF05 sein. // Rueckgabewert -1 = Modul reagiert nicht/ außerhalb Bereich //***********************************************// int usonic(void) { int ustime=0; //Eine Variable bitte ... danke ! int failure=0; //Sicherheit cbi(DDRA,2); //Anschluss als Eingang cbi(PORTA,2); //Pull-ups sicherheitshalber ausschalten sbi(DDRA,2); //Anschluss als Ausgang cbi(PORTA,2); //Low-Pegel ausgeben usleep(1); //Wartezeit sbi(PORTA,2); //High-Impuls ausgeben (-> Sensor misst) usleep(1); //Warten cbi(PORTA,2); //Impuls Ende cbi(DDRA,2); //Anschluss als Eingang cbi(PORTA,2); //Pull-ups sicherheitshalber ausschalten usleep(1); //warten while( !(PINA & 4) ) //warten, bis der Sensor sein Signal { //zurueckgibt (warten solange low) asm volatile("nop"); asm volatile("nop"); failure++; //Sicherheit: wenn kein Signal nach bestimmter Zeit kommt if(failure>2500) {return -1;} //dann -1 zurueck liefern (= kein Modul angeschlossen) } failure=0; while(PINA & 4) //Signal hat begonnen (=high) { ustime++; //Dauer des Impulses messen usleep(1); //Die Variable will eine Einheit (hier 0,1 ms) failure++; //Sicherheit: wenn Signal nach bestimmter Zeit nicht endet if(failure>5000) {return -1;} //dann -1 zurueck liefern (= kein Modul angeschlossen) } mSleep(35); //Wartezeit (Echo soll verhallen, sonst Fehlmessung) return (ustime*1408)/1000; //Rueckgabewert in Zentimeter, bitte ! }







Zitieren

Lesezeichen