-         

Ergebnis 1 bis 8 von 8

Thema: SD-Karte mit AVR-DOS oder ohne??

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.02.2008
    Beiträge
    14

    SD-Karte mit AVR-DOS oder ohne??

    Anzeige

    Hallo,

    ich will mir einen kleinen Datenlogger bauen (2 Temperaturen) und die Daten dann auf dem PC weiterverarbeiten.

    Da dachte ich an einen AVR mit SD/MMC-Karte als Speichermedium.

    Da hab ich ja jetzt 2 Möglichkeiten.

    A) Einfach in definierte Speicherbereiche auf der Karte schreiben und dann auf dem PC schauen, wie ich die Daten wieder auslesen kann. Ein passendes Programm dazu hab ich noch nicht gefunden. Kennt ihr eins?

    B) Die SD-Karte mit FAT zu beschreiben (Stichwort AVR-DOS). Das ist dann zwar auf dem PC einfacher, aber dazu brauch ich einen "großen" AVR mit mindestens 2K RAM. Ich will nur DIL verbauen. Da hab ich dann nur den ATMEGA32, ATMEGA644(beide DIL40), oder den ATMEGA328P (DIL2 gefunden.
    Läuft AVR-DOS auch auf allen? Sonst liest man ja nur auf dem ATMEAG128 oder ATMEGA103. Aber den 128er gibts nich in DIL und den 103er hab ich bei Atmel gar nicht gefunden.

    Oder habt ihr noch ne andere Lösung, die ich jetzt nicht sehe?


    Mist, glaube falsches Forum. Kann mal jemand den Beitrag ins Bascom verschieben? Glaub da ist er besser aufgehoben

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    24.01.2006
    Ort
    Kirchdorf a. Inn
    Alter
    46
    Beiträge
    81
    Hallo brutzler,

    zu A) DriveWriteSector and DriveReadSector.
    zu B) Bei mir läufts auf nem ATMega32 mit ner 1GB-SD-Karte. Die Anwendung war ähnlich. 1-wire Sensoren und mitloggen.

    Es gibt dazu auch bereits ein paar Threads. Schau mal nach MMC und Bascom.

    gruss,
    wassermann

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.02.2008
    Beiträge
    14
    Moin, danke für die Antwort

    zu A) DriveWriteSector and DriveReadSector.
    Ich meinte nicht die Basom-Befehle, sondern eine entsprechende Software auf dem PC?

    B)
    Also heisst das, das AVR-DOS auf jedem Mega läuft, der 2K SRAM hat? Oder gibts da noch andere Einschränkungen?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    24.01.2006
    Ort
    Kirchdorf a. Inn
    Alter
    46
    Beiträge
    81
    N'abend,

    mit Variante A hab ich's mir per Abruf immer über die serielle Schnittstelle auf den PC geschickt und dort wieder zusammengestellt. Nach einem Programm hab ich nie gesucht, da es ja auch B gibt.
    Variante B ist halt geschickter. Karte rein, mitschreiben, Karte raus, Daten auslesen, Karte rein, ...
    Ich hab nur ATMega8 und 32. Wenn's mit einem anderen auch geht, relativiert sich schnell der Zeitvorteil, wenn man immer das gleiche (Standard)-Board nehmen kann. Deshalb bleib ich eben beim 32.

    gruss,
    wassermann

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    34
    Beiträge
    979
    Hallo!

    Also ich hab mal testweise ein GPS-Loger gebaut, muss den mal fertigstellen...
    Da habe ich auch nen M32 (RN-Control) verwendet und über AVR-Dos die GPS Koordinaten auf die Karte in ein file geschrieben welches dann am PC mit Google Earth geöffnet werden konnte.
    funktionierte soweit eigentlich ganz gut... die längste fahrt war mal so ca 30min und die Datei konnte ohne probleme vom PC gelesen werden...

    muss mal schauen irgendwo hab ich hier mal das angepasste AVR-Dos veröffentlicht...

    gruss bluesmash

    --Edit--
    hier der link:
    http://www.roboternetz.de/phpBB2/zei...22500&start=44
    etwa in der mitte der 3. Seite

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    17.12.2007
    Ort
    Oberpfalz
    Beiträge
    28
    Für die Variante A) gibt es hier weitere Tipps:
    http://staff.ltam.lu/feljc/electronics/electronics.htm

    Robert

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2006
    Beiträge
    26
    Also genauso habe ich es bis jetzt auch gemacht (Variante A).

    Dann in Delphi die folgende Prozedure genutzt.
    Ich lese direkt zwei Sektoren aus!!
    Code:
    Procedure sektorlesen(sektor:longint;var buf);
    var readbytes:longint;
        buffersize:cardinal;
        tt:file of byte;
        const bu = 1024;
    var    av:integer;
    begin
    DeviceHandle := CreateFile(pchar(sdlw), GENERIC_READ,
        FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
        FILE_FLAG_RANDOM_ACCESS, 0);
      //  midicon.JvEdit3.Text:=inttostr(getlasterror);
        FileSeek(DeviceHandle, (sektor*1024), 0);
        readbytes:=FileRead(DeviceHandle, Buf, bu);
     //   DeviceIoControl(DeviceHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,
     //   @DiskGeometry, sizeof(DiskGeometry), Dummy, nil)
         CloseHandle(DeviceHandle);
    
    
     end;
    Auch für das Suchen der SD Karte gibt es eine Funktion.

    Code:
      function sdsuchen:string;
    var a2,a3,a5:byte;
        laufwerk:pchar;
        b1,a4:longint;
        testext:string[10];
    
        const bu=1024;
    begin
    a2:=0;
    while testext<>'MIDICONSK' do
      begin
      seterrormode(SEM_FAILCRITICALERRORS);
      laufwerk:=pchar('\\.\PHYSICALDRIVE'+inttostr(a2));
       DeviceHandle := CreateFile(laufwerk, GENERIC_READ,
        FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
        FILE_FLAG_RANDOM_ACCESS, 0);
    
    
    
       FileSeek(DeviceHandle, 1024, 0);
       a4:=FileRead(DeviceHandle, buffer, bu);
       testext:='' ;
       a3:=getlasterror;
    
    
       if a3 <> 0 then
       begin
        showmessage('Keine MIDICON formatierte SD-Karte gefunden');
        exit;
       end;
     for a5:=1 to 9 do
       testext:=testext+buffer[748+a5];
       //showmessage('Alles ok');
    // midicon.JvEdit3.Text:=inttostr(a3)+'  '+inttostr(a2)+' '+inttostr(a4);
    // midicon.JvEdit4.Text:='::'+testext+'#'+buffer[700+a5];
    
       CloseHandle(DeviceHandle);
       inc(a2);
    
    
      end;
       midicon.Memo1.lines.add('SD-KARTE gefunden');
       midicon.Memo1.lines.add('SD-KARTE MIDICON FORMAT');
       midicon.Memo1.lines.add('Windows Kennung: '+laufwerk);
       result:=laufwerk;
    end;
    Die Karte habe ich per Bascom Formatiert und jedem meiner 1000 Datensätze (je 2 Sektoren a 512 Byte) den Text MIDICON in ein Feld geschrieben. So kann ich die Karte sicher an dem Text erkennen.

    Es gibt mit Sicherheit elegantere Lösungen, diese klappt jedoch.

    !!!!ACHTUNG, per WIN API im und am Laufwerk herumfummel kann relativ unangenehm werden. Also am besten einen alten Rechner nehmen udn wichtige Daten vorher Sichern. Zu Zeiten von 8086 und 80386 habe ich mir nicht nur einmal mit Interruptroutinen meine Platten gelöscht. Es muß nix passieren, aber es kann.!!


    Benutzung wie immer auf eigene Gefahr.

    Gruß,

    Stephan

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Da die Prozessoren sehr ähnlich sind, sollten die einzigen Vorraussetzungen für AVR DOS genügend Flash, 2 K RAM und eventuell eine SPI Schnittstelle sein. Ich würde mal schätzen das man bei 2 K RAM auch SPI und genügend Flash dazu kriegt.

    Es gibt verschiedene Versionen von AVR-DOS. Eventuell sogar eine die mit weniger RAM auskommt.
    Wenn man immer nur einen Datensatz draufschreiben will, könnte man auch erst die Daten nach Methode A) schreiben und dann nachträglich die FAT dazutun, die sieht dann ja immer fst gleich aus (bis auf die Länge der Datei).

Berechtigungen

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