Forum: Mikrocontroller und Digitale Elektronik Uart Problem / Terminal zeigt nichts an!


von Pete (Gast)


Lesenswert?

Hi,

brauche dringend Hilfe! Weis echt nicht wo das Problem liegt... denke 
aber ehr beim Code oder beim Terminalprogramm, Hardware müsste stimmen.
Wär cool fall irgendjemand von euch mal zeit hätte und mein Code durch 
gehn könnte ob ich irgendwo ein Fehler gemacht habe.

Benutze den Atmeg88 mit eim 18,432 Mhz Quarz habe das Programm laut 
Datenblatt und Programm Beispiel vom GCC-Tutorium geschrieben.

Und als Terminal Programm habe ich Hterm benutzt und Hyperterminal 
(obwohl ich da nicht so ganz durch geblickt habe) Stelle immer 9600 Baud 
und 1 stopbit zeigt aber gar nichts an.

Hoffe ihr könnt mir helfen.
Grüße
Pete

Hier mein ProgrammCode wusste leider nicht wie ich ihn als solchen 
darstellen kann:

// Festlegung der Quarzfrequenz
#define F_CPU 18432000UL

// Include von Header-Dateien

#include <avr/io.h>
#include <stdbool.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Festlegung der Baudrate
#define BAUD 9600UL
#define MYUBRR F_CPU/16/BAUD-1


#define SET_BIT(PORT,BIT)  ((PORT) |= (1<<(BIT)))    // macro to set 
bits
#define CLEAR_BIT(PORT,BIT)  ((PORT) &= ~(1<<(BIT)))    // macro to 
clear bits


void USART_Init(void);
int USART_Transmit_c(unsigned char c);


// Hauptprogramm 
==============================================================

int main( void )
{

  unsigned char c;

  USART_Init();

    while(1)
      {
         for (uint8_t i=0; i<=9; ++i)
           {
                c = i + '0';
                 USART_Transmit_c(c);
           }
      _delay_ms(1000);
      }

}




// Unterprogramme 
==========================================================

// UART Initalisieren=================================

void USART_Init(void)
  {
    CLEAR_BIT(DDRD,0);
    CLEAR_BIT(PORTD,0);


    UBRR0H=0x00;
    UBRR0L=MYUBRR;

      UCSR0A |= (0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | 
(0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0);



      UCSR0B |= (0<<RXCIE0) | (1<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | 
(1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);


    // Set frame format: 8data, 1stop bit
      UCSR0C |= (0<<UMSEL01) | (0<<UMSEL00) | (0<<UPM01) | (0<<UPM00) | 
(0<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00) | (0<<UCPOL0);

}

// Zeichen an PC versenden=================================

int USART_Transmit_c(unsigned char c)
  {

    /* Wait for empty transmit buffer */
    while ( !( UCSR0A & (1<<UDRE0)) )
      {
      }

    /* Put data into buffer, sends the data */
    UDR0 = c;

   return 0;
  }

von Blödmann (Gast)


Lesenswert?

Such mal hier im Forum. Das Problem ist schon erschöpend behandelt 
worden.
Ich rate Dir nicht davon auszugehen, das die Hardware in Ordnung ist.

von spess53 (Gast)


Lesenswert?

Hi

>      UCSR0A |= (0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) |
>(0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0);

Absolut sinnlos.

>      UCSR0B |= (0<<RXCIE0) | *(1<<TXCIE0)* | (0<<UDRIE0) | (0<<RXEN0) |
>(1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);

Wo ist deine Interruptroutine?

MfG Spess

von Dietrich L. (dietrichl)


Lesenswert?

Pete schrieb:
> Und als Terminal Programm habe ich Hterm benutzt und Hyperterminal
> (obwohl ich da nicht so ganz durch geblickt habe) Stelle immer 9600 Baud
> und 1 stopbit zeigt aber gar nichts an.

Als Erstes machst Du mal eine Brücke zwischen Pin 2 und 3 (RxD und TxD) 
am Kabel zum PC (also ohne Deinen µC). Dann musst Du die mit der 
Tastatur gesendeten Zeichen am Bildschirm sehen (Echo). Wenn nicht: 
Terminalprogramm falsch konfiguriert oder sonst was am PC falsch oder 
kaputt :-((

von Dietrich L. (dietrichl)


Lesenswert?

spess53 schrieb:
> Wo ist deine Interruptroutine?

Es geht auch ohne...

von Pete (Gast)


Lesenswert?

Danke für eure Hilfe! Das mit dem Echo war ne Klasse Idee!
Mein Fehler war es das ich die drähte für Txd und Rxd von einer platine 
zur anderen gekreutzt habe und nicht dran gedacht hab das ich die auf 
der anderen platine auch schon gekreutzt habe -.-

naja jetzt läufts!

Danke noch mal!

Grüße Pete

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.