-         

Ergebnis 1 bis 5 von 5

Thema: Problem mit dem USART Code

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94

    Problem mit dem USART Code

    Anzeige

    HI, ich hab hier mal den Code zur testweisen implementierung des USART im ATmega 8. Leider kommt aber am Terminal nichts an. Die Einstellungen sollten korrekt sein, jedoch kann ich das Kabel nicht ohne weiteres überprüfen. Ich poste hier einfach mal den code:

    <CODE>
    // Prototypen wie folgt: -------------
    void USART_init(void);
    void USART_putc(char c);
    void USART_puts(char *s);


    int main(void)
    {
    char *text;

    DDRB = 0xFF; // PORTB als AUSGANG
    USART_init(); // USART initialisieren

    text = "eins zwei drei!";

    for(;
    {
    USART_puts(text);
    _delay_ms(500);
    }
    return 0;
    }

    /*------------------------------------
    USART_init()
    -------------------------------------*/

    void USART_init(void)
    {

    //UBRRH = (uint8_t) (BAUD>>;
    UBRRL = 23; // Ergibt die Berechnung nach Formel aus Datenblatt


    //enable transmitter

    UCSRB |= (1<<TXEN);

    // set frame format:

    UCSRC |= (1<<URSEL) | (3<<UCSZ0);
    }

    /*-----------------------------------------------------------------------------------
    USART_putc()
    sendet ein einzelnes Zeichen, das mit "c" als Parameter übergeben wird
    ------------------------------------------------------------------------------------*/

    void USART_putc(char c)
    {
    while( !(UCSRA & (1<<UDRE)) )
    ;

    // Daten in USART Datenreg. schieben, sendet automatisch
    UDR = c;
    }

    /*-----------------------------------------------------------------------------------
    USART_puts()
    sendet einen String (indirekt), indem für jedes stringelement
    USART_putc() aufgerufen wird.
    ------------------------------------------------------------------------------------*/
    void USART_puts(char *s)
    {
    while ( *s )
    {
    USART_putc(*s);
    s++;
    }
    }
    </CODE>

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Auf Anhieb sehe ich da nix, im wesentlichen ist das gleich dem UART-Beispiel ausm Wiki.

    Ein Baudraten-Rechner ist auf der Seite bei den Weblinks.

    Stimmen die Einstellungen am PC?

    Bei den Initialisierungen werden nur Bits gesetzt, keine gelöscht... UBSRC = ist da klarer (und kürzer).

    Taste mal den TxD-Pin mit ner LED, ob da was kommt. Evtl TxD als OUT schalten. Sollte die AVR-Hardware machen...
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Hallo,

    wie ist denn die Atmega8 am Terminal angeschlossen?

    Die Atmega8 liefert digitale signale von 0 bis 5V und ein Terminal braucht positieve und negatieve Signalen...?

    Ubrigens:
    DDRB = 0xFF; // PORTB als AUSGANG
    ist uberflussig,

    sobald dieze code ausgefuhrt wird
    //enable transmitter
    UCSRB |= (1<<TXEN);

    wird die TXD pin als Ausgang geschaltet

    und bei 'Disable transmitter'
    UCSRB &= ~(1<<TXEN);

    wieder wie zuvor eingestelt

    In deine code bleibt TXD pin nach abschalten der transmitter
    immer als Ausgang geschaltet wegen des DDRB = 0xFF.

    Gruss

    Henk

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    Hey Danke, das problem hat sich von selbst gelöst. Hab einfach mal ein anderes Kabel verwendet.

    cya

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.141
    Ein RS232-Kabel lässt sich sehr einfach testen:
    - Eine Seite am PC anschließen und HyperTerminal starten
    - an der anderen Seite die Anschlüsse 2 und 3 (TxD und RxD) brücken (mit nem Jumper gehts am einfachsten, man kann sich aber auch leicht ein Stückchen Draht zurechtbiegen)
    - Auf der Tastatur ein paar Tasten drücken

    Wenn das Kabel ok ist, kommt im Terminal genau das an, was man eintippt. Wenn nix ankommt, ist das Kabel hin...

    askazo

Berechtigungen

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