hallo,
da ich gerade auch an so ner schaltung arbeite, habe ich das mit der speed mal getestet. meine ergebnisse habe ich als txt im anhang abgelegt.
gruss kolisson
Nein, daran liegt es leider nicht da diese Befehle schon außerhalb der "while" Hauptprogrammschleife zu finden sind.
Ich werde mal versuchen ob nicht vielleicht doch das Schreiben an sich bereits derart lange dauert und somit Werte sammeln bevor ich sie schreibe, nur fürchte ich fast, dass dadurch die Formatierung in Mitleidenschaft gezogen wird.
Mir ist gerade eingefallen, dass es wohl auch unsinig sein dürfte erst einmal die Daten zu sammeln und sie dann erst zu schreiben, schließlich muß er ja so oder so dann die gleiche Anzahl an Werten schreiben. Versuchen werde ich es wohl dennoch mal, das allerdings nur weil mir gerade nichts besseres einfällt.
Wonach das nun gar nicht gehen wollte, habe ich mal die Ausgabe an das TFT Display herausgeschmissen. Was jedoch noch nicht recht funktionieren wollte. Anschließend wurde ein waitms 10 eingefügt und damit geht es immerhin mit ca 72Hz. wird das waitms weggelassen will die Speicherung nicht mehr recht funktionieren. Nun stehe ich also vor der Problem, dass ich am Ende jedoch nicht nur diese 3 Spannungen abspeichern möchte, sondern insgesamt 9, notfalls könnte man die Zeitausgaben auch weglassen, schöner wäre es natürlich wenn sie da bleiben könnten und auf den Marker kann auch nicht verzichtet werden. Desweiteren brauche ich am Ende eine sample speed von 100 Hz. es sei also nun jeder herzlich eingeladen Ideen zu leifern wie ich das noch erreichen könnte, der code ist sicher hier und da noch recht uneffizient. Allerdings bin ich eigentlich auch der Meinung, dass es auch so wesentlich schneller gehen müßte, ich habe immerhin einen Atmega128 verbaut, so langsam ist dieser ja nicht gerade.
Hier mal mein Code, jedoch noch mit den Ausgaben an das TFT Display:
Code:$regfile = "m128def.dat" 'ATMega 8, anpassen bei anderen $crystal = 16000000 '8 MHz Takt, bei höherem Takt muss evtl. die Ausgabegeschwindigkeit der Daten an das 'Display gedrosselt werden. Also erst mit 8 MHz testen um zu sehen, dass alles klappt, $include "Config_MMC.BAS" $include "CONFIG_AVR-DOS.BAS" Dim Temp1 As Byte , Temp2 As Byte , Temp3 As Byte , Temp4 As Byte Dim Drehung As Byte Dim Fontbreite As Byte , Fonthoehe As Byte , Xpixel As Byte , Ypixel As Byte Dim R As Integer , X1 As Byte , X2 As Byte , Y1 As Byte , Y2 As Byte , E As Byte , F As Integer , G As Long , Zeichen As String * 1 Dim A As Byte , B As Byte , C As Integer , D As Integer , T1 As Byte , T2 As Byte Dim Befehl As Byte , Ausgabe As Byte Dim Pix As Byte , Gapx As Double , Gapy As Double , S As Byte Dim X As Byte , Y As Byte , H As Integer , M As Integer , Pixel As Integer , Schleife As Integer , Hx As Integer , Hy As Integer , Xinc As Integer , Yinc As Integer Dim Temp As Byte Dim Lcd_command As Byte , Lcd_data As Byte , Lcd_string As String * 22 , Fontsize As Byte , Lcd_fcolor As Byte , Lcd_bcolor As Byte Dim Lx1 As Byte , Ly1 As Byte , Lx2 As Byte , Ly2 As Byte , Color As Byte , Zeichenarray(6) As Byte '--------------------------------------------------------------------------------------------------------------------------------------------------- 'Übernahme der aktuellen Portbelegung in Variablen bzw. Konstanten. Durch Änderung der folgenden Zeilen kann dass Programm auf jede andere Anschlussbelegung geändert werden, 'wenn man das Display in einer anderen Konfiguration (z.B. einem eigenen Board) nutzt. Lcd_port Alias Portb 'Port B wird also hier im Programm mittels "LCD_Port" angesprochen. Ddrb = &B01100110 'Port B: alles display lines: output (1) Const Rs = 6 'also Port b.6 Const Cs = 5 'also Port b.5 Const Sdata = 2 'also Port b.2 Const Sclk = 1 'also Port b.1 '--------------------------------------------------------------------------------------------------------------------------------------------------- Const Kommando = 0 'Durch eine "0" wird dem Display mitgeteilt, dass nun ein Kommando folgt Const Parameter = 1 'Durch eine "1" wird dem Display mitgeteilt, dass nun ein Parameter folgt Const Blau = &B00000011 'Vordefinierte Konstanten für die Farbwerte machen das Programmiererleben leichter: Const Gelb = &B11111100 Const Rot = &B11100000 Const Gruen = &B00011100 Const Schwarz = &B00000000 Const Weiss = &B11111111 Const Hellgruen = &B00111110 Const Dunkelgruen = &B00010100 Const Dunkelrot = &B10100000 Const Dunkelblau = &B00000010 Const Hellblau = &B00011111 Const Orange = &B11111000 '---------------------------------------------------------------------------------------------------------------------------------------------------- '####---------------AD-Wandler--------------#####' Config Adc = Single , Prescaler = Auto , Reference = Internal ' Prescaler = Auto Start Adc Config Portf.0 = Input 'Portf.0-3 =Input Config Portf.1 = Input Config Portf.2 = Input '####--------------MMC-Karte--------------#####' Config Serialin = Buffered , Size = 20 Config Clock = Soft Enable Interrupts Config Date = Dmy , Separator = . Dim Btemp1 As Byte Dim Text As String * 10 , Placeholder As String * 5 Placeholder = ";" '####----------------Eingangs Variablen--------------#####' Dim Voutxw As Word Dim Voutx As Single Dim Voutxstr As String * 16 Dim Voutyw As Word Dim Vouty As Single Dim Voutystr As String * 16 Dim Voutzw As Word Dim Voutz As Single Dim Voutzstr As String * 16 '####---------------Switches Variablen----------------#####' Dim Marker As Single Dim Markerstr As String * 4 Config Pind.4 = Input 'Marker Portd.4 = 1 Config Pind.5 = Input 'RUN Portd.5 = 1 Config Pind.6 = Input 'Halt Portd.6 = 1 '####---------------Time Variablen----------------#####' Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1 On Timer1 Timer_irq 'schalte den Timer1 ein Const Timervorgabe = 3036 Enable Timer1 Enable Interrupts 'Timer1 soll schon von 34285 wegzählen Timer1 = Timervorgabe Dim Unittime As Long Unittime = 0 Dim Second As Single Dim Secondstr As String * 8 Second = 0 Dim Minute As Single Dim Minutestr As String * 8 Minute = 0 Dim Hour As Single Dim Hourstr As String * 8 Hour = 0 Dim Milliseconds As Single Dim Millisecondsstr As String * 8 Dim Referenzspannung As Word Referenzspannung = 3.85 '--------------------------------------------------------------------------------------------------------------------------------------------------- 'Hauptprogramm '--------------------------------------------------------------------------------------------------------------------------------------------------- Gosub Lcd_init Gosub Lcd_cls '---------------------------SD Anfang--------------------------------------------- If Gbdriveerror <> 0 Then Lcd_string = "Drive error" : Lx1 = 5 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss Gosub Lcd_print End If ' scratch byte Btemp1 = Initfilesystem(1) If Btemp1 > 0 Then Lcd_string = "File System Error" : Lx1 = 4 : Ly1 = 51 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = Str(btemp1) : Lx1 = 5 : Ly1 = 52 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss Gosub Lcd_print Else 'Else des Hauptprogramms Lcd_string = "Card setup OK " : Lx1 = 5 : Ly1 = 51 : Fontsize = 1 : Lcd_fcolor = Gruen : Lcd_bcolor = Weiss Gosub Lcd_print Wait 5 Gosub Lcd_cls '---------------------------Anfang des Auswahlmenüs--------------------------------------------- Anfang: Lcd_string = "Run" : Lx1 = 2 : Ly1 = 56 : Fontsize = 1 : Lcd_fcolor = Schwarz : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = "Stop" : Lx1 = 18 : Ly1 = 56 : Fontsize = 1 : Lcd_fcolor = Schwarz : Lcd_bcolor = Weiss Gosub Lcd_print If Pind.5 = 0 Then Lcd_string = "Voutx " : Lx1 = 2 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Dunkelgruen : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = "Vouty " : Lx1 = 2 : Ly1 = 51 : Fontsize = 1 : Lcd_fcolor = Dunkelgruen : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = "Voutz " : Lx1 = 2 : Ly1 = 52 : Fontsize = 1 : Lcd_fcolor = Dunkelgruen : Lcd_bcolor = Weiss Gosub Lcd_print Open "DATA.txt" For Append As #10 '---------------------------Start / Stop Bedingung Aufnahme--------------------------------------------- Unittime = 0 Second = 0 Minute = 0 Hour = 0 While Pind.6 <> 0 Marker = 0 Incr Unittime Voutxw = Getadc(0) Voutyw = Getadc(1) Voutzw = Getadc(2) Voutx = Voutxw / 1024 Vouty = Voutyw / 1024 Voutz = Voutzw / 1024 Voutx = Voutx * Referenzspannung Vouty = Vouty * Referenzspannung Voutz = Voutz * Referenzspannung Voutxstr = Fusing(voutx , "#.####") Voutystr = Fusing(vouty , "#.####") Voutzstr = Fusing(voutz , "#.####") Lcd_string = Voutxstr : Lx1 = 8 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = Voutystr : Lx1 = 8 : Ly1 = 51 : Fontsize = 1 : Lcd_fcolor = Blau : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = Voutzstr : Lx1 = 8 : Ly1 = 52 : Fontsize = 1 : Lcd_fcolor = Dunkelgruen : Lcd_bcolor = Weiss Gosub Lcd_print Millisecondsstr = Fusing(milliseconds , "#######.#") Lcd_string = Millisecondsstr : Lx1 = 8 : Ly1 = 53 : Fontsize = 1 : Lcd_fcolor = Blau : Lcd_bcolor = Weiss Gosub Lcd_print Secondstr = Fusing(second , "#######.#") Lcd_string = Secondstr : Lx1 = 8 : Ly1 = 54 : Fontsize = 1 : Lcd_fcolor = Blau : Lcd_bcolor = Weiss Gosub Lcd_print '####----Marker----#####' If Pind.4 = 0 Then Marker = 1 End If Markerstr = Fusing(marker , "#.#") Print #10 , Voutxstr ; " " ; Voutystr ; " " ; Voutzstr ; " "; Print #10 , Hour ; ":" ; Minute ; ":" ; Second ; " "; Print #10 , Markerstr ; Print #10 , " " ; Print #10 , Unittime ; Print #10 , " " Wend Close #10 Gosub Lcd_cls Goto Anfang Else Goto Anfang End If End If ' End Timer_irq: Timer1 = Timervorgabe Incr Second If Second = 60 Then Incr Minute Second = 0 End If If Minute = 60 Then Incr Hour Minute = 0 End If Return
hallo,
da ich gerade auch an so ner schaltung arbeite, habe ich das mit der speed mal getestet. meine ergebnisse habe ich als txt im anhang abgelegt.
gruss kolisson
Vielen Dank, mittlerweile gebe ich 10 string Werte aus , alle mit einem Platzhalter unterteilt und erreiche eine maximale Geschwindigkeit von ca 50Hz. Rechne ich das mal herunter auf einen Wert würde ich also ca 500Hz erreichen können, wenn ich nur einen ausgeben würde. Das ist jedoch immernoch sehr viel langsamer als deine Routine. Nur sehe ich nicht was ich großartig anders gemacht habe. Ich poste nochmal meinen aktuellen Code.
Code:$regfile = "m128def.dat" 'ATMega 8, anpassen bei anderen $crystal = 16000000 '8 MHz Takt, bei höherem Takt muss evtl. die Ausgabegeschwindigkeit der Daten an das 'Display gedrosselt werden. Also erst mit 8 MHz testen um zu sehen, dass alles klappt, $include "Config_MMC.BAS" $include "CONFIG_AVR-DOS.BAS" Dim Temp1 As Byte , Temp2 As Byte , Temp3 As Byte , Temp4 As Byte Dim Drehung As Byte Dim Fontbreite As Byte , Fonthoehe As Byte , Xpixel As Byte , Ypixel As Byte Dim R As Integer , X1 As Byte , X2 As Byte , Y1 As Byte , Y2 As Byte , E As Byte , F As Integer , G As Long , Zeichen As String * 1 Dim A As Byte , B As Byte , C As Integer , D As Integer , T1 As Byte , T2 As Byte Dim Befehl As Byte , Ausgabe As Byte Dim Pix As Byte , Gapx As Double , Gapy As Double , S As Byte Dim X As Byte , Y As Byte , H As Integer , M As Integer , Pixel As Integer , Schleife As Integer , Hx As Integer , Hy As Integer , Xinc As Integer , Yinc As Integer Dim Temp As Byte Dim Lcd_command As Byte , Lcd_data As Byte , Lcd_string As String * 22 , Fontsize As Byte , Lcd_fcolor As Byte , Lcd_bcolor As Byte Dim Lx1 As Byte , Ly1 As Byte , Lx2 As Byte , Ly2 As Byte , Color As Byte , Zeichenarray(6) As Byte '--------------------------------------------------------------------------------------------------------------------------------------------------- 'Übernahme der aktuellen Portbelegung in Variablen bzw. Konstanten. Durch Änderung der folgenden Zeilen kann dass Programm auf jede andere Anschlussbelegung geändert werden, 'wenn man das Display in einer anderen Konfiguration (z.B. einem eigenen Board) nutzt. Lcd_port Alias Portb 'Port B wird also hier im Programm mittels "LCD_Port" angesprochen. Ddrb = &B01100110 'Port B: alles display lines: output (1) Const Rs = 6 'also Port b.6 Const Cs = 5 'also Port b.5 Const Sdata = 2 'also Port b.2 Const Sclk = 1 'also Port b.1 '--------------------------------------------------------------------------------------------------------------------------------------------------- Const Kommando = 0 'Durch eine "0" wird dem Display mitgeteilt, dass nun ein Kommando folgt Const Parameter = 1 'Durch eine "1" wird dem Display mitgeteilt, dass nun ein Parameter folgt Const Blau = &B00000011 'Vordefinierte Konstanten für die Farbwerte machen das Programmiererleben leichter: Const Gelb = &B11111100 Const Rot = &B11100000 Const Gruen = &B00011100 Const Schwarz = &B00000000 Const Weiss = &B11111111 Const Hellgruen = &B00111110 Const Dunkelgruen = &B00010100 Const Dunkelrot = &B10100000 Const Dunkelblau = &B00000010 Const Hellblau = &B00011111 Const Orange = &B11111000 '---------------------------------------------------------------------------------------------------------------------------------------------------- '####---------------AD-Wandler--------------#####' Config Adc = Single , Prescaler = Auto , Reference = Internal ' Prescaler = Auto Start Adc Config Portf.0 = Input 'Portf.0-3 =Input Config Portf.1 = Input Config Portf.2 = Input '####--------------MMC-Karte--------------#####' Config Serialin = Buffered , Size = 20 Config Clock = Soft Enable Interrupts Config Date = Dmy , Separator = . Dim Btemp1 As Byte Dim Text As String * 10 , Placeholder As String * 5 Placeholder = ";" '####----------------Eingangs Variablen--------------#####' Dim Vout1xw As Word Dim Vout1x As Single Dim Vout1xstr As String * 4 Dim Vout1yw As Word Dim Vout1y As Single Dim Vout1ystr As String * 4 Dim Vout1zw As Word Dim Vout1z As Single Dim Vout1zstr As String * 4 Dim Vout2xw As Word Dim Vout2x As Single Dim Vout2xstr As String * 4 Dim Vout2yw As Word Dim Vout2y As Single Dim Vout2ystr As String * 4 Dim Vout2zw As Word Dim Vout2z As Single Dim Vout2zstr As String * 4 Dim J As Byte '####---------------Switches Variablen----------------#####' Dim Marker As Single Dim Markerstr As String * 1 Config Pind.4 = Input 'Marker Portd.4 = 1 Config Pind.5 = Input 'RUN Portd.5 = 1 Config Pind.6 = Input 'Halt Portd.6 = 1 '####---------------Time Variablen----------------#####' Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1 On Timer1 Timer_irq 'schalte den Timer1 ein Const Timervorgabe = 3036 Enable Timer1 Enable Interrupts 'Timer1 soll schon von 34285 wegzählen Timer1 = Timervorgabe Dim Second As Single Dim Secondstr As String * 4 Second = 0 Dim Minute As Single Dim Minutestr As String * 4 Minute = 0 Dim Hour As Single Dim Hourstr As String * 4 Hour = 0 Dim Referenzspannung As Word Referenzspannung = 3.85 '--------------------------------------------------------------------------------------------------------------------------------------------------- 'Hauptprogramm '--------------------------------------------------------------------------------------------------------------------------------------------------- Gosub Lcd_init Gosub Lcd_cls '---------------------------SD Anfang--------------------------------------------- If Gbdriveerror <> 0 Then Lcd_string = "Drive error" : Lx1 = 5 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss Gosub Lcd_print End If ' scratch byte Btemp1 = Initfilesystem(1) If Btemp1 > 0 Then Lcd_string = "File System Error" : Lx1 = 4 : Ly1 = 51 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = Str(btemp1) : Lx1 = 5 : Ly1 = 52 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss Gosub Lcd_print Else 'Else des Hauptprogramms Lcd_string = "Card setup OK " : Lx1 = 5 : Ly1 = 51 : Fontsize = 1 : Lcd_fcolor = Gruen : Lcd_bcolor = Weiss Gosub Lcd_print Wait 3 Gosub Lcd_cls '---------------------------Anfang des Auswahlmenüs--------------------------------------------- Anfang: Lcd_string = "Run" : Lx1 = 2 : Ly1 = 56 : Fontsize = 1 : Lcd_fcolor = Schwarz : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = "Stop" : Lx1 = 18 : Ly1 = 56 : Fontsize = 1 : Lcd_fcolor = Schwarz : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = "RAC" : Lx1 = 5 : Ly1 = 49 : Fontsize = 1 : Lcd_fcolor = Hellgruen : Lcd_bcolor = Weiss Gosub Lcd_print Lcd_string = "CELLEROMETER" : Lx1 = 8 : Ly1 = 49 : Fontsize = 1 : Lcd_fcolor = Dunkelgruen : Lcd_bcolor = Weiss Gosub Lcd_print If Pind.5 = 0 Then Lcd_string = "Running " : Lx1 = 3 : Ly1 = 52 : Fontsize = 2 : Lcd_fcolor = Blau : Lcd_bcolor = Weiss Gosub Lcd_print Open "DATA.txt" For Append As #10 '---------------------------Start / Stop Bedingung Aufnahme--------------------------------------------- Second = 0 Minute = 0 Hour = 0 While Pind.6 <> 0 Marker = 0 '------------------------Über 10 Werte mitteln------------------------------------ Vout1xw = 0 Vout1yw = 0 Vout1zw = 0 Vout2xw = 0 Vout2yw = 0 Vout2zw = 0 For J = 1 To 10 Vout1xw = Vout1xw + Getadc(0) Vout1yw = Vout1yw + Getadc(1) Vout1zw = Vout1zw + Getadc(2) Vout2xw = Vout2xw + Getadc(3) Vout2yw = Vout2yw + Getadc(4) Vout2zw = Vout2zw + Getadc(5) Next Vout1xw = Vout1xw / 10 Vout1yw = Vout1yw / 10 Vout1zw = Vout1zw / 10 Vout2xw = Vout2xw / 10 Vout2yw = Vout2yw / 10 Vout2zw = Vout2zw / 10 '--------------Umrechnung in Spannung und Umwandlung in String------------------ Vout1x = Vout1xw / 1024 Vout1y = Vout1yw / 1024 Vout1z = Vout1zw / 1024 Vout1x = Vout1x * Referenzspannung Vout1y = Vout1y * Referenzspannung Vout1z = Vout1z * Referenzspannung Vout1xstr = Fusing(vout1x , "#.####") Vout1ystr = Fusing(vout1y , "#.####") Vout1zstr = Fusing(vout1z , "#.####") Vout2x = Vout2xw / 1024 Vout2y = Vout2yw / 1024 Vout2z = Vout2zw / 1024 Vout2x = Vout2x * Referenzspannung Vout2y = Vout2y * Referenzspannung Vout2z = Vout2z * Referenzspannung Vout2xstr = Fusing(vout2x , "#.####") Vout2ystr = Fusing(vout2y , "#.####") Vout2zstr = Fusing(vout2z , "#.####") '####----Marker----#####' If Pind.4 = 0 Then Marker = 1 End If Markerstr = Fusing(marker , "#.#") Secondstr = Fusing(second , "#.#") Print #10 , Vout1xstr ; " " ; Vout1ystr ; " " ; Vout1zstr ; " " ; Vout2xstr ; " " ; Vout2ystr ; " " ; Vout2zstr ; " " ; Hour ; ":" ; Minute ; ":" ; Secondstr ; " " ; Markerstr ; " " Waitms 1 'hier stelle ich ein wie lange das Programm noch warten muß damit ' das Schreiben genügend Zeit hat also waitms + Programmdurchlaufzeit der While Schleife Wend Close #10 Gosub Lcd_cls Goto Anfang Else Lcd_string = "Stop" : Lx1 = 4 : Ly1 = 52 : Fontsize = 2 : Lcd_fcolor = Blau : Lcd_bcolor = Weiss Gosub Lcd_print Goto Anfang End If End If ' End Timer_irq: Timer1 = Timervorgabe Incr Second If Second = 60 Then Incr Minute Second = 0 End If If Minute = 60 Then Incr Hour Minute = 0 End If Return '--------------------------------------------------------------------------------------------------------------------------------------------------- ' Steuer- und Ausgaberoutinen für das Display
nun ja ... du machst sehr viele sachen in der hauptschleife. das muss natürlich erstmal abgearbeitet werden.
eine gute zeitersparnis könntest du wohl erzielen, wenn du auf die fliesskommageschichten verzichtest und nur die word-variablen vom adc speicherst.
es spricht ja nix dagegen, diese dann später bei der auswertung von der sd-karte zu lesen und dann deinen faktor einzurechnen.
ein weiterer nachteil deiner schaltung ist natürlich der softclock-int . der will ja durch den int auch ständig bedient werden. mein ansatz ist ja eher der, das ich uhren-ic autonom laufen lasse, un wenn ich daten speichern will, frage ich dieses ab und speichere den wert mit den daten. da muss der prozessor selber aber sonst nix für tun. meine zeitmarke ist halt einfach da.
es gibt da übrigens auch noch das "secofday" ... bietet sich evt. als zeitmarke an.
dann haste noch die displaysachen in der hauptschleife. meist ist es ja bei displays so, dass man irgeneinen pin abfragt, ob das display neue daten annehmen kann. (polling). das heisst natürlich, dass dein programm stehen bleibt, bis das display wieder bereit ist.
also nimm ne hardware-uhr .... die haben oft einen 1hz ausgang ... damit legst du einen interrupt .... der holt die adc-daten (als word) und sonst nix.
nach 10 mal daten holen, wird der mittelwert berechnet und das ganze mit zeitstempel auf die karte geschrieben.
den display ready ausgang legst du auch auf nen int ... allerdings mit ner kleineren priorität. während zeitkritischer sachen ... wie messwerterfassung, sperrst du dann den display int.
alles was das disp anzeigen soll berechnest du im vorraus (also einen bildschirm voll) und speicherst das in einem array als buffer. wenn dann prozessorzeit verfügbar ist machst du ein display-update... (vielleicht jede 11te sekunde oder so.
das also mal als grobe idee... wie gesagt .. ich bin auch noch dabei... und somit zum teil einfach nur theoretisch.
gruss kolisson
p.s. : was soll den das "Config Serialin = Buffered , Size = 20" bewirken ?
ist doch für den comport ! und dann noch als softwareemulation, wenn ich nicht irre.
ich frag mich gerade, ob ganti seine beine in die hand genommen hat und geflüchtet ist...
wo bleibts das feedback .. mein lieber ?
gruss kolisson
Das Problem mit meiner SD-Karte lag bei zwei Dingen.
Zum einen sollte man sicherstellen, dass das File auch wirklich geschlossen wird, bevor man die Karte entnimmt/andere Files generiert werden und zum anderen wirkt eben eine Vergößerung der stacks manchmal Wunder. Somit für mich ein kleiner Erfolg der Woche.
Der bestellte 644 wird nun ein bisschen in der Kiste warten dürfen ..
@kolisson
das open/close war nicht in jedem Zyklus.
Was macht deine Lösung mit dem "Standalone-Logger"?
gruss,
wassermann
@wassermann
tja .. was macht mein logger ? ich hatte ja schon zu gantenbein einiges geschrieben.
zuletzt hatte ich, nachdem die speicherung perfekt lief eine routine zur ansteuerung der pcf8583 echtzeituhr geschrieben, die direkt auf bascom-routinen für time und date aufsetzt. ich war eigentlich ziemlich sicher, den artikel dazu veröffentlicht zu haben, konnte ihn aber jetzt absolut nicht mehr finden.
danach war ich soweit happy.
da zu meinem gesamtprojekt noch die steuerung der ladung und entladung von mehreren 12 volt batterien über ladegeräte, solarpanels und windrad gehört, bin ich insofern mit der entwicklung des gesamtprojektes noch nicht soviel weiter gekommen.
zwischendurch bestand dann die dringende notwendigkeit unsere ph-messsonde mal wieder zu benutzen. bei der grundlagenforschung dazu, habe ich dann mal einen recht guten "Instrumentation-amplifier" aus einzelnen opamps zusammengebaut. (eingangswiderstand = mehrere teraohm). irgendwie bleibt man bei sowas dann hängen, weil es so interessant ist.
in ansätzen war bein ph-messverstärker dann gleich ein EKG-gerät. vielleicht gehts bald an die hirnströme, die dann mit der compimaus verbunden werden. mal sehen.
nun ja.. etwas abgeschweift... aber so ist es eben.
unser gantenbein ist ja offenbar verschwunden... das find ich in sofern schade, da ich immer gerne wüsste, ob es hilfreich war, was man so beitragen kann.
soweit dann..
gruss kolisson
Dim Abfilehandles(c_filehandlessize) As Byte ....(zuwenig sram)
meine fehlermeldung mit avr-dos und Bascom mit einem atmega32.
....ich benutze den ATMega32 mit AVR-DOS und einer 1GB-SD-Karte ... und es funktioniert auch ganz gut...
warum läuft der 32ziger bei dir. was hast du in der avrdos geändert .
mfg
habe den dir-buffer auf 561 byte gestellt.
habe die karte in fat16 formatiert und er liest mit der test-dos.bas die daten der karte richtig ein. zumindest bin ich der meinung.
habe diese änderung gemacht :
Handling of FAT-Buffer in SRAM:
' 0 = FAT- and DIR-Buffer is handled in one SRAM buffer with 561 bytes
' 1 = FAT- and DIR-Buffer is handled in separate SRAM buffers with 1078 bytes
' Parameter 1 increased speed of file-handling
Const Csepfathandle = 0 ' [default = 1]
wie kann ich jetzt daten/dateien anlegen.
wenn ich die interpreter.bas von Bascom lage, meckert er das der 32ziger zu wenig sram hat.
muss also doch einen 644 kaufen?
oder hat hier schon jemand daten drauf bekommen als datei (atmega32)?
mfg
Lesezeichen