- LiFePO4 Speicher Test         
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
    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

  2. #2
    HaWe
    Gast
    Zitat Zitat von NumberFive Beitrag anzeigen
    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.
    Soweit ich weiß, hat der Pi mit 40 Pins 2 Hardware pwm (BCM 12+13) und prinzipiell beliebige Software pwm. Hardware pwm braucht root Rechte.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    Für den I2C habe ich schon mal eine Klasse angefangen zu bauen bin aber noch nicht ganz fertig.

    Für PWM war der Link oben als Info gedacht. Dort stehen im unteren Teil die Devicefile Namen.

    Der schreibt hier zum Beispiel den Wert "10000000" in die Datei "/sys/class/pwm/pwmchip0/pwm0/period". Die Datei einfach mit open öffnen und dann mit wirte den Wert in die Datei schreiben. Bei mir ist allerdings das Verzeichnis "/sys/class/pwm/" leer. Vermutlich muss man PWM erst irgendwie aktivieren beim booten. Der Raspi lädt ja nicht automatisch alle Treiber. Den Kerneltreiber wird man auch noch laden müssen.

    Man findet erstaunlich wenig zu Hardware PWM und Raspi. Einige schreiben das der einzige PWM Anschluß für den Audio Port benutzt wird.

    Software PWM ist ja einfach: ein Thread in dem Du den Port aus und ein schaltest und nach jedem Schalten ein CPU freundliche Wartezeit einbaust. (z.B. mit std::this_thread::sleep_for(std::chrono::milliseco nds(100)). Damit kannst Du dann die Zeit für Port ein oder aus einstellen. Wenn Du das in einer Lamda Funktion machst kannst Du über zwei externe Variablen die Zeiten beliebig einstellen. Das wollte ich als eine Spezialisierung meiner Gpio Klasse bauen.

    Ich wusste doch ich habe das schon mal gemacht. Für einen Temperatursensor auch für den Gnublin ist aber alles der Sympathische Pinguin ...

    Code:
    // Copyright 2014 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/>.
    
    //******************************************************************************
    //*  Neuentwicklung                                                 15.08.2014 *
    //******************************************************************************
    
    // Device File anlegen:
    // mknod /dev/i2c-1 c 89 1
    //
    // Das Programm benötigt root Rechte !!!
    // Wegen den Zugriffen auf die Hardware-Ports
    
    #include <cstring>
    
    #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/i2c.h>
    #include <linux/i2c-dev.h>
    
    class I2C
    {
    public:
      I2C (const std::string&  strDevFile,
           const unsigned char ucI2cAdr,
           int                 iDebug = 0) : strIntDevFile (strDevFile),
                                             ucIntI2cAdr   (ucI2cAdr),
                                             iIntDebug     (iDebug)
      {
      // Debug Messages
        if (iIntDebug == 1)
        {
          std::cout << "Start I2C Konstruktor ... " << std::endl;
          std::cout << "strIntDevFile: "            << strIntDevFile    << std::endl;
        }
    
        iIntDevFile = open(strDevFile.c_str(), O_RDWR);
    
        if (iIntDevFile < 0)
        {
          std::cout << "I2C Device File konnte nicht geöffnent werden." << std::endl;
          exit (0);
        }
    
        if (ioctl(iIntDevFile, I2C_SLAVE, ucI2cAdr) < 0)
        {
          std::cout << "I2C Adresse als Slave: " << ucI2cAdr << std::endl;
          exit (0);
        }
      }
    
    
      friend short I2c::operator>> (short iReturn, short iValue)
      {
        return getTemp ();
      }
    
    
      short getTemp (void)
      {
      // Lese einen Wert über den I2C Bus.
        unsigned char ucBuffer[2];
        int           iLaenge = 2;
    
        memset (ucBuffer, 0, sizeof (ucBuffer));
    
        if (read(iIntDevFile, ucBuffer, iLaenge) != iLaenge)
          std::cout << "I2C lesen fehlgeschlagen, Länge: " << iLaenge << std::endl;
    
      // MSB speichern
        short sWert = ucBuffer[0];
    
      // MSB an die richtige position schieben.
        sWert <<= 8;
    
      // LSB an das MSB anfügen
        sWert |=  ucBuffer[1];
    
      // Bit 0-4 werden nicht benutzt beim LM75
        sWert >>= 5;
    
      // Konvertiere die Daten in den Temperatur Wert.
        if(ucBuffer[0] & 0x80)
        {
        // Temperatur negativ
          sWert =  sWert | 0xF800;
          sWert =~ sWert + 1;
          sWert = sWert * (-0.125);
          return sWert;
        }
        else
        {
        // Temperatur positiv
          sWert = sWert * 0.125;
         return sWert;
        }
      }
    
      ~I2c (void)
      {
        if (iIntDebug == 1)
          std::cout << "Start I2C Destructor ... " << std::endl;
    
        close(iIntDevFile);
      }
    
    private:
      unsigned char ucIntI2cAdr;
      std::string   strIntDevFile;
    
      int iIntDevFile;
    
      int iIntDebug;
    };
    Geändert von alexander_ro (10.11.2018 um 19:44 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    51
    Beiträge
    1.562
    Dank die Infos muss ich jetzt mal verarbeiten.

    Selbst wenn der PWM für den Sound verwendet würde sollte das bei mir egal sein den ich hole den Sound per HDMI aus dem PI. Und das man dafür den PWM braucht kann ich mir gerade nicht so ganz vorstellen.
    Leider war ich das ganze WE unterwegs und konnte das jetzt erst lesen. Leider muss ich mich erstmal um das Stromversorgungs Problem Kümmern den das gefährdet gerade das ganz Projekt.

    Der Amtel der Stromversorgung Bootet nicht wenn die RX Leitung angeschlossen ist. Aber ich will den Thread nicht Kapern. Ich melde mich so bald ich an dem Thema I²C und PWM wieder drin bin.

    Eines noch die ganzen Sachen kommen in einen Systemd Backend Dienst so das rechte hier nicht so problematisch sind. Die GUI reden mit dem Backend per TCP.

    Aber das sollte alles auf meiner HP zu lesen sein Link in der Fußzeile.
    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

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    HDMI Sound ist ja nur Digital. Du musst auf der anderen Seite halt einen Digital/Analog Wandler haben der aus den Daten ein Analoges Signal macht. Ich habe für Sound eine USB Soundblaster Soundkarte. Will man den PWM vom Raspi Klinken Sound benutzen wird man den Treiber entfernen müssen und vermutlich für eine normale PWM Anwendung einen anderen Treiber benötigen. Weiß ich noch nicht wie das geht. Ich baue mal das I2C Ding das dauert so sicher ein paar Tage weil ich ja auch ein Programm für den Arduino brauche damit ich zum Testen zwischen Raspi und Arduino Daten verschieben kann.

    Ich weiß da nichts genaues darüber aber die Controller können zum Teil über serielle Schnittstelle booten. Also er lädt sein Programm über die serielle Schnittstelle und beginnt erst dann mit der Ausführung. Dann kann es sein das Du den Port auf eine bestimmte Art beschalten musst damit er erkennen kann das Du nicht über seriell booten willst. Evtl. auch so ein Fuses Ding das man da das booten über seriell ausschalten muss. Oder ein bootloader macht das könnte auch sein.
    Geändert von alexander_ro (12.11.2018 um 13:17 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    51
    Beiträge
    1.562
    Ich habe einen HDMI Splitter mit Analog Ausgang das war für mich die Beste Lösung wenn es auch nicht gerade Billig war. Ich halte von den USB Soundkarten nicht viel. Per Splitter habe ich laut Datenblatt auch 5:1 aber in Realität habe ich es noch nicht zum Laufen bekommen (5:1) 2:1 geht. Der Splitter mach 48Khz bei 24Bit und das hört man dann schon. Natürlich nicht bei einer einfachen MP3 Datei.

    Der Amtel steckt auf einer eigenen Platine ist kein Arduino und wenn ich einen 10KOhm Wiederstand in die RX Leitung geht alles wie gewünscht muss also noch suchen wo der Strom falsch abbiegt.

    Denk dran der Arduino hat 5V am I²C und der PI 3,3 V aber das hast du sicher auf dem Schirm. Ich brauch das I²C für den MCP23017 damit ich Relais später schalten kann.

    Wenn ich was habe werde ich es hier Posten.
    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

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    51
    Beiträge
    1.562
    Ich habe jetzt mal bei wiringPi und bei pigpio gelesen und wenn ich mir da das Thema Hardware PWM so durch lese gibt es wohl dann mit der ein oder anderen Zusatzhardware Probleme. Da ich aber nicht möchte das mein Prg zu viele Einschränkungen macht. Werde ich wohl eher auf Software PWM setzen müssen. Ich brauche das ja auch "nur" für den Lüfter da ist ein sauberes PWM nicht so wichtig Hauptsache ist das der Lüfter nicht immer voll dreht weil dann ist laut. Mal sehen ob ich das Ressourcen schonend hin bekomme.
    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
  •  

fchao-Sinus-Wechselrichter AliExpress