-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Daten auf RP6 Speichern...

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.12.2008
    Beiträge
    30

    Daten auf RP6 Speichern...

    Anzeige

    Ich habe mir ein Programm für den RP6 geschrieben...so dass er frei fährt... Jetzt wollte ich dass er während des fahrens alles Protokolliert und irgendwie abspeichert so dass ich es dann auf den Pc laden kann...
    Müsste man dann einen USB Stick anschließen, und wenn ja wie würde dies funktionieren ??

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Hallo,

    Du könntest das RP6 M32 erweiterungsmodul verwenden - dort sind 32KB (=32768 Bytes) EEPROM drauf - das reicht für einfache Datenaufzeichnungen mit geringer Abtastrate und evtl. etwas komprimiert.
    Alternativ kannst Du auch selbst I2C EEPROMs oder Flash an den I2C Erweiterungsbus des RP6 Mainboards anschließen.

    > USB Stick

    USB ist sehr komplex.
    Der RP6 hat keinen USB Host - da brauchst Du i.d.R. spezialhardware wie z.B. http://www.vinculum.com/prd_vdip1.html damit das funktioniert.


    MfG,
    SlyD

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    26.12.2008
    Beiträge
    30
    ok danke...kommt en bissle spät...aber wie speicher ich dass den dann auf dem rp6 an ? und wie lad ich des dann wieder runter auf den pc ?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    26.12.2008
    Beiträge
    30
    geht das forum jetzt unter oder warum anwortet mir niemand ...

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Hallo,

    s. RP6 M32 Anleitung bzw. den Quellcode der M32 Library - da sind Routinen um Daten im EEPROM abzulegen und auszulesen.
    Senden und empfangen geht genauso wie Text senden und empfangen.


    Da Text empfangen nicht gaaanz so offensichtlich ist, hier mal eine kleine hilfsfunktion aus dem RP6Selftest Programm die komplette eingabezeilen einlesen kann (hatte ich hier in diversen anderen Threads auch schon gepostet)

    Code:
    char receiveBuffer[UART_RECEIVE_BUFFER_SIZE+1];
    
    uint8_t getInputLine(void)
    {
      static uint8_t buffer_pos = 0;
      if(getBufferLength())
      {                          receiveBuffer[buffer_pos] = readChar();
         if(receiveBuffer[buffer_pos]=='\n')
         {
            receiveBuffer[buffer_pos]='\0';
            buffer_pos = 0;
            return 1;
         }
         else if(buffer_pos >= 32)
         {                                   receiveBuffer[32]='\0';           buffer_pos = 0;
            return 2;
         }
         buffer_pos++;
      }
      return 0;
    }

    Daten Senden kannst Du dann in etwa (nur der Ansatz!!!) so machen:

    Code:
    ....
    
    while(true) {
    
    ....
    
    if(getInputLine())
    {
         if(strcmp(receiveBuffer,"send_me_the_data")==0)
         {
               writeString("data:");
               for(  ... alle Elemente die zu senden sind ...  ) {
                  writeInteger(data[i],DEC);
                  writeChar(',');
               }
               writeString("END\n");
    .........
    
    }
    
    ...
    Text senden sollte aber eigentlich auch klar sein (s. RP6 Anleitung und Beispielprogramme - writeString, writeInteger usw.)

    Dann einfach "send_me_the_data\n" senden ( \n = end of line )
    Und dann kommen die Daten so an: data:1,2,3,4,5,...,END

    Beantwortet das Deine Frage?

    MfG,
    SlyD

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    26.12.2008
    Beiträge
    30
    ne ich meint z.B. das man ne Kamera an den RP6 anschließt, der dann bilder macht und die auf seinem speicher speichert... und man die dann am pc anschauen kann wenn man den rp6 anschließt...... und ich glaug nich das man nach dem verfahren die bilder auslesen kann...

    GRuß Robin

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Ja das musst Du auch dabeischreiben.
    Protokollieren heisst für mich nicht unbedingt Fotos schießen
    Du stellst Dir jetzt sicher große Farbbilder vor nehme ich an?

    Das geht zwar rudimentär mit dem Erweiterungsmodul, aber der EEPROM Speicher auf dem Erweiterungsmodul ist nicht für Bilddaten gedacht - die 32KByte reichen vielleicht für 5 JPEG Bilder bei sehr niedriger Auflösung und hoher Kompressionsrate.
    Müsstest also schon eine SD Karte über SPI anschließen.

    Als Kamera brauchst Du ein spezielles Kameramodul das bereits komprimierte Bilddaten liefern kann z.B.
    http://avr.auctionant.de/avr-ip-webcam/index.html

    Aber natürlich alles nur Standbilder.
    Problem ist das solche Kameras alle ein Baudratenquarz beim AVR brauchen um die Datenrate genau zu treffen.... also musst Du Dir hier selbst was basteln.

    Möglich ist das schon, aber für einen Anfänger alles andere als einfach.

    MfG,
    SlyD

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    26.12.2008
    Beiträge
    30
    nene schau was ich schreib ich hab gesagt dass des mit der kamera en beispiel is... ich will nur wissen wie ich auf dem speicher vom rp6 etwas abspeier und sie dann vom pc auslesen kann wie z.b. jpg, txt, ... oder sonstige dateien....
    eigendlich hatte ich vor dass der roboter frei fährt und alles mitprotokolliert, und das dann in eine txt datei schreibt, die ich wieder auf den pc laden kann.....

    Kurz:wie speicher und lese ich DATEIEN vom RP6 aus..und zwar so dass es dateien sind

    Gruß Robin

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    wie speicher und lese ich DATEIEN vom RP6 aus..und zwar so dass es dateien sind
    Gar nicht. Der Mega32 des RP6 kennt kein Dateisystem und keine Dateien. Er hat ja nicht mal ein Betriebssystem. Man kann zwar einfache Dateiformate wie .txt oder .bmp nachahmen, aber trotzdem scheitert alles an den zwei KB Speicher des Kontrollers. Eine echte (aber aufwändige) Lösung wäre z.b. eine SD-Speicherkarte.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    > aber trotzdem scheitert alles an den zwei KB Speicher des Kontrollers.

    Für ein Ereignisprotokoll braucht es so oder so externen Speicher. Da hilft das interne SRAM natürlich nicht viel.

    @Robin:
    Schau Dir mal die zahlreichen SD Karten Projekte für AVRs an. Dann sollte vielleicht klarer werden was hier gemeint ist.
    Aber wie gesagt - recht kompliziert.

    Einfacher geht es für das was Du vor hast (mit einem EEPROM als Speicher) so:
    Man könnte z.B. das XMODEM Protokoll (-->google xmodem avr) nachbilden und dann die Protokolldaten mit HTerm oder Hyperterminal empfangen - womit man es dann direkt in eine txt Datei schreiben kann.

    Oder besser selbst eine kleine PC Software schreiben die die Daten empfängt und eine Datei erzeugt. Dann reichen auch noch einfachere Protokolle wie das was ich weiter oben schon angedeutet habe: Der PC sendet nur ein "schick mir alle daten" an den Mikrocontroller, dieser schickt alle Daten an den PC und fertig


    D.h. die PC Software muss sich darum kümmern die Daten zu empfangen und in eine Datei (oder mehrere) zu schreiben oder irgendwas anderes damit zu machen.
    Das geht genau so wie ich es oben beschrieben habe. Musst nur das senden leicht anpassen so das es zu Deinen Daten passt.
    (Text, einzelne Bytes, Zahlenwerte, was auch immer...)

    Dem EEPROM ist es übrigens (genau wie der seriellen Schnittstelle) völlig egal wie die Daten darin abgespeichert werden.
    Du kannst z.B. im einfachsten Fall in den ersten zwei Bytes abspeichern wie lang das Protokoll ist und danach einfach bei jedem Ereignis eine neue Meldung abspeichern und den Zähler für die Protokolllänge inkrementieren (=auslesen, hochzählen und wieder abspeichern).

    Um Speicherplatz zu sparen würde ich nicht die Ereignisse in Form von Text abspeichern, sondern z.B. jeder Eintrag 3 Bytes lang:
    <Ereignistyp> <Daten> <Daten>
    Wenn also z.B. ein Ereignis "Kollision, Bumper Links gedrückt!" eintritt dann würden man abspeichern:
    401
    4 = Bumper
    0 = rechts ist nicht gedrückt
    1 = links gedrückt

    Entspechend noch andere Codes für andere Ereignisse definieren.
    Nur ein Beispiel - kann man natürlich noch viel eleganter lösen als das.

    Die Daten können dann entweder direkt vom AVR dekodiert werden
    ala if(daten[0]==4) writeString("Kollision, Bumper ") usw. oder von der PC Software.

    Hab jetzt keine Zeit das noch weiter auszuführen ich denke die grundsätzliche Idee sollte klar sein.

    MfG,
    SlyD

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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