- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Senden eines Zeichen Per USART (ATMEGA32)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.10.2006
    Beiträge
    33

    Senden eines Zeichen Per USART (ATMEGA32)

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,

    ich brauche Ihre Hilfe.
    Und zwar habe ich mir ein Atmel Evaluationboerd Ver. 2.0 von Pollin gekauft.
    Ich habe ein einfaches Programm geschrieben, in dem ich ein Zeichen Per-USART an Hyperterminal senden möchte.
    Aber leider ich bekomme an meinem Hyperterminal immer das ungewölte Zeichen.
    mein Programm sieht so aus:

    Code:
    #include <stdio.h>
    #include <avr/io.h>
    #include <inttypes.h>
    #include <avr/wdt.h>
    
    
    void send (int data)
    {
       while (!(UCSRA & 32) );
       UDR=data;
    }
    
    
    
    int main( void)
    {
    
    
    char z= 'A'; 
    DDRD = 0x20;
    UBRRL = 51;
      UCSRB = 8;
    UCSRC = 131;
    
    while (1) {
    
     if ( PIND & 0x04 ){
       PORTD = 0x20;
       
    
    
       while (1)
         {
        wdt_reset ();
    	
        send(z);
         }
      
                       }
    
      }
    
    
    
    return 0;
    
    }
    Die Einstellung von Hyperterminal war in Ordnung.

    Als Ergebnis bekomme ich an meinem Hyperterminal das folgende Bild:

    €€€€€€€€€€€€€€€€€€€€€€€€€€€€
    €€€€€€€€€€€€€€€€€€€€€€€€€€€€

    Was meint Ihr ? Oder was war falsch in meinem Programm geschrieben?
    Ich danke euch im voraus.....


    [/flipv]

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Hallo,

    das Problem gehört an sich ins C Forum. Den Code bitte in [ c o d e ] quellcode [ / c o d e ] einfassen. Dann bleibt die Formatierung erhalten.
    Komische Zeichen sind eigentlich immer ein Zeichen für ein Baudratenproblem. Controllertakt stimmt nicht oder UBRR wurde falsch berechnet. Was du da in Dezimalform in die Register schreibst, bin ich zu faul zum auseinander tüfteln. Die Schreibweise wie in diesem Programm macht eine Fehlersuche deutlich einfacher.

    1.Für solche Tests immer den Watchdog aus!
    2.Takteinstellung in den Fusebits und in den Projekteinstellungen prüfen.
    3. UBRR Berechnung kontrollieren.

    Wenn es dann immer noch nicht geht, die Einstellungen aus Hyperterminal mit angeben, Taktquelle und Frequenz nennen.
    Wir können sonst nur Rätsel raten.

    Gruß

    Jens

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Welchen Kontroller
    Taktfrequenz, Baudrate
    Was hast du am Terminal eingestellt
    Wenn du schreiben würdest UCSRB= (1<<RXCIE); wäre das besser lesbar, 131 für UCSRC muss ich mir erst raussuchen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    17.10.2006
    Beiträge
    33
    Hallo Hubert,

    Danke für deine Antwort.

    Der Kontroller heisst ATMEGA32L8PU.

    Meine Einstellungen am Hyperterminal waren wie folgt:
    Baudrate: 9600
    Datenbits:8
    Parität: Keine
    Stoppbits:1

    für das Programm sieht so aus:
    #include <stdio.h>
    #include <avr/io.h>
    #include <inttypes.h>
    #include <avr/wdt.h>


    void send (int data)
    {
    while (!(UCSRA & 32) );
    UDR=data;
    }



    int main( void)
    {


    char z= 'A';
    DDRD = 0x20;
    UBRRL = 51;
    UCSRB |= (1<<TXEN);
    UCSRC = (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1);

    while (1) {

    if ( PIND & 0x04 ){
    PORTD = 0x20; //Hier habe ich eine Led angechaltet.


    while (1)
    {
    wdt_reset ();

    send(z);
    }

    }

    }



    return 0;

    }


    danke.....

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    17.10.2006
    Beiträge
    33
    der Quarz hat 8Mhz.....

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    17.10.2006
    Beiträge
    33
    habe ich vergessen....
    der Quatz hat 8Mhz.....

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Hast du es mit der neuen Schreibweise noch mal probiert?
    UCSRC =131; ist nämlich nicht das gleiche wie UCSRC = (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1); das ergibt 134.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    17.10.2006
    Beiträge
    33
    habe ich gerade in meinem Programm die Änderung aufgenommen.
    Aber es hat nicht geklappt...

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Mal auf die schnelle mit meinem STK und einen Mega16 getestet. Funktioniert mit HyperTerminal einwandfrei. Es kommen A.
    Bist du sicher das nicht der Interne Takt läuft? Bei mir geht es nur mit Quarz, mit internem Takt kommt Unsinn.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    17.10.2006
    Beiträge
    33
    Danke für deine Idee...Ich habe nur den Wert von UBRRL geändert und habe ich eine andere Buchstabe am Hyperterminla bekommen. Das heisst etwas stimmt nicht. Ich muss den Externen Quarz auswählen...
    Wie das geht werde ich mal im Datasheet anschauen...oder was meinst du??

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen