mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MMC schreiben bleibt hängen


Autor: Harald Nonbert (avranfaenger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);

}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.