- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 52

Thema: Lighttpd + UART - Wird nichts gesendet

  1. #31
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Anzeige

    Praxistest und DIY Projekte
    Super
    Dank dir für die Erklärung. Ich probiere das mit der Argumentübergabe nachher mal selber an meinem Raspberry aus.
    Wenn das klappt bastel ich mir eine UART-Kommunikation per C-Programm zusammen und gucke das ich von dem Zugriff von lighttpd auf den AMA0 wegkomme.
    Vielleicht stolpere ich ja mal zufällig über eine Lösung wie ich das hätte machen können.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #32
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Ich wollte dein Programm nun mal selber ausprobieren aber es tut sich nichts.
    Den PHP Code habe ich kopiert und ebenso den C-Code. Wenn ich den C-Code mit ./kommunikation "Ich" ausführen möchte, klappt es problemlos.
    Allerdings passiert nichts über das WebIf.
    Was muss ich da noch wie an den Rechten ändern?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #33
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Ich habe es gerade mal auf meinem 3. Raspi getestet. Einfach das Programm mit dem in der ersten Zeile angegebenen Befehl compilieren und die php ins /var/www packen.
    Das Programm bekommt automatisch beim Kompilieren die Rechte 755
    die php bekommt manuell 644.

    Der erste Test lief gleich erfolgreich. Als Webserver läuft lighttpd mit php5. Liegen die Programme bei Dir wie bei mir unter /var/scripte ?
    Ich bin auf allen meinen Raspis immer als root unterwegs. Der lighttpd läuft als www-data.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #34
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Ok es funktioniert in der Originalversion.
    Dann habe ich wohl unbeabsichtigt was falsch gemacht als ich ein paar Sachen angepasst habe.

    Edit: Banaler Fehler.....hab im Dateipfad von der PHP Datei das /www vergessen.....
    Geändert von Kampi (15.09.2012 um 16:03 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #35
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Schön , dann kann es ja jetzt weiter gehen..
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #36
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Ja mal schauen was sich damit machen lässt
    Wenn ich was über den UART senden möchte brauch ich root-Rechte?
    Wenn mir die Datei dann im FileZilla mit root und www-data als Besitzer angezeigt wird sollte das ja dann klappen wenn ich root-Rechte benötige oder?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #37
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Mit sudo klappt das senden per UART. Wichtig ist halt, die Kennwortabfrage per visudo für das Senden Programm abzuschalten, wie weiter oben beschrieben.
    Auf meinem ersten Raspi ging es auch ohne sudo. Allerdings habe ich da vorher viel hin und her (de)installiert und probiert...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  8. #38
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Juhu es klappt
    Hab dein Programm bischen umgemodelt und nun wird jedesmal ein Text gesendet wenn ich im WebIf den Button drücke.
    Waren zwar ein paar ein paar Fallstricke dabei (z.B. if (argc >= 1) habe ich auf if (argc == 1) stehen gelassen und mich gewundert warum es nicht klappt )
    Ist dieser Teil hier:

    Code:
    int init()                                                                                                //Schnittstelle öffnen und parametrieren
    {
        /*** Init ***/
        
        //O_RDONLY, O_WRONLY or O_RDWR -
        //O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck)
        // man 2 open fuer mehr Infos - see "man 2 open" for more info
        // O_NOCTTY No ControllTeleType 
        fd = open(MODEMDEVICE, O_WRONLY | O_NOCTTY);
        
        if (fd < 0)
        {
            printf("Fehler beim öffnen von %s\n", MODEMDEVICE);
            exit(-1);
        }
        
        memset(&newtio, 0, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;                                                    // Setzt die neuen Porteinstellungen
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = 0;         /* set input mode (non-canonical, no echo, ...) */
        newtio.c_cc[VTIME] = 0;     /* inter-character timer unused */
        newtio.c_cc[VMIN] = 1;    /* blocking read until 1 chars received */
    
    
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &newtio);
        return fd;
    }
    Immer derselbe für jedes Programm wo man den UART verwenden will?
    Im Moment lasse ich die Baudrate noch bei 115200, weil das die Defaulteinstellung für die Baudrate ist und ich noch kein Teil im Startscript habe um die Baudrate umzustellen.
    Morgen wollte ich dann auf meiner Homepage noch eine Anleitung schreiben wie man den UART per Web verwendet und wollte deinen Namen da erwähnen, weil du einen nicht zu vernachlässigen Anteil an der Problemlösung (und dem Verständnis) beigetragen hast, wenn du nichts dagegen hast

    Edit:
    Mittlerweile habe ich es auch geschafft meine eigene Sendenroutine zu implementieren.
    Bei dem Befehl:

    res=write(fd, &c[Counter], 1);

    Dort wo jetzt &c[Counter] steht, wird ein Pointer erwartet und deswegen wird dort der Inhalt der Speicherzelle, die für &c[Counter] steht, übergeben?
    Sehe ich das so richtig?
    Und dann noch eine Frage zu der Variable "fd". Diese steht ja für den Filedescriptor und wird bei der Write Funktion an der Stelle erwartet.
    Und diese Variable nimmt den Wert 0 an wenn der UART erfolgreich geöffnet wurde?
    Geändert von Kampi (15.09.2012 um 19:24 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #39
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Kampi Beitrag anzeigen
    Mittlerweile habe ich es auch geschafft meine eigene Sendenroutine zu implementieren.
    Bei dem Befehl:
    einfach
    res=write(fd, &c[Counter], 1);

    Dort wo jetzt &c[Counter] steht, wird ein Pointer erwartet und deswegen wird dort der Inhalt der Speicherzelle, die für &c[Counter] steht, übergeben?
    Sehe ich das so richtig?
    Und dann noch eine Frage zu der Variable "fd". Diese steht ja für den Filedescriptor und wird bei der Write Funktion an der Stelle erwartet.
    Und diese Variable nimmt den Wert 0 an wenn der UART erfolgreich geöffnet wurde?
    Nein, es ist ein Index für den offenen File. Jeder offene File hat eine eigene Nummer. Ohne die wüßte write ja nicht, wohin es schreiben soll. Hat auch mit UART direkt nichts zu tun, das ist auch nur ein File.

    Versuchs doch mal mit "man write", und wenn du die man-pages nicht auf deinem System hast, einfach in Google.

    Wenn man etwas menschenlesbares ausgeben will, ist häufig fprintf() einfacher zu benutzen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  10. #40
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    In der Init() wird die Schnittstelle zum Schreiben geöffnet. Möchtest Du lesen und schreiben, dann wird entweder
    Code:
    fd = open(MODEMDEVICE, O_WRONLY | O_NOCTTY);
    .
    .
    .
    newtio.c_cc[VMIN] = 1;    /* blocking read until 1 chars received */
    gegen
    Code:
    fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
    .
    .
    .
    .
    newtio.c_cc[VMIN] = 0;    /* blocking read until 1 chars received */
    getauscht oder du öffnest die Schnittstelle ein zweites Mal nur zum lesen. Die zweite Änderung (newtio.c_cc[VMIN] = 0; ) braucht es dann aber trotzdem, damit
    das Programm nicht beim Read blockiert wird, wenn nichts kommt. Dafür steigt dann durch das ständige Einlesen der UART die Prozessorlast.

    Die Init(); Sub habe ich im Internet gefunden und da sie funktionierte, habe ich sie so belassen. Möglich, dass diese noch optimiert werden kann. Bei C werden überwiegend nur
    die Adressen statt der Inhalte der Variablen übergeben. Es wird also die Schnittstelle geöffnet und die Adresse in fd zurückgegeben. Da schreibt dann die send(); immer nur ein Zeichen
    rein und dieses wird dann unmittelbar über UART ausgegeben. Mehrere Zeichen "auf einmal" senden habe ich nicht probiert. Möglich, dass der Output Buffer irgendwann überläuft.

    Tritt beim Senden kein Fehler auf, wird als Ergebnis (res Abkürzung für result) 0 zurückgegeben.
    Code:
    int res=write(fd, &c, 1);
    Diese Schleife
    Code:
            while(pBuf && *pBuf){                                            //Zeichen einzeln senden
                send(*pBuf++);
    habe ich auch im Netz gefunden. Man könnte auch die Zeichen gleich in der Schleife, wo die Umlaute angepasst werden, senden. Das hatte ich zwischendurch auch im kombinierten Senden/Empfangen Programm gemacht. Habe diese Idee dann aber, wie gesagt wegen der Prozessorlast, wieder verworfen.

    Die Geschwindigkeit hatte ich Anfangs auf 38400 Baud. Später habe ich mich dann bei 19200 eingependelt. 115200 würde mein AVR nicht schaffen (die Abweichung wäre zu hoch), da ich kein Baudratenquarz nutze.
    19200 ist für meine Anwendung noch ausreichend schnell und ich habe noch vor, den TX-Pin des Raspi mit 2 parallel geschalteten RX zu verbinden, da ich noch eine externe Uhr ansteuern möchte. Da ist das Kabel dann knapp 1m lang. Da ist langsamer besser.

    Ansonsten ist C noch recht neu für mich..
    Geändert von peterfido (15.09.2012 um 20:34 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] MCP2515 Remoteframe wird nicht gesendet.........
    Von Kampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 30.08.2012, 23:49
  2. [ERLEDIGT] Frage zu LightTPD
    Von Kampi im Forum Raspberry Pi
    Antworten: 69
    Letzter Beitrag: 17.07.2012, 15:57
  3. Auf LC-Display wird nichts angezeigt
    Von cesupa im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 28.02.2008, 19:44
  4. I2C Adapter Software es wird immer WRITE gesendet
    Von yunscher im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 29.03.2007, 19:12
  5. wegen UART wird 7805 kochend heiß
    Von batti112 im Forum Elektronik
    Antworten: 26
    Letzter Beitrag: 15.06.2004, 10:48

Berechtigungen

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

LiFePO4 Speicher Test