- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Fragen zu AVR Dos und schreiben auf SD Card und Zwischenspei

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.03.2007
    Ort
    Titisee - Neustadt
    Alter
    45
    Beiträge
    289

    Fragen zu AVR Dos und schreiben auf SD Card und Zwischenspei

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    habe vor mir das zuzulegen um die Messergebisse auf einer SD oder Platte zu speichern.
    Nun die Fragen:
    Muß ich das bei mcselec kaufen wie das Bascom??
    Ich will ja die KArte nicht gleich ins Nirvana schicken weil ich die zu oft beschreiben habe, kann ich das so machen das di enur einmal am Tag auf die Card geschrieben werden. Also muß die ja Zwischenlagern. Wie mach ich das Eprom oder anders??
    KAnn ich die Dateien so Speichern das ich sie mit Exce am PC verarbeiten kann?
    Danke
    MfG & THX
    Lordcyber
    Alias Michael

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo,
    du hast zwei Möglichkeiten, auf der Karte abzuspeichern, einmal mit AVR-DOS oder mit DriveWriteSektor(). Extra kaufen musst du da nichts.
    Bei AVR-DOS kannst du dann Files erzeugen, öffnen, überschreiben, hinten anhängen usw. Du brauchst wohl mindestens einen Mega32 dafür.
    Mit DriveWriteSektor() kannst du einen Block von 512 Byte auf einen beliebigen Sektor der Karte schreiben. Mit DriveReadSektor() kannst einen Block einlesen.
    Ich habe mal ein kleines Progamm angehängt, was einfach die ersten 1000 Sektoren einliest und ausgibt. Größe ist 1470 Byte.

    Code:
    $regfile = "M128def.dat"
    $crystal = 16000000
    
    $baud1 = 115200
    Open "Com2:" As Binary As #1
    Enable Interrupts
    
    Dim Mmc_error As Byte
    Dim In_ptr As Word                                          ' Address-Pointer for read
    Dim In_sect As Long
    Dim In_buffer As String * 512
    Print #1 , "Wait for Drive"
    '$include "Config_MMC.bas"
             Const Cmmc_soft = 1
    
             #if Cmmc_soft = 0
    
             ' --------- Start of Section for HW-SPI ----------------------------------------
    
                ' define Chip-Select Pin
                Config Pinb.6 = Output                                   ' define here Pin for CS of MMC/SD Card
                Mmc_cs Alias Portb.6
                Set Mmc_cs
    
                ' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
                ' If an other Pin than SS is used for MMC_SS, SS must be set to OUTPUT and high for proper work of SPI
                ' otherwise AVR starts SPI-SLAVE if SS-Pin is INPUT and goes to LOW
                'Config Pinb.6 = Output                                   ' define here Pin of SPI SS
                'Spi_ss Alias Portb.6
                'Set Spi_ss                                               ' Set SPI-SS to Output and High por Proper work of
                                                                         ' SPI as Master
    
                ' HW-SPI is configured to highest Speed
                Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
             '   Spsr = 1                                       ' Double speed on ATMega128
                Spiinit                                                  ' Init SPI
    
             ' --------- End of Section for HW-SPI ------------------------------------------
    
             #else                                                       ' Config here SPI pins, if not using HW SPI
    
             ' --------- Start of Section for Soft-SPI --------------------------------------
    
                ' Chip Select Pin  => Pin 1 of MMC/SD
                Config Pinb.0 = Output
                Mmc_cs Alias Portb.0
                Set Mmc_cs
    
                ' MOSI - Pin  => Pin 2 of MMC/SD
                Config Pinb.4 = Output
                Set Pinb.4
                Mmc_portmosi Alias Portb
                Bmmc_mosi Alias 4
    
                ' MISO - Pin  => Pin 7 of MMC/SD
                Config Pinb.3 = Input
                Mmc_portmiso Alias Pinb
                Bmmc_miso Alias 3
    
                ' SCK - Pin  => Pin 5 of MMC/SD
                Config Pinb.7 = Output
                Set Pinb.7
                Mmc_portsck Alias Portb
                Bmmc_sck Alias 7
    
             ' --------- End of Section for Soft-SPI ----------------------------------------
    
             #endif
    
             ' ========== End of user definable range =======================================
    
    
             ' Error
             Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command
             Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command
             Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command
             Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command
             Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read
             Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write
             Const Cperrdrive = 231
             Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet
    
             Waitms 1                                                    ' Wait some time before initialising MMC/SD
             Dim Gbdriveerror As Byte                                    ' General Driver Error register
             Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
             Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
             Dim Gbdrivedebug As Byte
             $lib "MMC.LIB"                                              ' link driver library
             $external _mmc
    
    'Hier werden als Test die ersten 1000 Sektoren der Karte eingelesen und auf den UART ausgegeben.
    In_ptr = Varptr(in_buffer)
    If Gbdriveerror = 0 Then
       Mmc_error = Driveinit()
       If Mmc_error = 0 Then
          Print #1 , "Driveinit Ok. "
          For In_sect = 0 To 1000
             Mmc_error = Drivereadsector(in_ptr , In_sect)
             If Mmc_error = 0 Then
                Print #1 , "ReadSector(" ; In_sect ; ") ok."    'Zum Inhalt drucken, Kommentare entfernen !!!!!!!!!!
                Print #1 , In_buffer                            'Dann wird es aber langsamer, 115200 baud beim übertragen
             Else
                Print #1 , "Error during ReadSector(" ; In_sect ; ") : " ; Mmc_error
             End If
          Next In_sect
       Else
          Print #1 , "Error during Driveinit(): " ; Mmc_error
       End If
    End If
    
    End
    Damit du in Windows die Daten einlesen kannst, musst du vorher einen möglichst großen File auf die Karte schreiben. Dann suchst du dir den ersten Sektor von diesem File und von da ab schreibst du.

    Damit es in Excel leicht wird, solltest du ein Trennzeichen zwischen deine Daten einfügen, z.B. ein Komma. Dann kannst du z.B. über "Externe Daten importieren" diese Werte in bestimmte Spalten einstellen.

    Zwischenlagern im EEprom kannst du vergessen, da gelten die gleichen Einschränkungen wie auf der Karte.

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.03.2007
    Ort
    Titisee - Neustadt
    Alter
    45
    Beiträge
    289
    Hallo
    Ich meinte die ganzen Messwerte Speichern und nur Täglich schreiben.
    Muß mir das mal ansehen wie ich das realisiere.
    MfG & THX
    Lordcyber
    Alias Michael

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von Lordcyber
    Ich meinte die ganzen Messwerte Speichern und nur Täglich schreiben.
    Wie viele Werte von welcher Art willst du denn pro Tag speichern?
    Und warum nur täglich speichern? Soooo langsam ist eine SD Karte nun auch wieder nicht.

    Gruß

    Rolf

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.03.2007
    Ort
    Titisee - Neustadt
    Alter
    45
    Beiträge
    289
    Hallo,
    Daten sind:
    2X Temparatur DS1631 alle 5 min mit Zeit
    Leitwert alle 5 min
    Zeit der Nachfüllung
    Menge der NAchfüllungen
    Ph Wert alle 5 min.

    Will ja nicht das der nur mit dem Schreiben auf die Karte beschäftigt ist.
    Auserdem will ich die Zyklen der Karte nicht überstrapazieren.
    MfG & THX
    Lordcyber
    Alias Michael

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo,
    wenn man mal annimmt, dass du etwa 10.000 mal auf den gleichen Sektor schreiben kannst, bevor er hinüber ist, sehe ich nicht, wie du die Karte überstrapazieren könntest. Das was du speichern willst, passt locker in einen Sektor. Alle 5 Minuten heißt knapp 300 Sektoren pro Tag, also etwa 10.000 Sektoren pro Jahr.
    Eine 32MB Karte wäre also erst in 0,6 Jahren voll, dann würdest du wieder von vorne anfangen. Und nach 6000 Jahren wären die garantierten 10.000 Schreibzyklen erreicht. Ich bin ziemlich sicher, dass dies nicht der Grund für den Ausfall deines Systems sein wird.
    Du musst halt nur aufpassen, dass du durch einen Programmfehler nicht permanent den gleichen Sektor womöglich noch jede Sekunde beschreibst.
    Fragst du die Werte nur alle 5 Minuten ab oder hast du die schon gemittelt?

    Gruß

    Rolf

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.03.2007
    Ort
    Titisee - Neustadt
    Alter
    45
    Beiträge
    289
    Abgefragt werden die Messwerte jede Sekunde.
    Also ANgezeigt. Aber geloggt werden sollen nur alle 5min das reicht im Normalfall.
    Sollen eben nur dann noch zusatzsachen wie Wenn nachfüllung anläuft usw mitgeloggt werden.
    Ups total vergessen Stromverbrauch kommt auch drauf.
    Habe dafür eien Stromzähler mit SO ausgang.
    MfG & THX
    Lordcyber
    Alias Michael

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Bei mir loggt die Karte die Daten meiner Heizung, also Temperaturen, Öldurchsatz und die Zustände der Ausgänge für Brenner und Pumpen. Zusätzlich werden noch alle Alarmmeldungen gespeichert.
    Ich frage die Sensoren auch jede Sekunde ab, speichere aber nur einen Wert jede Minute. Nicht gemittelt. Mittelwerte über verschiedene Zeiträume füge ich dann aus diesen Werten hinzu. Alle 8 Minuten schreibe ich die gesammelten Daten auf die Karte. Das geht für einen Sektor so schnell, dass es innerhalb der normalen Sekundenschleife ohne Verzögerung stattfindet. Resettet der µC während dieser Zeit, sind die Messwerte seit der letzten Speicherung (also max. 8 Minuten) verloren.
    Die Alarmmeldungen werden sofort bei Auftreten gespeichert, weil ich die auf keinen Fall verlieren möchte.

    Gruß

    Rolf

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.03.2007
    Ort
    Titisee - Neustadt
    Alter
    45
    Beiträge
    289
    Hallo,
    die Idee ist klasse. Auch das mit dem Schreiben. Und den Zeiten.
    Ich will sogar soweit gehen das die Daten dan per SMS versendet werden bei Alarm. Habe ein altes Siemens HAndy wo eien Prepaid Karte rein kommt.
    MfG & THX
    Lordcyber
    Alias Michael

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2004
    Beiträge
    17
    Hallo User,
    werde mal diesen alten Tread wieder vorkramen. Hab ne SD Karte an einen MEGA32 angeschlossen. Das Programm läuft (lesen und schreiben). Ich erstelle auf der Karte am Rechner eine TXT Datei. Den Inhalt kann ich auslesen. Ich kann auch meine eigenen Daten auf der Karte ablegen.

    Nun mein Problem: Die geschriebenen Daten kann ich am PC nicht sichtbar machen. Der Mikrocontroller kann es, dadurch weis ich dass sie da sind. Woran liegt das? Ist es möglich auf einer leeren FAT formatierten Karte eine Datei selbst ztu erzeugen? Hoffe dass mir jemand weiter helfen kann.

    Viele Grüsse TB1

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad