- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Daten von Mikrocontroller zum PC

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35

    Daten von Mikrocontroller zum PC

    Anzeige

    E-Bike
    Moin zusammen,

    ich bin derzeitig einwenig am mit meinem Programmierboard von Ulrich Radig am tüfeln, habe hier einige Spannungsmessung, welche jede Sekunde durchgeführt werden, diese würde ich gerne über RS232 an den PC senden, welcher diese dann in einem Textdokument oder Excel Tabelle speichert, leider bin ich in diesem Gebiet von Anfang bis Ende überfragt, mit welchen Befehlen kann ich diese Daten zum PC in ein Dokument senden?


    MfG

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    66
    Beiträge
    21
    An einem ähnlichen Problem bin ich im Moment
    auch dran. Ich messe 2 Temperaturen mit 2 Dallas
    Sensoren (1820) und schicke diese über die RS232.

    Ich arbeite zwar nicht mit Excel sondern mit PureBasic
    (www.PureBasic.de).

    Wenn ich jetzt auf PC-Seite die RS232 immer polle,
    friert mir meine GUI (Benutzeroberfläche) ein und es
    kommen auch öfter nur Textfragmente an. Habs mal
    in eine Textdatei geschrieben. Da werde ich um einen
    Timer oder besser noch einen Thread nicht drum herum
    kommen.

    Wäre es besser, wenn ich den UART - Interrupt benutze,
    um vom PC (zum Bsp. ein M senden) die Messungen
    anzustoßen bzw. zu beenden ?

    Code:
    ' Beispiel für das myAVR Board 1 & 2 mit LCD und 1wire Temperatursensoren an Pin 5 von Port C
    ' Zwei 1wire Temperatursensoren DS1820
    $regfile = "m8def.dat"
    $crystal = 3686400
    $baud = 9600
    
    ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von Bascom durch Software realisiert
    Config 1wire = Portc.5
    
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim I As Byte
    Dim Nr As Byte
    Dim Sc(9) As Byte
    Dim T As Integer
    Dim T1 As Integer
    Dim T2 As String * 4
    Dim Ts As Integer
    Dim T3 As String * 15
    
    ' Ersten angeschlossenen DS1820 finden und Adresse auslesen
    Dsid1(1) = 1wsearchfirst()
    Waitms 500
     ' Zweiten DS1820 suchen und Adresse auslesen
    Dsid2(1) = 1wsearchnext()
    Waitms 500
    
    'Thermostat - Ts = Schalttemperatur x 10
    Ts = 2500
    
    Do
     ' Alle angeschlossenen DS1820 zum Messen veranlassen
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitus 200
     ' Den ersten Sensor auswählen
     1wverify Dsid1(1)
     ' Kommando READ SCRATCHPAD
     1wwrite &HBE
     Sc(1) = 1wread(9)
     If Sc(9) = Crc8(sc(1) , 8) Then
      ' Genauere Temperaturberechnung auf 0,1 °C
      I = Sc(1) And 1
      If I = 1 Then Decr Sc(1)
      T = Makeint(sc(1) , Sc(2))
      T = T * 50
      T = T - 25
      T1 = Sc(8) - Sc(7)
      T1 = T1 * 100
      T1 = T1 / Sc(8)
      T = T + T1
      T = T / 10
      T2 = Str(t)
      ' Temperatur in 0,1 Grad Schritten ausgeben
      T3 = Format(t2 , "+00.0") + " C"
     End If
     Waitms 500
     ' Ausgabe alle 0,5 Sekunden
     ' Den zweiten Sensor auswählen
     1wverify Dsid2(1)
     ' Kommando READ SCRATCHPAD
     1wwrite &HBE
     Sc(1) = 1wread(9)
     If Sc(9) = Crc8(sc(1) , 8) Then
      ' Genauere Temperaturberechnung auf 0,1 °C
      I = Sc(1) And 1
      If I = 1 Then Decr Sc(1)
      T = Makeint(sc(1) , Sc(2))
      T = T * 50
      T = T - 25
      T1 = Sc(8) - Sc(7)
      T1 = T1 * 100
      T1 = T1 / Sc(8)
      T = T + T1
      T = T / 10
      T2 = Str(t)
      ' Temperatur in 0,1 Grad Schritten ausgeben
      T3 = T3 + "|" + Format(t2 , "+00.0") + " C" + Chr(0)
      Print T3
     End If
     ' Ausgabe alle 0,5 Sekunden
     Waitms 500
    Loop
    End

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Hallo zusammen, ich denke mal das euch dieses Wiki weiterhelfen wird:
    http://www.rn-wissen.de/index.php/Wi...rn_des_AVR%27s
    Hier wird die kommunikation zwischen PC und AVR ziehmlich gut veranschaulicht. Allerdings wird hier nicht beschrieben wie man die empfangenen Daten im Exel speichert.

    Hoffe ich konnte euch ein wenig weiterhelfen.

    Gruß

    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    Tut mir leid das ich jetzt erst antworte, war ein wenig verhindert, danke für den Link aber eine Frage bleibt mir noch...

    Code:
    if serialport1.BytesToRead > 0 then
    kann man hier einstellen, welche bytes er ausliest? im moment liest er ja jeden byte aus, der größer als 0 ist! wenn ich z.b. nur bestimmte bytes übertragen haben will...


    MfG

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    66
    Beiträge
    21
    Der fragt den Serialport-Puffer ab, ob der größer 0 ist,
    nicht ob das empfangene Byte > 0 ist. Ist aber in jeder
    Programmiersprache, die ich kenne, gleich.

    Wenn du nur bestimmte Zeichen übertragen haben
    willst, kannst du das ja im Bascom - Programm bestimmen.
    Alternativ kannst du auch einen x Bytes langen String
    aus dem Port lesen und anschließend in deinem Windows-
    programm filtern.

    Ich lese in meinem PureBasic Programm genau 17 Zeichen
    aus : -> 2 x 7 Bytes für die 2 Temperaturen
    -> 1 Byte (ist ein Pipe-Zeichen ALT+124 |), das die beiden
    Temperaturen voneinander trennt
    -> + 2 Bytes (Chr(13) + Chr(10), das Bascom
    beim Print - Befehl sowieso anhängt.

    somit kann ich dann optimal ausfiltern :

    Code:
    Case #PB_Event_Timer
                If IsSerialPort(#My_ComPort)
                   Bytes = AvailableSerialPortInput(#My_ComPort)
                   If Bytes >= 17
                      ;O.k., here we go, read this one
                      ReadSerialPortData(#My_ComPort, @String, 17)
                      Sensor1 = Right(String, 9) ; 2 mehr wg. CR/LF
                      Sensor2 = Left(String, 7)
                    Endif
                  Endif

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    ist es auch andersherum möglich, dass ich zb eine konstante im bascom-programm leer lasse und diese später über VB dort festlege?

    wenn ja wie?


    MfG

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    66
    Beiträge
    21
    Mußt du näher erklären.
    Verstehe den Sinn deines Vorhabens
    nicht.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    einfahc nur so... falls du zb ne produktionsreihe von irgentetwas hast und den leuten es selber überlassen willst wie sie ihre sachen einstellen, zb eine zeitschaltuhr, man konfiguriert sie über den pc, muss dort am anfang die constante eingeben, womit die selbstgebaute zeitschaltuhr dann arbeitet

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    66
    Beiträge
    21
    Könnte man auch über ein EPROM machen.
    Vorkonfiguration einmal per PC reinschieben,
    neues Programm für Atmega schreiben, in dem
    das EPROM ausgelesen wird.

    Hab da ein serielles 8fach Relaisboard, das
    mir jemand mal gebastelt hat. Der hat auch
    so eine Art Schaltuhr über EPROM realisiert.

    Hier kannst du auch noch was lesen.
    http://<br /> <a href="http://rowal....htm</a><br />

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    es geht ja nicht ums auslesen sondern um das beschreiben der constante

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress