www.mikrocontroller.net

Forum: Compiler & IDEs UART Ausgabe geht nicht


Autor: Peter Pan (nasenbaer_1982)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich möchte mit einem ATMEGA32 zeichen über die serielle Schnittstelle an 
den Rechner senden. Habe hierfür ein kleines Tesprogramm geschrieben 
welches auf Tastendruck von 0 bis 9 zählt und jeweils die Zahl auf einem 
Display und der Seriellen Schnittstelle ausgibt. Die Anzeige auf dem 
Display funktioniert einwandfrei, jedoch die Übertragung zum PC nicht. 
Habe ich da eventuell noch einen Fehler drin?

#include <avr/io.h>
#include <avr/delay.h>
#include <LCD4b.c>
#include <serial.c>

int main (void)
{
  DDRB = 0b11111111;      //Pins 0-7 als Ausgänge
  DDRC = 0b00000000;      //Pins 0-7 als Eingänge
  PORTC = 0xff;
  _delay_ms(100);
  _delay_ms(100);
  lcd_init();
  lcd_clear();
  serial_init();

  int tastenzaehler=0x30;

  while (1)
    {

    if ( !(PINC & (1<<PINC0)) )       // Taste ?
      {
        _delay_ms(50);
          lcd_out(&tastenzaehler);     // Zahl ausgeben
        tastenzaehler +=1;
        if(tastenzaehler == 0x3a)    // ei 9 wieder auf 0 setzen
          {
            tastenzaehler=0x30;
          }
        serial_send_char(tastenzaehler); // Zahl senden
      }



    }
}



//***********************************
// ***** serial.c *************

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


int serial_init()
{
  UCSRB |= ( 1 << TXEN );            // UART TX einschalten
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);  // Asynchron 8N1
    UBRRH  = 0;                                 // Highbyte ist 0
    UBRRL  = 103;                               // Lowbyte ist 103 ( 
9600 Baud bei 16 Mhz )                               // Lowbyte ist 51 ( 
dezimal )
  return 0;
}


int serial_send_char(unsigned char serial_char)
{
  while (!(UCSRA & (1<<UDRE)))          /* warten bis Senden moeglich 
*/
    {
    }
    UDR = serial_char;                        /* schreibt Zeichen auf 
die Schnittstelle */
  return 0;
}

Autor: Peter Pan (nasenbaer_1982)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt, hatte die Fuse bits falsch eingestellt. Sie standen 
auf internen Takt.

SORRY

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.