-         

Ergebnis 1 bis 10 von 10

Thema: UART Problem AT90USB162

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.09.2008
    Ort
    Hamburg
    Alter
    36
    Beiträge
    54

    UART Problem AT90USB162

    Anzeige

    Hallöle,

    habe inzwischen den 162er am laufen,
    aber immernoch leichte Verständnisprobleme....
    ...ich initialisiere UART wie folgt:
    Sollten 8 Datenbit und 2 Stoppbits sein, stimmt das?

    void USART_Init()
    {

    UBRR1H = 0;
    UBRR1L = 103; //9600 BAUD

    UCSR1B = (1<<RXEN1)|(1<<TXEN1);

    UCSR1C = (1<<USBS1)|(3<<UCSZ10);
    }

    und wie lautet die Initialisierung für
    6 Daten und 1 Stoppbits
    bztw. 6 Daten und 2 Stoppbits?

    Die Schnittstelle sendet, kommt aber nur Gedöns an

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.545
    Die benötigten Register stehen im DB auf S168. Tabelle 17-6 ist für Stoppbits (USBS1=0 => 1 Stoppbit, USBS1=1 => 2 Stoppbits).
    Damit du die 6 Datenbits hast musst du "UCSR1C = (1<<UCSZ10);" schreiben (Stoppbit nicht vergessen, das ist im gleichen Register.

    Man sollte auch nicht "(3<<UCSZ10)" schreiben sondern "(1<<UCSZ10) | (1<<UCSZ11)". Das ist aber nur meine Meinung. Der Grund ist das man bei den Registern sofort erkennt was gesetzt ist und was nicht.

    Ob das mit der Baud Rate passt weiß ich nicht. Wenn du keine vernünftigen Daten bekommst könnte es falsch eingestellt sein. Achte auch auf die Tabellen mit den Abweichungen bei unterschiedlichen Taktfrequenzen.

    Eventuell passt auch die Taktfrequenz nicht ganz. Ich hatte vor Kurzem das Problem das ich einen Atmega88 mittels FTDI Chip (USB/UART Wandler) auslesen wollte. Wenn ich den internen 8MHz Takt mit 1/8 Teiler (also 1MHz Taktfrequenz) auslesen wollte hat es funktioniert. Habe ich es allerdings mit dem Takt vom RFM12 Board (ist ebenfalls auf der Platine) versucht kam nur Schrott am Terminal an.

    MfG Hannes

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.09.2008
    Ort
    Hamburg
    Alter
    36
    Beiträge
    54
    also mit der oben gelisteten config kann ich alles empfangen,
    baud rate passt also

    danke für die hilfe, werde sofort probieren

    danke danke

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    30.09.2008
    Ort
    Hamburg
    Alter
    36
    Beiträge
    54
    danke fürs retten,
    klappt.

    hatte wohl einen aul:

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    30.09.2008
    Ort
    Hamburg
    Alter
    36
    Beiträge
    54
    wie viele zeichen kann ich in den Puffer legen?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.545
    Du kannst 6Bit in den Puffer geben. Das sind dann 2^6=64Zeichen (0-63).
    MfG Hannes

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    30.09.2008
    Ort
    Hamburg
    Alter
    36
    Beiträge
    54
    okay, udn wenn ich 8 bit einstelle kann ich 8 bit im puffer ablegen?

    wie checke ich denn, welche stopp / datenbit kombination mein gegenüber eingestellt hat?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    30.09.2008
    Ort
    Hamburg
    Alter
    36
    Beiträge
    54
    das hier ist jetzt die config, die ich nutze:

    void USART_Init()
    {
    UBRR1H = 0;
    UBRR1L = 103; //9600 BAUD
    UCSR1B = (1<<RXEN1)|(1<<TXEN1);
    UCSR1C = (1<<USBS1)|(1<<UCSZ11)|(1<<UCSZ10);
    // 6 Datenbits und 2 Stopbits!
    }

    void USART_Transmit( unsigned char data )
    {
    while ( !( UCSR1A & (1<<UDRE1)) )
    ;
    UDR1 = data;
    }

    unsigned char USART_Receive( void )
    {
    while ( !(UCSR1A & (1<<RXC1)) )
    ;
    return UDR1;
    }

    wie baue ich denn hier jetzt die interrupt geschichte ein?
    macht das überhaupt sinn?
    ist dies erforderlich um empfangen zu können während man
    selbst sendet oder wie?

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.545
    Wenn man etwas Interrupt steuert wird das nur ausgeführt wenn es nötig ist (wenn ein Interrupt eintritt). Du kannst dann im Hauptprogramm z.B. Berechnungen und ähnliche Dinge tun.
    So wie es aussieht hast du fast keine Erfahrung. Du solltest ein Tutorial durchlesen wie z.B. http://www.mikrocontroller.net/artic...R-GCC-Tutorial. Dort steht das wichtigste drinnen. Wie du etwas einstellst (z.B. Interrupt aktivieren) steht alles im Datenblatt des jeweiligen Controllers. Die einzelnen Register die du z.B. beim UART benötigst sind nur UCSR1A bis UCSR1C (für die Einstellungen). Wie du Interrupts verwendest steht im Tutorial. In diesem Forum wird zwar geholfen, es ist aber Eigeninitiative gefragt (nicht Böse sehen).

    MfG Hannes

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    30.09.2008
    Ort
    Hamburg
    Alter
    36
    Beiträge
    54
    Kein Thema,

    meine Fragen wirken vielleicht ahnungslos,
    aber ich konnte schon mal mehr, habe dann
    aber zwei Jahre oder länger nichts mehr in die
    Richtung gemacht.....

Ähnliche Themen

  1. AT90USB162 Timing Probleme
    Von jwsk im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 15.11.2011, 20:19
  2. ATMega32 UART problem --> Problem gelöst
    Von ChristophB im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 19:45
  3. Anfängerprobleme mit AT90USB162
    Von Gerko im Forum Assembler-Programmierung
    Antworten: 14
    Letzter Beitrag: 18.10.2008, 15:26
  4. Problem mit dem Uart
    Von Desert-Storm im Forum Assembler-Programmierung
    Antworten: 1
    Letzter Beitrag: 15.06.2008, 17:50
  5. Problem mit UART
    Von Mule im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 07.10.2005, 16:58

Berechtigungen

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