-         

Ergebnis 1 bis 5 von 5

Thema: Atmega48 - Uart klappt nicht ?!?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251

    Atmega48 - Uart klappt nicht ?!?

    Anzeige

    Hallo,

    Ich versuche mich grade mit dem atmega48, habe die fusebits so:
    Code:
    High-Fuse = 11011111
    Low-Fuse = 01100010
    Der Beispielcode sieht so aus:
    Code:
    /*************************************************************************
    Title:    example program for the Interrupt controlled UART library
    Author:   Peter Fleury <pfleury@gmx.ch>   http://jump.to/fleury
    File:     $Id: test_uart.c,v 1.5 2012/09/14 17:59:08 peter Exp $
    Software: AVR-GCC 3.4, AVRlibc 1.4
    Hardware: any AVR with built-in UART, tested on AT90S8515 at 4 Mhz
    
    DESCRIPTION:
              This example shows how to use the UART library uart.c
    
    *************************************************************************/
    #include <stdlib.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>
    
    #include "uart.h"
    
    #define F_CPU 8000000UL
    
    
    /* 9600 baud */
    #define UART_BAUD_RATE 9600      
    
    
    int main(void)
    {
        unsigned int c;
        char buffer[7];
        int  num=134;
    
        
        /*
         *  Initialize UART library, pass baudrate and AVR cpu clock
         *  with the macro 
         *  UART_BAUD_SELECT() (normal speed mode )
         *  or 
         *  UART_BAUD_SELECT_DOUBLE_SPEED() ( double speed mode)
         */
        uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
        
        /*
         * now enable interrupt, since UART library is interrupt controlled
         */
        sei();
        
        /*
         *  Transmit string to UART
         *  The string is buffered by the UART library in a circular buffer
         *  and one character at a time is transmitted to the UART using interrupts.
         *  uart_puts() blocks if it can not write the whole string to the circular 
         *  buffer
         */
        uart_puts("String stored in SRAM\n");
        
        /*
         * Transmit string from program memory to UART
         */
        uart_puts_P("String stored in FLASH\n");
        
            
        /* 
         * Use standard avr-libc functions to convert numbers into string
         * before transmitting via UART
         */     
        itoa( num, buffer, 10);   // convert interger into string (decimal format)         
        uart_puts(buffer);        // and transmit string to UART
    
        
        /*
         * Transmit single character to UART
         */
        uart_putc('\r');
        
        for(;;)
        {
            /*
             * Get received character from ringbuffer
             * uart_getc() returns in the lower byte the received character and 
             * in the higher byte (bitmask) the last receive error
             * UART_NO_DATA is returned when no data is available.
             *
             */
            c = uart_getc();
            if ( c & UART_NO_DATA )
            {
                /* 
                 * no data available from UART 
                 */
            }
            else
            {
                /*
                 * new data available from UART
                 * check for Frame or Overrun error
                 */
                if ( c & UART_FRAME_ERROR )
                {
                    /* Framing Error detected, i.e no stop bit detected */
                    uart_puts_P("UART Frame Error: ");
                }
                if ( c & UART_OVERRUN_ERROR )
                {
                    /* 
                     * Overrun, a character already present in the UART UDR register was 
                     * not read by the interrupt handler before the next character arrived,
                     * one or more received characters have been dropped
                     */
                    uart_puts_P("UART Overrun Error: ");
                }
                if ( c & UART_BUFFER_OVERFLOW )
                {
                    /* 
                     * We are not reading the receive buffer fast enough,
                     * one or more received character have been dropped 
                     */
                    uart_puts_P("Buffer overflow error: ");
                }
                /* 
                 * send received character back
                 */
                uart_putc( (unsigned char)c );
            }
        }
        
    }
    Bekomme keine Compilerfehler, kommt aber auch nichts an RX/TX an ?!?


    mfG
    Philip

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647
    Hast du an beiden Geräten die richtige Baudrate eingestellt?
    Sicher das dein Atmega auf 8Mhz läuft?
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Hast du an beiden Geräten die richtige Baudrate eingestellt?
    9600

    Sicher das dein Atmega auf 8Mhz läuft?
    Habe auf internen 8mhz Takt gestellt, kann ja mal ein 16mhz quarz dran machen, falls das besser ist.

    // Hat nicht geklappt. Am UART adapter liegt es nicht, wenn ich RX und TX kreuze, kommt das zurück, was geschickt wird.
    Geändert von AsuroPhilip (11.05.2013 um 14:52 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647
    Hast du denn die richtigen Pins am Atmel genommen?

    Läuft dein UART Adapter rein zufällig auf +-12V? Dann kann es nicht funktionieren. Du müsstest dann einen Max232 dazwischen schalten und wenn du pech hast einen neuen Atmel nehmen.

    Gib mal mehr Details preis!

    Link zum UART Adapter...
    Schaltplan deiner Platine...
    usw.
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Ist der UART Adapter vom RP6, wo ich RX, TX und GND abgreife (5V).
    Schaltung sieht so aus, angepasst am mega48 :
    Klicke auf die Grafik für eine größere Ansicht

Name:	800px-Avrtutorial_grundschaltung_mitquarz.gif
Hits:	7
Größe:	63,7 KB
ID:	25451
    RX und TX einfach überkreuz und gnd am mega48 angeschlossen.

Ähnliche Themen

  1. Atmega48 tut nicht so wie ich will
    Von Halodri im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 04.12.2010, 11:17
  2. UART Ein-Ausgabe mit mega168 klappt nicht
    Von sthomson im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 05.06.2010, 00:41
  3. Atmega48 Uart Wahnsinn
    Von Ls4 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 14.11.2009, 14:53
  4. Atmega32/STK500 -UART senden/empfangen klappt nicht
    Von Leuchtturm im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 16.01.2007, 15:02
  5. Probleme mit UART@Atmega48
    Von Funky im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 27.07.2006, 10:46

Berechtigungen

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