- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Datenlogger mit MMC Karte

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2007
    Beiträge
    26
    Anzeige

    Powerstation Test
    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

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    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
    Angehängte Dateien Angehängte Dateien

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2007
    Beiträge
    26
    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

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    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.

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    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

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    24.01.2006
    Ort
    Kirchdorf a. Inn
    Alter
    54
    Beiträge
    81
    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

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    @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

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    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

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    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]

  10. #20
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    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

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test