mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Usart zum PC At90Can128 funzt nicht


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin Anfänger und möchte gerne mit meinem STK501 Board eine 
Kommunikation zu einem Terminalprogramm am PC aufbauen über den USART.
Ich mach jetzt schon ne ganze Weile daran rum und bekomm es einfach 
nicht hin, irgendwie geht wohl mein UDRE1 flag nie auf 1, da ich immer 
in der while Schleife hängen bleibe, das kann ich an meinen LED's sehen.
Ich möchte eigentlich nur die Taste S0 drücken am STK501 und dann soll 
der Buchstabe x im Terminal erscheinen....
Bin bald am Verzweifeln, was mach ich falsch.??
Hier ist der Code:
Bitte um Hilfe.
Vielen Dank schon mal


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

int main (void)
{

//Port A und B initialisieren um Taster und LED`s zu steuern.
DDRB= 0xff;    //Ganzen Port B als Ausgang setzten
DDRA= 0x00;    //Ganzen Port A als Eingang setzten
PORTA= 0xff;  //Pull ab Widerstände für gesamten Port A aktiv



//USART Contollregister initialisieren siehe S.197 Datenblatt

                     /* USART-Init 19200 Baud bei 4MHz für AT90CAN128 */
UCSR1B |= ( 1 << TXEN1 );        // UART TX einschalten
UCSR1C |= ( 1 << UMSEL1 )|(0<<UPM1)|(1<<USBS1)|( 3<<UCSZ1 );  // 
Asynchron modus Character Size 8-bit,2 Stopbit, kein Parity
UBRR1H  = 12;                           // Highbyte ist 12
UBRR1L  = 25;                           // Lowbyte ist 25 ( dezimal ) 
ergibt 19,2k bei 4Mhz Clocktakt

  while (1)
  {

    if (!(PINA & (1<<PA0)) )  //Wenn PIN 0 von Port A 0 ist dann....
    {

      UCSR1A |=
      //PORTB = PORTB & ~(1<<PB4);  // setzte Pin4 an Port B (LED)
      //PORTB &= ~(1<<PB4);
      PORTB |= (1<<PB4);        // setzte Pin4 an Port B (LED)

         while (!(UCSR1A & (1<<UDRE1)))  /* warten bis Senden moeglich 
solange UDRE1 flag ist nicht*/
              {              /* 1 ist (also 0), durchlaufe die 
Schleife*/
            }

              UDR1 = 'x';                    /* schreibt das Zeichen x 
auf die Schnittstelle */

    }

      else
      {
        PORTB &= ~(1<<PB4);
      }

  }
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> UBRR1H  = 12;   // Highbyte ist 12
> UBRR1L  = 25;   // Lowbyte ist 25 ( dezimal )
Das stimmt doch schon mal überhaupt nicht. Das High-Byte muss lt. 
Datenblatt bei den gewünschten Einstellungen 0 sein und das Low-Byte 12! 
Außerdem unterstützt der Compiler 16-Bit-Zugriffe. Also
UBRR1 = 12;
Und mehr nicht!

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schon mal,
werde ich gleich mal probieren, sollte es das schon gewesen sein, wärs 
echt der Hit, denke das ich dann selber weiter komme.
Das der Compiler allerdings 0 Warnungen geschweigedenn Fehler angezeigt 
hat bei meinem Code ist mir ein Räzel.

Danke Gruß
Simon

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C tut wehhhhhhhhh  ;--)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.