- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 52

Thema: Lighttpd + UART - Wird nichts gesendet

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #40
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    54
    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 19:34 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Ähnliche Themen

  1. [ERLEDIGT] MCP2515 Remoteframe wird nicht gesendet.........
    Von Kampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 30.08.2012, 22:49
  2. [ERLEDIGT] Frage zu LightTPD
    Von Kampi im Forum Raspberry Pi
    Antworten: 69
    Letzter Beitrag: 17.07.2012, 14:57
  3. Auf LC-Display wird nichts angezeigt
    Von cesupa im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 28.02.2008, 18: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, 18:12
  5. wegen UART wird 7805 kochend heiß
    Von batti112 im Forum Elektronik
    Antworten: 26
    Letzter Beitrag: 15.06.2004, 09:48

Berechtigungen

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

12V Akku bauen