-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: NIBOLIB V2.7 - uart1 Probleme

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Hero_123
    Registriert seit
    29.08.2010
    Beiträge
    202

    NIBOLIB V2.7 - uart1 Probleme

    Anzeige

    Hallo

    Hat schon jemand mal beim NIBO2 den UART1 als RS232 benutzt? Da gibt es zwar Funktionen wie z.B UART1_set_baudrate(uint16_t baud), UART1_enable() usw in der NIBOLIB V2.7 - wie um alles in der Welt projektiere ich die Anzahl der Datenbits (8 Bit, no parity, 1 Stoppbit)????

    Ich versuche seit Tagen verzweifelt,den UART1 (hängt ja am PORTD) zum laufen zu bringen (38400 Baud, 8 Datenbit,no parity, 1 Stoppbit), aber das verd** Ding macht keinen Mucks. An den Pins 8 und 10 des Steckers X6 habe ich RXD und TXD angeschlossen, die 5V und GND habe ich auch korrekt angeschlossen -ich will mit einem XBEE Modul Daten an den PC senden. Die XBEE-Kommunikation mit einem ATmega8 fkt problemlos, da habe ich Daten zwischen PC und ATmega8 ausgetauscht -> an den Xbee Modulen kann es also nicht liegen.

    NB - habe natürlich auch schon RXD und TXD von PORTD getauscht, war aber trotzdem erfolglos.

    Ich bekomme nicht einmal Sendesignale (beim Xbee ist eine Anzeige DIN, die blinkt, wenn vom Prozessor Daten geschickt werden); ich habe auch mal das file "AvoidRC.c" der NIBOLIB 2.8 getestet (dieses file ist außerdem fehlerbehaftet - da sollte nicht vorkommen!!) aber das ging natürlich auch nicht.

    Generell ist die Doku der Lib "etwas dürftig", um es mal gelinde zu sagen.

    mfg

    Hero_123

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    Initialisier den UART1 des Atmega128 halt gleich wie im Datenblatt beschrieben (In der Hoffnung dass nichts aus der Lib dem in die Quere kommt)

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Hero_123
    Registriert seit
    29.08.2010
    Beiträge
    202
    Ja, wird mir wohl nichts anderes übrig bleiben...

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    So schwierig ist das gar nicht. Man ist nur auf den ersten Blick von dem Datenblatt ganz erschlagen. Aber wenn man sich erst mal damit beschäftigt hat wird es alles ganz logisch. Bei Problemen kannst du ja immer noch hier nachfragen.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Hero_123
    Registriert seit
    29.08.2010
    Beiträge
    202
    Hi

    habe es jetzt so wie vorgeschlagen gemacht - den USART1 gemäß ATmega128 Beschreibung initialisiert, lese Kommandos vom PC mittels Interrupt ein und gib sie zyklisch (timergesteuert - selbst definiert (!) - alle 500ms) wieder per HTerm auf dem PC aus - es funktioniert also (38400 Baud, 8 Datenbit, no parity, 1 Stoppbit).

    Schade ist nur, daß man die NiboLib nicht verwenden kann (oder ich bin einfach zu unfähig) - ein user, der nicht so fit ist in der englischen Sprache, kann da schon seine Probleme haben, wenn er SELBST den USART deklarieren soll...

    naja, ist sowieso besser, wenn man sich seine eigenen Fkt schreibt; der Lerneffekt ist da wesentlich grösser...

    Hero_123

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.05.2007
    Ort
    Stolberg
    Beiträge
    111
    Hier ein Beispiel für die UART1 Routinen aus der NIBOlib:
    Code:
    UART1_set_baudrate(38400); // immer 8N1
    UART1_enable();
    sei();
    
    while (1) {
      if (!uart1_rx_empty() && !uart1_txfull()) {
        // wenn Empfangspuffer nicht leer und Sendepuffer nicht voll
        char c = UART1_get_char(); // Zeichen holen
        UART1_put_char(c); // und zurückschicken
      }
    }

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Hero_123
    Registriert seit
    29.08.2010
    Beiträge
    202
    NIBOLIB - Woher weiß ich, daß es immer 8N1 ist? Das steht nicht in der Doku (Habs jedenfalls nicht gefunden, weder in den *.c-files noch in den header-files).
    Was ist, wenn ich eine andere Parametrierung will (z.B. O2)? Ich kann zwar die Baudrate einstellen, mehr aber nicht.
    NIBOLIB V2.8 - versuch mal, das "AvoidRC.c" zu compilen...(-> #define STATE_TURNLEFT 3AvoidRC.o)...

    mfg

    Hero_123

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.05.2007
    Ort
    Stolberg
    Beiträge
    111
    Die USART des ATmega128 ist nach dem Reset per Default auf 8N1 eingestellt. Eine andere Einstellung mach bei Verwendung der Bibliothek wenig Sinn, da von den Routinen keine Parity Fehler geprüft werden und das Datenformat fix auf 8 Bit ausgerichtet ist. Die einzige sinnvolle Einstellmöglichkeit (bei Verwendung der Bibliothek) sind 2 Stop-Bits. Das ist möglich wenn man das USBSn Bit im UCSRnC Register setzt.

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von Hero_123
    Registriert seit
    29.08.2010
    Beiträge
    202
    Hi workwind

    Es wäre hilfreich, wenn diese Info in der Doku der lib stünde; viellecht kann man das in die nächsten NIBOLIB ja einfließen lassen


    Jedenfalls Danke für den Hinweis

    mfg

    Hero_123

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    9
    Blog-Einträge
    1
    Nach längerer Zeit habe ich mich mal wieder dem NIBO2 zugewandt.
    Ich versuche Daten per UART1 an meinen PC zu senden.
    Funktioniert jedoch nicht.

    Nibo2 Test UART1:

    AVR Studio 4.18
    WinAVR - 20100110
    NiboLib 2.8


    PC-Terminal -> MAX 232 -> X6/10 (RXD1) sendet im Loop 1 Zeichen (mit 10 msec Verzögerung)

    X6/8 (TXD1) kommt jedoch nichts an

    gemessen mit Oszi.

    Kompilierung ok

    Code:

    ....
    int main()
    {
    // Initialisierung
    sei();
    bot_init();
    spi_init();
    // floor_init();
    display_init();
    // leds_init();
    // pwm_init();
    gfx_init();

    // Initialize serial interface (RS232)
    #ifdef USE_UART
    UART1_set_baudrate(9600);
    UART1_enable();
    #endif

    // Operation loop
    while (1)
    {
    if (!uart1_rxempty() && !uart1_txfull())
    {
    // wenn Empfangspuffer nicht leer und Sendepuffer nicht voll
    char c = UART1_getchar(); // Zeichen holen
    UART1_putchar(c); // und zurückschicken
    }
    }

    return 0;
    }

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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