-         

Ergebnis 1 bis 4 von 4

Thema: Mega8 UART UBRRH und UCSRC Problem [gelöst]

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    473

    Mega8 UART UBRRH und UCSRC Problem [gelöst]

    Anzeige

    Hallo Forum,

    ich steh vor dem Problem, dass ich den UART im Mega8 nicht richtig initialisiert bekomme. Es steht ja im Datenblatt, dass UBRRH und UCSRC die gleiche Adresse haben und sich der Zugriff im siebten Bit dem URSEL unterscheidet. Jedoch läuft mein Code nicht und die Simulation zeigt, dass immer beide Register beschrieben werden.
    Habe auch verschieden Varianten ausprobiert: erst UBRRH dann UCSRC und umgekehrt. Erst UBRRL dann UBRRH und umgekehrt. Da tut sich aba nada... Böhhh.

    Jemand einen Vorschlag? Danke schön!!
    The Man

    Code:
    ldi tmp1,0b00010000;;receiver enable
    out UCSRB,tmp1
    
    ldi tmp1,0b10000110; 8 Bit Modus
    out UCSRC,tmp1
    
    ldi tmp1,LOW(25); Teiler für 
    out UBRRL,tmp1; 38,4k Baudrate
    ldi tmp1,HIGH(25); bei 16MHz
    out UBRRH,tmp1

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    473
    PS:
    ihr könnt auch schreiben, wenn ihr dazu keinen Rat habt, damit ich auch dahingehend eine Rückmeldung habe.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Also meine UART-Init für nen Mega8 sieht so aus (Allerdings C)
    Code:
      ui8_t sreg = SREG;
      ui16_t ubrr = (ui16_t) ((ui32_t) F_CPU / (16 * baud) - 1); // ist 0x33
      UBRRH = (ui8_t) (ubrr>>8);
      UBRRL = (ui8_t) (ubrr);
      cli();
      UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE);
      UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
      do
      {
        UDR;
      } while (UCSRA & (1 << RXC));
      UCSRA = (1 << RXC) | (1 << TXC);
      SREG = sreg;
    So haut das eigentlich gut hin.
    #ifndef MfG
    #define MfG

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    473
    such such such
    such such such

    Den Bock hab ich selbst geschossen, weil ich labels kopiert hatte beim Coden und eines nicht mit dem nächsten Indizee versehen hatte und fertig war die Endlosloop.

    Das es wie von mir beschrieben simuliert wird, ist entweder Absicht oder ein Simulationsbug.

Berechtigungen

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