- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Atmega32/STK500 -UART senden/empfangen klappt nicht

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    15.11.2006
    Beiträge
    13
    Anzeige

    Powerstation Test
    Hi Micro5,

    besten Dank fürs online-stellen Deines Quellcodes. Ich habe den Quelltext 1 zu 1 in mein AVR-Studio kopiert, Frequenz und Baudrate geändert, kompiliert, übertragen und ausprobiert - keine Änderung.

    Dein Terminalprogramm habe ich auch ausprobiert. Es liefert aber auch genau das zurück, was mein anderes Terminalprogramm TerraTerm auch zurück gibt.

    Irgendwo ist also noch der Wurm drin. Ich denke, ich werde es jetzt doch wie vorgeschlagen mal im Mikrocontroller-Forum probieren.

    Besten Dank für Eure Hilfe bis hierhin.

    Grüße
    Leuchtturm

  2. #12
    Hi Leuchtturm

    hast du die Fusebits des Atmegas richtig gesetzt? Wenn du einen neuen eingesetzt hast, wovon ich mal ausgehe, musst du noch die Fusebits einstellen, damit er auch mit dem externen Quarz getaktet wird, ansonsten läuft er mit dem intern 1MHz oszillator und dann stimmt die ganze Berechnung für die Baudrate nicht mehr. Dadurch kommt es dann zu falsch übertragenen Zeichen wie bei dir.

    Gruß D'oh

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    15.11.2006
    Beiträge
    13
    Hi D´oh,

    wie Du schon sagst, war die Baudratenberechnung das Problem.

    Ich habe das Programm nach Hilfestellung im Mikrocontroller-Forum etwas abgeändert und nun läuft das wie gewünscht:

    #include <avr/io.h>
    #include <inttypes.h>

    /* CPU Frequenz */
    #define F_CPU 1000000UL //Frequenz 1 Mhz

    #define BAUD 9600UL //Baudrate


    // USART initialisieren
    void uart_init(void)
    {
    // Baudrate einstellen (Normaler Modus)
    #if F_CPU < 2000000UL
    UCSRA = (1 << U2X);
    UBRRL = F_CPU / (8 * BAUD) - 1;
    #else
    UBRRL = F_CPU / (16 * BAUD) - 1;
    #endif

    // Aktivieren von receiver und transmitter
    UCSRB = (1<<TXEN) | (1<<RXEN);

    // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    }

    int main(void)
    {
    uint8_t buffer;

    DDRA=0xff; //Port A als Ausgang

    // USART initialisieren
    uart_init();

    while (1)
    {
    // Warten bis Daten empfangen wurden
    while ( !(UCSRA & (1<<RXC)) );

    // Empfangsregister auslesen
    buffer = UDR;

    if(buffer==0x31) //Wenn der PC das Zeichen "1" sendet,
    PORTA=0x01; //dann die erste LED ausschalten
    else //sonst
    PORTA=0x00; //alle LED´s ein

    // Warten bis der Sendepuffer frei ist
    while ( !( UCSRA & (1<<UDRE)) );

    // Daten in den Puffer schreiben und damit senden
    UDR = buffer;
    }
    return 0;
    }

    Grüße
    Leuchtturm

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress