-
        

Ergebnis 1 bis 8 von 8

Thema: Uart-Problem nach Microcontroller-Umstellung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2006
    Ort
    Weimar
    Beiträge
    19

    Uart-Problem nach Microcontroller-Umstellung

    Anzeige

    Hallo,
    ich habe bei meiner Schaltung den ATMega32L 8AI (8Mhz) aufgrund eines Defektes gegen eine ATMega32 16AU (16Mhz) ersetzen müssen. In der Schlatung gibt es einen externen Quarz mit 8Mhz. Seitdem funktioniert das UART nicht mehr, obwohl ich meines Wissens nach das Register UBRRL richtig angepasst habe. Ich möchte eine Baud-Rate von 38400 haben.
    Was fehlt denn hier? Evtl. habe ich was übersehen. Vielleicht kann mir jemand von Euch helfen. Danke

    Hier mein Uart-Init-Code:

    Code:
    // Initialisierung UART
    void uart_init (void)
    {
    /* USART-Init 38400 Baud bei 8MHz für Mega32 */
      UCSRB = ( (1<<RXCIE) | (1<<RXEN) | (1<<TXEN) );
    /* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
      UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
      UBRRH  = 0;        // Highbyte ist 0
      UBRRL  = 25;       // beim ATmega32L 8AI stand hier 12
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    34
    Beiträge
    979
    hast du den die fuses am neuen mega32 auf externen quarz gestellt? sonst tickt der mit dem internen 1MHz.....

    gruss bluesmash

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2006
    Ort
    Weimar
    Beiträge
    19
    Äh, nö habe ich wahrscheinlich nicht gemacht. Bei dem alten Atmel habe ich das wahrscheinlich auch nicht gemacht. Wie stelle ich das denn ein?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Hast du jetzt auch nen 16er Quarz drin, oder noch den alten 8er? Wenn du bei 8Mhz gebleiben bist, musst du auch die UBRR-Einstellung auf den alten Werten lassen... ausschlaggebend ist immer der tatsächliche Takt, nicht der maximal mögliche (16Mhz)

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2006
    Ort
    Weimar
    Beiträge
    19
    Der 16Mhz Atmel benutzt auch einen 8Mhz Quarz. Ich bin mir aber im Moment überhaupt nicht sicher, ob ich den externen Quarz je benutzt habe. Ich glaube fast, dass ich selbst bei dem alten AtMega32 immer den internen Quarz benutzt habe. Bei den alten UBRR-Werten funktioniert das UART aber auch nicht richtig.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Die 12 würde jedenfalls für 8Mhz passen...
    Mit den internen 1Mhz kriegst du deine Baudrate nicht hin. Schon deswegen, aber auch wegen der größeren Taktgenauigkeit müsstest du also die Fusebits auf den externen Quarz umstellen.
    Mit welcher Übertragungssoftware und mit welcher ISP-Variante arbeitest du?

    PS: das Berechnen der Werte für die Register kann auch der Präprozessor erledigen (siehe mikrocontroller.net-Tutorial)
    Code:
    /* USART-Init beim ATmega32 */
      #ifndef F_CPU
      #define F_CPU 8000000          /* Oszillator-Frequenz in Hz hier angeben */
      #endif
    
      // Hilfsmakro zur UBRR-Berechnung ("Formel" laut Datenblatt)
      #define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
    
      #define UART_BAUD_RATE 38400  //gewünschte Baudrate hier angeben 
    
      UBRRH = (uint8_t)(UART_UBRR_CALC(UART_BAUD_RATE,F_CPU)>>8);
      UBRRL = (uint8_t)UART_UBRR_CALC(UART_BAUD_RATE,F_CPU);

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2006
    Ort
    Weimar
    Beiträge
    19
    Ich arbeite mit PonyProg2000 und programmiere den Atmel über parallel AVR-ISP. Wie setze ich den die Fusebits?

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    anleitung:
    http://www.elektronik-projekt.de/inc...68f3bf5fb43e06

    PS: JTAGEN auch gleich ändern, sonst kannst du nicht alle Pins an PortC benutzen.

Berechtigungen

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