- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 96

Thema: C++ fstream GPIO Trigger/Interrupt

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    51
    Beiträge
    1.562
    Alexander bist du jetzt mit deinem Code zufrieden ?
    Ich möchte einen Drehgeber damit abfragen die Zeiten die du gemessen hast sehen irgend wie passen aus.
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    Ja der Code funktioniert auf einem Raspi mit Gentoo Linux sollte aber mit allen anderen halbwegs aktuellen Distributionen auch funktionieren. Wenn Du was findest das nicht geht wäre es nett wenn Du hier schreibst was es ist damit ich es reparieren kann. Du musst bei Deiner Anwendung halt aufpassen das der Drehgeber die Impulse nicht schneller generiert als die vom Controller verarbeitet werden können.

    Hier der neue Link weil ich für die git Web Zugriffe ein anderes Programm benutze geht der oben nicht mehr. Die Domain ist aber die gleiche geblieben.
    https://git.hts-software.de/cgit.cgi.../Gpio/Gpio.hpp
    Geändert von alexander_ro (31.10.2018 um 09:24 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    51
    Beiträge
    1.562
    Ich habe ein Aktuelles Debian drauf da sollte der Kernel passen denke ich. Ja werde schreiben wenn ich was finde.

    Das der Link jetzt anders ist habe ich schon gemerkt habe aber den Code schon gefunden gehabt danke für den neuen Link.

    Bei dem wort Drehgeber habe ich wohl mich falsch Ausgedrückt bzw es ist halt so ein Poti was schalte da dreht ein Mensch dran nicht ein Motor deshalb hoffe ich das es klappt.
    Lautstärke einstellen ist die Funktion.
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    Ist ja auch ein Drehgeber wenn den Menschen bedienen gibt das sicher keine Probleme.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    51
    Beiträge
    1.562
    hast du das Thema PWM schon mal betrachtet ? Wenn ich jetzt mit deinem Code auf externe Libs verzichte brauche ich noch eine Lösung für I²C und PWM. Das PWM brauche ich für den Lüfter.

    http://www.raspberry-projects.com/pi...-i2c-interface damit sollte das mit dem MCP23017 klappen der ist ja vom Protokoll her nicht wirklich schwer.

    Aber bei PWM habe ich noch so gar keine Idee
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    I2C habe ich bisher noch nichts gemacht. Unter Linux ist das ja auch nur ein Devicefile das man mit open öffnet und dann die Daten schreibt. Für den SPI bei einem Gnublin habe ich das mal gemacht.

    Code:
    // Copyright 2013 HTS-Software Unternehmensberatung
    //                      Alexander Schucha
    //
    // This file is part of Athena-Api.
    //
    // Athena-Api is free software: you can redistribute it and/or modify
    // it under the terms of the GNU Affero General Public License as published by
    // the Free Software Foundation, either version 3 of the License, or
    // (at your option) any later version.
    //
    // Athena-Api is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU Affero General Public License for more details.
    //
    // You should have received a copy of the GNU Affero General Public License
    // along with Athena-Api.  If not, see <http://www.gnu.org/licenses/>.
    
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    
    #include <atomic>
    #include <chrono>
    #include <thread>
    #include <time.h>
    #include <iostream>
    #include <fstream>
    
    #include <sys/ioctl.h>
    #include <linux/types.h>
    #include <linux/spi/spidev.h>
    
    class Spi
    {
    public:
      Spi (const std::string&  strChipSelect,
           const std::string&  strDevFile,
           const unsigned int  uiBandbreite = 100000,
           const unsigned char ucBitAnzahl  = 8,
           int                 iDebug = 0)            : strIntChipSelect (strChipSelect),
                                                        strIntDevFile    (strDevFile),
                                                        iIntDebug        (iDebug)
      {
      // Debug Messages
        if (iIntDebug == 1)
        {
          std::cout << "Start Spi Konstruktor ... " << std::endl;
          std::cout << "strIntChipSelect:    "      << strIntChipSelect << std::endl;
          std::cout << "strIntDevFile: "            << strIntDevFile    << std::endl;
        }
          
        iIntDevFile = open(strDevFile.c_str(), O_RDWR);
    
    
        if (iIntDevFile < 0)
          std::cout << "SPI Device File konnte nicht geöffnent werden (SPI-Kernel Modul geladen? root?)." << std::endl;
    
      // SPI Bandbreite einstellen
        if (ioctl (iIntDevFile, SPI_IOC_WR_MAX_SPEED_HZ, &uiBandbreite))
          std::cout << "SPI Bandbreite konnte nicht eingestellt werden" << std::endl;
    
      // SPI Anzahl Bits einstellen
        if (ioctl (iIntDevFile, SPI_IOC_WR_BITS_PER_WORD, &ucBitAnzahl))
          std::cout << "SPI Anzahl Bits konnte nicht eingestellt werden" << std::endl;
      }
    
      int operator<< (std::string strDaten)
      {
        if (iIntDebug == 1)
          std::cout << "Daten länge: " << strDaten.size () << std::endl;
    
        int status;
        struct spi_ioc_transfer xfer;
    
        xfer.tx_buf = (unsigned long) strDaten.c_str ();
        xfer.len = strDaten.size ();
        xfer.rx_buf = 0;
        xfer.delay_usecs = 0;
        xfer.speed_hz = 0;
        xfer.bits_per_word = 0;
    
        status = ioctl(iIntDevFile, SPI_IOC_MESSAGE(1), &xfer);
    
        if ((status < 0) && (iIntDebug == 1))
          std::cout << "SPI Daten senden fehlgeschlagen." << std::endl;
      }
    
    
      int operator<< (__u8* cDaten)
      {
        if (iIntDebug == 1)
          std::cout << "Daten länge: " << sizeof (__u8) << std::endl;
    
        int status;
        struct spi_ioc_transfer xfer;
    
        xfer.tx_buf = (unsigned long) cDaten;
        xfer.len = sizeof (__u8);
        xfer.rx_buf = 0;
        xfer.delay_usecs = 0;
        xfer.speed_hz = 0;
        xfer.bits_per_word = 0;
    
        status = ioctl(iIntDevFile, SPI_IOC_MESSAGE(1), &xfer);
    
        if ((status < 0) && (iIntDebug == 1))
          std::cout << "SPI Daten senden fehlgeschlagen." << std::endl;
      }
    
      ~Spi (void)
      {
        if (iIntDebug == 1)
          std::cout << "Start Spi Destructor ... " << std::endl;
    
        close(iIntDevFile);
      }
    
    private:
      std::string strIntChipSelect;
      std::string strIntDevFile;
    
      int iIntDevFile;
    
      int iIntDebug;
    };
    Das sollte relativ leicht zum umbauen sein ist ja beides eine serielle Verbindung. Geräte Datei öffnen und Daten senden/empfangen müsste fast gleich sein nur die Daten für die Abwicklung des Protokolls sind unterschiedlich. Ich kann so was schon schreiben weiß aber noch nicht was ich zum Testen benutzen könnte. Vielleicht habe ich noch ein Arduino Teil herumliegen.

    PWM habe ich auch noch nicht gemacht würde es aber auch schon brauchen. Kommt halt darauf an ob Du das in Software oder Hardware machen willst. Unter Linux kann man Software PWM recht Rechenzeit sparsam bauen weil der Kernel in der Wartezeit was anderes tun kann. Hardware PWM geht auch wieder über die Devicefiles.

    so etwa:
    https://jumpnowtek.com/rpi/Using-the...WM-timers.html

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    51
    Beiträge
    1.562
    Nach dem Code den ich gefunden habe ist I²C noch einfacher siehe Link im Pos davor.
    PWM ob Hardware oder Software ist mir im Moment egal da ich nur einmal brauche für den Lüfter und ich bin der Meinung der PI hat nur ein Hardware PWM.
    Hast du eine Link zu der Beschreibung der DeviceFiles ich finde da immer nix ?

    Ich habe mal mein test PRG für die Pins angehängt. Ein bisschen was habe ich umgebaut. Die Exception sind in der "richtigen" Software dann drin. Bei Test PRG habe ich es mal Weg gelassen.
    Ich hoffe das so Ok für dich. Auch habe ich Programm in dem ich es Nutzen möchte einen Logger das hier auskommentiert.

    Wenn man im Netz sucht kommt halt immer bei einer der beiden Libs raus. Libs machen halt immer das Crosscompile so aufwendig.
    Angehängte Dateien Angehängte Dateien
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

Ähnliche Themen

  1. Benötige Hilfe zu AT32U3C und GPIO
    Von xrzr im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 10.11.2015, 18:54
  2. Respberry Pi GPIO mit C++ und QT
    Von Basti1204 im Forum Raspberry Pi
    Antworten: 0
    Letzter Beitrag: 05.03.2013, 23:01
  3. [ERLEDIGT] Raspberry Pi GPIO
    Von Kampi im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 04.11.2012, 22:45
  4. GPIO-Register Ansprechen
    Von kmrish im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 7
    Letzter Beitrag: 14.07.2011, 09:45
  5. schmitt-trigger an interrupt
    Von Bluesmash im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 19.06.2005, 22:46

Berechtigungen

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

12V Akku bauen