-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Bascom und SQL-Datenbanken

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40

    Bascom und SQL-Datenbanken

    Anzeige

    Hallo,

    Dieses Thema handelt von einem Versuchsaufbau, bei dem Daten (Nr, Zeit und Frequenz) eines Hall-Sensors sequentiell in eine Datenbank-Tabelle geschrieben (und später auch ausglesen) werden sollen. Ich möchte mit Bascom und dem RNFRA-Board Mega32 von Roboternetz Signale des Sensors in eine Datenbank speichern. Gibt es dafür eine performante Lösung wie z. B. sequentielle Textfiles (Key/Indizierung wird nicht benötigt) oder eine SQL-Datenbank-Anbindung (ODBC) o. ä.? Hat jemand dazu evtl. ein Code-Beispiel?

    Wenn es möglich und evtl. performanter ist, sollten die aufgezeichneten Daten auf dem Speicherbaustein des Controllerboards gespeichert werden, sodass die Schaltung autonom (ohne Laptop) arbeiten kann. Je nachdem was performanter wäre...

    Bin für jedes Feedback sehr dankbar.

    Gruss Euer
    Sascha

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377

    Re: Bascom und SQL-Datenbanken

    Zitat Zitat von HAL9999
    Versuchsaufbau, bei dem Daten (Nr, Zeit und Frequenz) eines Hall-Sensors sequentiell in eine Datenbank-Tabelle geschrieben (und später auch ausglesen) werden sollen.
    Hallo Sascha!

    Der ATmega32 besitzt einen 1024 Byte großen EEPROM. In diesem kann man Daten schreiben. Das könnte schneller sein, als diese über die Serielle Schnittstelle zu einem Computer zu übertragen.

    Die maximale Baud-Rate für die Übertragung zum Computer ist 115200. Dafür brauchst du aber einen anderen Quarz (73728 oder 147456 Hz) um diese Baudrate fehlerfrei fahren zu können. Ich kenne dein Board nicht. Deshalb weiß ich auch nicht, welche Probleme auftauchen können, wenn man den Quarz tauscht.

    Bei 115200 Baud kannst du vom µC zum Computer 11520 Bytes/Sek. übertragen. Das ist für den Computer sicher kein Problem. Darum brauchst du dich also nicht kümmern.

    Egal welche Programmiersprache du einsetzt. Es gibt nichts was schneller ist, als Daten an eine normale Textdatei anzufügen. Jede Datenbank ist erheblich langsamer. Du musst also nur ein Programm schreiben, welches den Text, den es über die Serielle bekommt, an eine Textdatei anfügt.

    Ich persönlich verwende Python http://python.org/ und pySerial http://pyserial.sourceforge.net/ für solche Aufgaben.

    Noch schneller ist es, wenn du die Daten natürlich nicht sofort zum Computer übertragen musst. Dann kannst du die Daten in einen EEPROM schreiben und später wieder auslesen. Nur die Programmierung ist dann erheblich aufwändiger und du müsstest einen externen EEPROM verwenden, da der in den ATmega32 eingebaute EEPROM wahrscheinlich zu klein für deine Datenmenge ist.

    Wie oft in der Sekunde muss eine Messung durchgeführt werden? Welche Datenmenge fällt an? Wie lange muss eine Messreihe laufen? Rentiert sich der Aufwand, nicht sofort alles über eine Serielle Schnittstelle zum Computer zu übertragen? Wie misst du die Frequenz?

    mfg
    Gerold
    :-)

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Hallo Sascha!

    Ein einfaches Python-Programm, welches die Daten von der Seriellen in eine Textdatei schreibt, sieht so aus:

    Code:
    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
    
    import serial
    
    try:
        datafile = file("daten.txt", "a") # append
        try:
            ser = serial.Serial(
                port = "COM1", baudrate = 115200, bytesize = 8, parity = 'N', 
                stopbits = 1, timeout = 3, 
            )
            try:
                while True:
                    line = ser.readline().rstrip()
                    if line:
                        datafile.write(line + "\n")
            finally:
                ser.close()
                print "serial connection closed"
        finally:
            datafile.close()
            print "datafile closed"
    except KeyboardInterrupt:
        # Programm wird mit STRG+C beendet
        print "exit"
    mfg
    Gerold
    :-)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.07.2007
    Ort
    82272 Moorenweis
    Alter
    53
    Beiträge
    435
    Als Datenbank-Fuzzi, der sich nebenher mit myController befasst würde ich aus dem Bauch heraus folgende Variante zur Lösung heranziehen:

    1. Atmel sammelt Daten
    2. Atmel schreibt auf eine SD-Card, denn das geht auch mit Bascom
    3. Ausgabe sequentiell als Datenstream, wie in eine Textdatei. Ist am schnellsten
    4. Wenn Messung erfolgte, wandert die SD-Card in den PC, der sich die Daten dann reinzieht, indem er die Textdatei zerpflügt.

    So würde ich es angehen, denn es sind alle gewünschten Parameter gegeben. Portabilität (Batteriebetrieb), Unabhängig vom PC, Massenhaft Platz für Massenhaft Daten. Verarbeitung der gesammelten Daten erfolgt Offline, also keine Probleme wegen Verbindung Atmel <-> PC

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40
    Vielen Dank für die Antworten. Eine Frage an pmaler: Wie sieht denn so ein Schreib-Befehl für eine SD-Karte aus? Ist es "Open file etc..." oder gibt es dafür spezielle Anweisungen? Kann man als SD-Kartenleser für dieses Board irgend einen (v. z.b. Conrad elektronic) nehmen oder hast Du dafür eine bessere Quelle (wenn möglich m. link)?
    Gruss
    Sascha

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.07.2007
    Ort
    82272 Moorenweis
    Alter
    53
    Beiträge
    435
    Schau mal bei Ulrich radig vorbei, der hat da die minimal beschaltung für Dich: http://www.ulrichradig.de/home/index.php/avr/mmc-sd

    Und wenn du Bascom und DOS mal bei den goggl-jungs eingibst, kommst Du als erstes zu http://members.aon.at/voegel welches direkt in Bascom von http://www.mcselec.com übernommen wurde und mittlerweilen bei der Vollversion mit dabei ist. Siehe http://www.mcselec.com/index.php?opt...d=20&Itemid=41

    Du siehst, es ist bereits alles erfunden und geklärt. Man muss es nur noch einbinden, die 3,3 Volt bereit stellen, ein paar Ports anbinden und zusammenlöten.

    Alleine der SD-Card Slot... Will man dieses Miniding, was vermutlich 0,1 Cent wert ist, einzeln kaufen, dann muss man 7-8 Euronen abdrücken.

    Ab einer Menge von 10000 Stück, sinkt der Preis auf normales Niveau.
    Hab bei microcontroller.net nachgelesen. da ist es billiger einen USB-SD-Card-Stick beim uns allen bekannten Internet-Aultionshaus zu kaufen und den SD-Slot auszulöten, als das Teil extra zu kaufen.
    Eine perverse Preisgestaltung ist das manchmal.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40
    Vielen Dank für die Infos, die haben mir sehr gut weitergeholfen.
    Danke und viele Grüsse
    Euer Sascha

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    27.10.2006
    Ort
    Dortmund
    Beiträge
    79
    Also ich habe das Programm jetzt in Python eingegeben, aber der sagt immer:

    Traceback (most recent call last):
    File "C:\Python25\datenancom1speichern", line 4, in <module>
    import serial
    File "C:\Python25\lib\site-packages\serial\__init__.py", line 13, in <module>
    from serialwin32 import *
    File "C:\Python25\lib\site-packages\serial\serialwin32.py", line 9, in <module>
    import win32file # The base COM port and file IO functions.
    ImportError: No module named win32file


    Was sagt mir das jetzt

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Hallo mull!

    pyserial braucht pywin32 um arbeiten zu können: http://downloads.sourceforge.net/py....in32-py2.5.exe

    mfg
    Gerold

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    40

    was kommt nun wo dran??

    Hallo,
    habe nun die Schaltung nach folgendem Schaltplan fertig gelötet (war gar nicht so einfach anstelle der SMD-Transistoren normale Transistoren, die das gleiche machen, zu finden.
    http://www.ulrichradig.de/site/atmel...MC_Optimal.JPG
    Aber nun habe ich folgende 2 Probleme:
    - da gibt es ja bei dem Roboter-Netz-Bus (RNB-BUS) die Möglichkeit etwas an die AVR-Pins Anzuschliessen - jedoch finde ich, die auf dem Schaltplan angegebenen Pins nicht auf dem RNB-BUS.
    - Ausserdem finde ich nirgens beschrieben, wie herum und in welche Richtung die Pins des RNB-Bus gezählt werden (also soetwas wie z.B. pin 1 ist unten rechts und wird nach links gezählt ... oder ähnliches)
    - wo liegt eigentlich bei der Schaltung der Unterschied zwischen VCC und VCC_3V?

    Bräuchte also ein Mapping vom Schaltplan der MMC-Karte (was wo dran kommt) zum RNB-Bus sowie eine Abbildung (oder in Textform) des RNB-Busses wo drauf zu sehen ist, wie die Pins angeordnet sind.

    Eine Jpg-Datei von den Pin-Erläuterungen des RNB-Bus hab ich als Anlage beigefügt (SPI_... hab ich im oberen drittel schon gefunden - hab aber keine idee wo davon was dran kommt...).

    Vielen Dank und viele Grüße

    Euer Sascha
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken rnbbus.jpg  

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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