Hallo, ich hab folgendes Problem mit einem ATMEGA128 und Codevision als Compiler. Und zwar habe ich einen PID Regler programmiert der Soll und Istwert berechnet am LCD ausgibt und auf eine MMC schreibt. Das beschreiben der MMC passiert aus einer Forschleife heraus (aufruf ausgabe())und wird beim ersten Mal also 49 Mal auch wie erwartet ausgeführt. Nachdem sich der Vorgang wiederholt (Endlosschleife) bricht das Programm nach dem fopen –Befehl ab. (da das debuggen mit avr4 ja nicht hinhaut habe ich mir portpins gesetzt -so sehe ich bis wohin das Programm noch läuft).Gibts da ein Problem mit dem fclosen oder fopen. Ich hab jedenfalls keine Ahnung warum das Prog beim ersten Durchlauf klappt und danach hängen bleibt. Vielleicht hat je wer von Euch eine Idee Anbei der Code . . . void regler(void) { char anzahl[4]; int n; //Flags initialisieren createflag=0; wflag=0; // Regler initialisieren kr=0.001; Tv=1; Tn=2; T=1; while(1) { Fuhrungsgr(); berechne(); for(n=0; n <= 49; n++) { pwmuebergabe=x1[n]; pwm(); x=x1[n]; wandle(); sollwert=ergebnis; x=i; wandle(); istwert=ergebnis; itoa(n,anzahl); itoa(createflag,Cflag); lcd_init(20); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("Anzahl:"); lcd_gotoxy(11,0); lcd_puts(anzahl); lcd_gotoxy(0,1); lcd_putsf("Cflag="); lcd_gotoxy(11,1); lcd_puts(Cflag); delay_ms(500); lcd_clear(); ausgabe(); if(n == 49) { wflag=1; } } } . . . ausgabe an MMC //MMC-Read Write functions #include <options.h> #include <lcd.h> //Prototypendefinition //globale Variablen int8 flash _FF_FNAME[17]="Daten.txt"; int8 flash ld_str[] = "%03ld, "; int8 flash done_str[] = "\r\n\r\nDONE!!!"; int8 flash column_d[] = "Column %d, "; int8 flash Fail_str[] = "\r\nFAILED!!! - %02X"; int8 flash C2DStr[] = "%c%02d/"; int8 flash p2DSlashStr[] = "%02d/"; int8 flash p4DStr[] = "%04d "; int8 flash p2DColinStr[] = "%02d:"; int8 flash p2DCRLFStr[] = "%02d%c";//\r\n //Globale Variablen vom Reglerprogramm kommend float sollwert; float istwert; int createflag; void ausgabe(void) { //Lokale Variablen FILE *file; int16 h; int8 stemp[14]; int8 jahr[5]; int8 monat[3]; int8 tag[3]; int8 strich[2]="-"; int8 extens[5]=".txt"; char csollwert[7]; char cistwert[7]; //Globaler Interrupt enable #asm("sei"); #ifdef RTC_ON twi_setup(); #endif //rtc_set_time(14, 28, 0); //rtc_set_date(10, 1, 2008); ftoa(sollwert,3,csollwert); ftoa(istwert,3,cistwert); if(initialize_media()) { /*//Hier wird der Filebezeichner gebildet rtc_get_timeNdate(&RTCHour, &RTCMin, &RTCSec, &RTCDay, &RTCMonth, &RTCYear); h=(int16) (RTCYear); itoa(h,jahr); h=(int8) (RTCMonth); itoa(h,monat); h=(int8) (RTCDay); itoa(h,tag); strcat(stemp,jahr); strcat(stemp,strich); strcat(stemp,monat); strcat(stemp,strich); strcat(stemp,tag); strcat(stemp,extens);*/ if(createflag == 0) { file=fcreatec(_FF_FNAME,0); fclose(file); } if(createflag != 0) { file=fopenc(_FF_FNAME,APPEND);//fcreatec(_FF_FNAME,0); } createflag=1; lcd_init(20); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("Sollwert..."); lcd_gotoxy(11,0); lcd_puts(csollwert); lcd_gotoxy(0,1); lcd_putsf("Istwert..."); lcd_gotoxy(11,1); lcd_puts(cistwert); delay_ms(500); lcd_clear(); fprintf(file, C2DStr, '\"', RTCMonth); fprintf(file, p2DSlashStr, RTCDay); fprintf(file, p4DStr, RTCYear); fprintf(file, p2DColinStr, RTCHour); fprintf(file, p2DColinStr, RTCMin); fprintf(file, p2DCRLFStr, RTCSec, ';"'); fputc(';"',file); fprintf(file," Messwert1 in W/m² %s",csollwert); fputc(';"',file); fprintf(file," Messwert2 in W/m² %s",cistwert); fputc('\r',file); fputc('\n',file); fclose(file); } else { lcd_init(20); lcd_clear(); lcd_gotoxy(0,1); lcd_putsf("kein Medium!"); delay_ms(500); }
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.