Guten Abend. Ich bin zum ersten Mal in diesem Forum und benötige dringenst Hilfe! Wir machen gerade in der Schule ein Projekt, 2 Klassenkollegen und ich haben nur mehr bis Dienstag Zeit, dann müssen wir es präsentieren. Wir machen gerade einen Ultraschall-Abstandsmesser mit LCD-Anzeige.... Also Hardwaremäßig haben wir schon alles, sprich fertiggelötet usw... Allerdings hängt alles vom Programm ab und dieses funktioniert nicht ganz. Vorab, ich bin überhaupt kein Experte in diesem Gebiet, ein richtiger Amateur und kenn mich sehr wenig aus... Die Schaltung und das Programm bekamen wir vom Bruder des Teamkollegen und er meinte, bei ihm hat es letztes Jahr funkttioniert. Programm im Avr-Studio.... In der Schaltung haben wir Atmega8, jedoch meinte er dass wir das Programm im Avr-Studio unter Atmega48 simulieren sollen. (hmmm?!) Naja hier mal das Programm bzw Error: #define F_CPU 8000000 #include <avr/io.h> #include <inttypes.h> #include <stdio.h> #include <avr/interrupt.h> #include <distance.h> #include <util/delay.h> /** Prototypen **/ static int send_receive_ping (void); // Sends a rectangle-signal and tests for response static int compute_distance (int ticks); // Difference in timer-ticks between send and receive static void show_result (int distance); // Send the result to the display static void setup_timer (void); //Sets up the required time-register static void setup_ports (void); //Sets up io-Ports static void stop_timer (void); // Stops the timer volatile uint8_t ticks=0; // current Timer Ticks volatile uint8_t speaker_state=0; /** Some defines to adjust the correct timing **/ #define CNT_SEND_TICKS 10 #define CNT_TIMEOUT 40 #define CNT_INTERIM 40 #define CNT_SIGNALS 50 // real 8 #define CCNT_SIGNALS 100 //real 16 #define TIMER_PRELOAD 200 //real 100 #define ever;; /** Ablauf Programm sendet 4 Rechtecksignale mit 40kh via Port 2 an die Schaltung Dann wartet das Programm (?) Einlesen von Port 2 ob ein Signal ansteht. Errechnen der Laufzeit und Ausgabe des Ergebnisses. **/ int main() { int delay,i; int distance; uint8_t tv1,tv2; lcd_init(); setup_ports(); for(ever) { delay=send_receive_ping(); for(i=0;i<500;i++)_delay_ms(5); if(delay) // Timer is stopped { tv1=TCNT0; // Read the Current Timervalue 8Mhz tv2=ticks; //Count of Interrupts 80kh distance=compute_distance(ticks*TIMER_PRELOAD+tv1); //in mm show_result(distance); } } return(0); //prevents a compiler warning } /** Local functions **/ static int compute_distance(int ticks) // Difference in timer-ticks between send and receive { int rc; rc=(33*ticks)/125; // Unter 4mm return(rc); } static void show_result(int distance) { char buffer [32]; lcd_clear(); lcd_home(); sprintf(buffer,"DIST=%dmm",distance); lcd_string(buffer); } /** Predifined Function. This function is always called from the processor when the timer-Interrup occurs. In this function we increment the "current ticks". **/ ISR(TIMER0_COMPA_vect) // kommt mit 80 kHz {if (ticks < CNT_SIGNALS) { if(!speaker_state) {PORTB&=0x7F; speaker_state=1; } else { PORTB|=0x08; speaker_state=0; } } ticks++; } static void setup_timer() { ticks=0; TCCR0A=0x02; TCCR0B=0x85; OCR0A=TIMER_PRELOAD; TIMSK0=0x02; } static void setup_ports() { DDRB = 0xFF; PORTB=0x3F; DDRD=0x00; PORTD=0xFF; } void set_led(int8_t led,int8_t status) { if(!status) { PORTB|=1<<led; } else {PORTB&=~(1<<led); } } int send_receive_ping() {uint8_t echo_state; set_led(0,1); set_led(2,0); set_led(1,0); ticks=0; setup_timer(); sei(); while(ticks<CCNT_SIGNALS) { echo_state=PIND; // Test for response if (!(echo_state&0x1)) // Got a response ? { stop_timer(); //Save the Timerstate set_led(0,0); set_led(1,1); return(1); // Return "Response received" }} set_led(0,0); stop_timer(); // Always stop the timer return(0); } UND DIE FEHLERMELDUNG: ../Werkstätte.c:8:22: error: distance.h: No such file or directory also fehlt was in der library?! help pls :D danke schonmal im vorraus
die Fehlermeldung sagt doch genau, was der Fehler ist...mehr Hilfe kommt hoffentlich nicht...
Na den Fehler korrigieren. Wird Dir wohl nichts anderes übrigbleiben, wenn Du das Programm zum laufen bringen willst. Kleiner Hinweis: Wie kommst Du darauf, das eine Library fehlt? Lies nochmal genau die Fehlermeldung: ../Werkstätte.c:8:22: error: distance.h: No such file or directory Weisst Du was eine Library ist?
Hast du denn die Library in deinem Projektordner? -->Wenn ja, dann musst du "distance.h" schreiben. -->Wenn nicht, dann solltest du sie dir besorgen. Grüße
wie gesagt, ich bin ein ziemlicher amateur, und wie ihr seht, hab ich das programm natürlich nicht selbst geschrieben...
ja das ist das problem... wir sind eben nciht dazu fähig, eine zu schreiben.... ist das aufwendig? sonst könnte uns morgen ein lehrer helfen... denke ich
>wie ihr seht, hab ich das programm natürlich nicht selbst geschrieben Woran soll man das sehen? An den Serifen, oder was? Deutlicher geht es ja nun wirklich nicht. Wenn Du entweder nicht lesen oder Texte nicht verstehen kannst, dann hast Du Deine Note verdient. So einfach ist das. Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"
Hast du denn mal deinen Rechner nach einer Datei namens distance.h durchsucht und eventuell doch etwas gefunden? So wie es mir scheint ist die lib doch Elementar für eure gewünschte Funktion und ich kann nicht sagen, ob euer Lehrer überhaupt die Zeit investiert euch die Datei nochmal zurecht zu kauen. Grüße
Lass Dich von Muggel nicht irreführen. Was Dir da fehlt ist keine Library.
das sieht man, weil - ich gebs zu- ich nichtmal den fehler beheben kann, bzw genau weiß, worum es geht... "Deutlicher geht es ja nun wirklich nicht. Wenn Du entweder nicht lesen oder Texte nicht verstehen kannst, dann hast Du Deine Note verdient. So einfach ist das." Das eine hat mit dem anderen nix zu tun... ich kann lesen bzw texte verstehen, das heißt trotzdem nicht, dass ich nun ein super-programmierer bin und den fehler behebe
Hast ja recht. Dir fehlt die Header-Datei. Sorry für die Verwechslung. Trotzdem würde ich sie erst mal suchen gehen.
>dass ich nun ein super-programmierer bin und den fehler behebe
Sehr ungeschickt. Bei solchen Antworten fühlen wir uns hier erst recht
verarscht.
Um das Problem zu lösen muss kein "Superprogrammierer" sein.
ok thx, hab gerade eine im inet gefunden, dass das dann aber passt, bezweifle ich, man kanns ja versuchen :D
Blödmann schrieb: > Sehr ungeschickt. Bei solchen Antworten fühlen wir uns hier erst recht > verarscht. > Um das Problem zu lösen muss kein "Superprogrammierer" sein. Ich bin aber nicht einmal ein durchschnittlicher programmierer, sondern ein anfänger.... und ich fühle mich eher von dir verarscht, wenn du mir nicht helfen willst, und versuchst, mich anzuprangern, dann sei wenigstens ein wenig hilfreich, indem du gar nix schreibst
Warum versuchst du die Datei nicht von dem jenigen zu kriegen, der dir dein Projekt ja eigentlich schon gemacht hat?
cash warren schrieb: > Die Schaltung und das Programm > bekamen wir vom Bruder des Teamkollegen und er meinte, bei ihm hat es > letztes Jahr funkttioniert. Dann frag doch den, wo er die distance.h hat.
ja stimmt, nur ist sein bruder bloß beim bundesheer und kommt erst in monaten zurück
Du hast doch hier Hilfe erwartet. Aber wenn du deine Aufgabe übermütig ausgewählt hast und 2 Tage vor Abgabe feststellst, dass du doch keine Ahnung hast, von dem was du machst, dann können wir dir auch nicht helfen. Wir besitzen auch keine Glaskugel, die uns verrät, was da drin steht. Die aus dem Internet kannst du vergessen, da diese Datei bestimmt speziell auf das Projekt zugeschnitten ist. Ohne Kenntnisse von C deinerseits sehe ich da keine Lösung in Sicht.
ok stimmt, ohne c-kenntnisse sollte ich sowwas wirklich vergessen, thx trotzdem und sorry @blödmann dass ich ein wenig frech geworden bin.... ich verdiene diese note, die ich bekommen werde.... man sieht (liest) sich :D
Tja. Leider dumm gelaufen. Hoffe es reisst Dich nicht allzu sehr rein, mit Deinem Notendurchschnitt.
Hallo chash warren, wenn deine Datei distance.h im Verzeichnis deines 'Projektes' steht dann mach mal #include "distance.h", statt #include <distance.h> Die Meldung sagt aus die Datei dinstance.h nicht in dem von dir angebenen Verzeichnis gefunden wird. Aber das liest du dir am Besten mal in einem Buch über 'Grundlagen C' durch. Gruß J.
cash warren schrieb: > Wir machen gerade in der Schule ein Projekt, 2 Klassenkollegen und ich > haben nur mehr bis Dienstag Zeit, dann müssen wir es präsentieren. Da habt ihr euch ja was vorgenommen :) > Vorab, ich bin überhaupt kein Experte in diesem Gebiet, ein richtiger > Amateur und kenn mich sehr wenig aus... Das sind ja die besten Voraussetzungen :)) Kann einer von euch wenigstens ein Bisschen C programmieren? > Die Schaltung und das Programm bekamen wir vom Bruder des Teamkollegen Was habt ihr denn dann noch selber gemacht, außer die Schaltung nachge- baut? > und er meinte, bei ihm hat es letztes Jahr funkttioniert. Ziemlich sicher nicht mit dieser Programmversion.Wahrscheinlich gibt es eine neuere, die aber nicht mehr auffindbar ist :))) > In der Schaltung haben wir Atmega8, jedoch meinte er dass wir das > Programm im Avr-Studio unter Atmega48 simulieren sollen. (hmmm?!) Simulieren könnt ihr lange. Wenn ihr die Schaltung aber real vorführen wollt, braucht ihr einen ATmega48 oder einen anderen aus der gleichen Serie (ATmega88, -168 oder -328). Ihr könnt natürlich auch das Programm umschreiben, dass es auf einem ATmega8 läuft. > ../Werkstätte.c:8:22: error: distance.h: No such file or directory Wie schon geschrieben wurde: Euch fehlt die Datei distance.h. Ein heißer Tipp: Das ist euer allergeringstes Problem. Habt ihr mal probiert, was passiert, wenn ihr die Zeile im Programm einfach löscht? Der Teufel steckt aber wo ganz anders: Wie oben schon angedeutet, scheint dieses Programm nicht die letzte Version zu sein, da es noch grobe Fehler enthält. So ist bspw. die Funktion stop_timer noch nicht implementiert. Man kann sich aber denken, was sie wohl tun soll und sie unter Zuhilfenahme des Datenblatts nachprogrammieren. Wahrscheinlich enthält sie sogar nur eine einzige Anweisung. Da liegt aber noch mehr im Argen:
1 | ISR(TIMER0_COMPA_vect) // kommt mit 80 kHz |
2 | {if (ticks < CNT_SIGNALS) |
3 | { if(!speaker_state) |
4 | {PORTB&=0x7F; |
5 | speaker_state=1; |
6 | }
|
7 | else
|
8 | { PORTB|=0x08; |
9 | speaker_state=0; |
10 | }
|
11 | }
|
12 | ticks++; |
13 | }
|
Mal abgesehen davon, dass ein ATmega wesentlich bessere Möglichkeiten bietet, ein 40kHz-Signal zu erzeugen: Von den beiden Konstanten 0x7F und 0x08 sind bei einer die Ziffern vertauscht. Aus dem Schaltplan sollte aber hervorgehen, wie es richtig ist. Wahrscheinlich gibt es noch mehr Fehler von der Sorte. Wenn ihr ehrlich seid, müsst ihr zugeben, dass ihr die Sache vergeigt habt. Ihr seid wahrscheinlich in der Annahme an die Sache herangegangen, dass Schaltplan und Software ja schon von anderen gemacht worden sind und ihr jetzt nur noch die Dinge zusammenbauen müsst, wozu ja locker ein Wochenende (oder vielleicht sogar nur der heutige Tag) ausreicht. Also mit wenig Aufwand die große Show ;-) Aber noch ist es zu früh zum Aufgeben. Ihr dürft nur nicht erwarten, dass auch den Rest andere für euch machen. Wenn ihr euch massivst auf den Hosenboden setzt, bis Dienstag auf Disse, Computerspiele, Fernsehen & Co verzichtet, habt ihr noch eine Chance, das Ding zum Laufen zu bekommen, vorausgesetzt, ihr habt wenigstens ein ganz kleines Bisschen Ahnung von Mikrocontrollern und C-Programmierung (wenn nicht, frage ich mich, warum ihr die Sache überhaupt angefangen habt). Ihr solltet als erstes versuchen, den kompletten Programmcode zu verste- hen, so riesig ist er ja auch wieder nicht. Nur so könnt ihr eventuelle weitere Fehler aufdecken und korrigieren. Für das stop_timer-Problem solltet ihr ungefähr verstanden haben, was der Timer im AVR tut. Dazu gibt es hier ein AVR-Tutorial und natürlich das Datenblatt. Wenn ihr das verstanden habt, sollte es auch nicht schwer sein, das Programm vom ATmega48 auf den ATmega8 zu portieren, da ihr dazu praktisch nur die wenigen Zeilen Timer-Code anpassen müsst. Es wäre von Vorteil, wenn ihr ein Oszilloskop zur Verfügung hättet, um zu sehen, ob die Sende- und Empfangssignale des Sensors in Ordnung sind. Sicher hat eure Schule eins, das ihr benützen könnt. Damit euch das Oszi etwas nützt, müsst ihr natürlich auch die Schaltung verstanden haben. Es gibt also drei Baustellen: Software, Timer und Schaltung. Und ihr seid drei junge, hochmotivierte und lernfähige Burschen :D Wenn jeder von euch eines der Themen anpackt und morgen früh sofort anfängt, bekommt ihr das bis Dienstag hin (falls es doch nicht ganz reichen sollte, gibt euch der Lehrer ja vielleicht auch eine Fristver- längerung bis Mittwoch oder Donnerstag). Ich wünsche euch viel Erfolg :)
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.