Forum: Compiler & IDEs UART Ausgabe geht nicht


von Peter P. (nasenbaer_1982)


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;
}

von Peter P. (nasenbaer_1982)


Lesenswert?

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

SORRY

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.