mikrocontroller.net

Forum: Compiler & IDEs RFID-Reader an RS232


Autor: Christian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

ich habe hier vor mir einen RFID-Reader liegen der per USB mit dem PC 
(OPENSuse 11.1) verbunden ist, allerdings ist das dann ein virtueller 
COM-Port. Zum testen und auslesen der Daten haben ich ein C-Programm 
geschrieben. Es sind viele Ausgaben drin um die Konfiguration zu 
überprüfen und um erstmal zu sehen ob es auch klappt. Hier mal der 
Quelltext:

/*
 * File:   main.c
 * Author: Christian
 *
 * Created on 15. Juni 2009, 16:27
 */

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <termios.h>


void ausgabe_konfiguration(struct termios config) {
    printf("c_iflag: %d\n", config.c_iflag);
    printf("c_oflag: %d\n", config.c_oflag);
    printf("c_cflag: %d\n", config.c_cflag);
    printf("c_lflag: %d\n", config.c_lflag);
    printf("c_line: %d\n", config.c_line);
    printf("c_ispeed: %d\n", config.c_ispeed);
    printf("c_ospeed: %d\n", config.c_ospeed);
    printf("c_cc[VMIN]: %d\n\n", config.c_cc[VMIN]);
}

void konfiguration_setzen(struct termios *new_config) {
    if(new_config->c_cflag == PARENB) {
        new_config->c_cflag = new_config->c_cflag & ~(PARENB);
    }
    new_config->c_cflag = new_config->c_cflag & ~(CSIZE);
    new_config->c_cflag = new_config->c_cflag | CS8;
    if(new_config->c_cflag == CRTSCTS) {
        new_config->c_cflag = new_config->c_cflag & ~(CRTSCTS);
    }
    if(new_config->c_cflag == CSTOPB) {
        new_config->c_cflag = new_config->c_cflag & ~(CSTOPB);
    }
    new_config->c_cflag = new_config->c_cflag | CREAD;
};

/*
 *
 */
int main(int argc, char** argv) {

    int port, bytes;
    char buffer[1];
    port = open("/dev/ttyUSB0", O_RDWR);
    printf("Port: %d\n", port);
    if ( port == -1 )
    {
      // FEHLER: Port konnte nicht geöffnet werden!
        printf("FEHLER: Port konnte nicht geöffnet werden\n");
    } else {

        struct termios old_config; //original Konfiguration des 
RFID-Readers
        struct termios new_config; //selbst erstellte Konfiguration

        // int tcgetattr ( int fd, struct termios *termios_p );
        // Konfiguration auslesen
        if ( tcgetattr( port, &old_config ) == -1 )
        {
          // error
            printf("Fehler beim lesen der config\n");
        } else {
            new_config = old_config; //original Konfiguration sichern
            printf("Ausgabe alte Konfiguratio\n");
            ausgabe_konfiguration(old_config);
            printf("Ausgabe kopierte Konfiguratio\n");
            ausgabe_konfiguration(new_config);

            konfiguration_setzen(&new_config);

            cfsetispeed(&new_config, B4800);
            cfsetospeed(&new_config, B4800);

            printf("Ausgabe neue Konfiguratio\n");
            ausgabe_konfiguration(new_config);

            if ( tcsetattr( port, TCSANOW, &new_config ) == -1 ) {
                printf("Fehler beim lesen der neuen Konfiguration\n");
            } else {
                bytes = read(port, buffer, sizeof(buffer));
                printf("%d", bytes);
                int i=0;
                for(i; i<bytes; i++) {
                    printf("%d", buffer[i]);
                }
            }
        }

        //original Konfiguration zurÌcksetzen
        if(tcsetattr(port, TCSANOW, &old_config) == -1) {
            // Fehler beim setzern der original Konfiguration
            printf("Fehler beim setzen der original Konfiguration\n");
        }

    }
    close(port);

    return (EXIT_SUCCESS);
}

Dieser Quelltext liefert mir die Ausgabe in der angehängten Datei. Mein 
Problem ist das das Programm ab der read-Zeile nichts mehr macht das es 
auf Eingaben wartet die nicht kommen. Als Einstellungen braucht der 
Reader 4800Baud 8N1. Vom System wird der Reader erkannt und Treiber 
werden auch geladen. Hat jemand vlt. eine Idee ob und was nicht stimmen 
kann?

Ciao
Chris

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.