Forum: Mikrocontroller und Digitale Elektronik Bascom Zeitrpoblem mit RS232 und SD Karte


von Michi (Gast)


Lesenswert?

Hallo,

mein Problem ist das open, print, flush und close mehr zeit brauchen
als ein neues Zeichen ankommt.

Wärend die Karte beschrieben wird kommen weitere Zeichen an,
die leider ignoriert werden.

Ich habe bereits Probiert das mit einem Interupt zu lösen,
das Problem ist das selbe.

Gibt es denoch eine Möglichkeit Daten auf die SD Karte zu schreiben
ohne das der Buffer voll wird?


Bascom, Atmega32, RS232 mit 9600 Baud.

Do
Akey = Waitkey()
Chrx = Chr(akey)

       If Len(buff) < Max_buf_len Then
            Buff = Buff + Chrx
       Else
            If Sdpresent = 1 Then
              Buff = Buff + Chrx
               Open Tfile For Append As #3
               Print #3 , Buff
               Flush #3
               Close #3
               Buff = ""
               Toggle Portc.7
            End If
      End If
    Loop


Vielen Dank

von Der M. (steinadler)


Lesenswert?

Bei welcher Taktfrequenz läuft denn dein µC?

von holger (Gast)


Lesenswert?

Nimm das Open mal nach oben aus der Schleife raus.
Flush und Close machst du hinter die Schleife.
Halte die Datei offen solange du schreibst.
Damit sollte es schon mal ein wenig besser werden.

Open Tfile For Append As #3

Do
Akey = Waitkey()
Chrx = Chr(akey)

       If Len(buff) < Max_buf_len Then
            Buff = Buff + Chrx
       Else
            If Sdpresent = 1 Then
              Buff = Buff + Chrx
               Print #3 , Buff
               Buff = ""
               Toggle Portc.7
            End If
      End If
    Loop

Flush #3
Close #3

von Michi (Gast)


Lesenswert?

Da habe ich aber das problem wann ich Flush ausführe.

Ich schreibe ja permanent über RS232 auf die SD Karte, wenn ich dann
die spannung weg nehme ohne einem flush/close verliere ich Daten.

Eventuell ein Timer der in gewissen abstaenden ein flush durchfuehrt 
aber auch da wieder das problem, wenn in diesem moment Daten ankommen 
stoert das die sache.

von willi (Gast)


Lesenswert?

>Ich schreibe ja permanent über RS232 auf die SD Karte, wenn ich dann
>die spannung weg nehme ohne einem flush/close verliere ich Daten.

dann erkenn doch das weg nehmen der spannung und führe dann flush/close 
aus. brown-out-detection und interrupt

von holger (Gast)


Lesenswert?

>Ich schreibe ja permanent über RS232 auf die SD Karte, wenn ich dann
>die spannung weg nehme ohne einem flush/close verliere ich Daten.

Genau das sollte man nicht machen. Also Spannung
einfach wegnehmen. Was du brauchst ist ein Taster mit
dem du die Karte gezielt runterfährst.

Lies da mal ein bißchen:
Beitrag "SD card: FAT Integrität und power-down / "elektrischem" Ausschalten?"

>Eventuell ein Timer der in gewissen abstaenden ein flush durchfuehrt
>aber auch da wieder das problem, wenn in diesem moment Daten ankommen
>stoert das die sache.

Wenn Flush zu langsam ist, dann wirst du dir wohl eine
andere Pufferstrategie einfallen lassen müssen.

von holger (Gast)


Lesenswert?

>dann erkenn doch das weg nehmen der spannung und führe dann flush/close
>aus. brown-out-detection und interrupt

Dann kannst du die Karte auch ohne die Spannung wegzunehmen
einfach rausziehen während geschrieben wird.
Interrupt ist hier völlig daneben.

von nasowas (Gast)


Lesenswert?

also ich gehe mal davon aus, daß das CLOSE+FLUSH länger dauert als der 
Abstand zwischen 2 empfangenen Zeichen. Dann ist die Frage, ob ein 
Interrupt den CLOSE / FLUSH-Befehl unterbrechen darf. Wenn nein, geht es 
nicht, wenn ja machst Du

im Hauptprogramm:

do
  if buffer_voll then ... 'close+flush!, buffer_voll=false
loop

in der UART-ISR

  'Zeichen in den Puffer
  buffer(index) = udr
  incr index

  'Signal and Hauptprogramm, falls Puffer voll
  if index > (buf_max) then
    buffer_voll=true
    index=1
  endif
return

Besser noch abwechselnd 2 Puffer, damit der eine in Ruhe geschrieben 
werden kann, während sich der andere füllt.

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
Noch kein Account? Hier anmelden.