Forum: Compiler & IDEs UART empfangen funktioniert nicht


von Kevin (Gast)


Lesenswert?

Moin Leute,

habe ein Problem ein Zeichen zu empfangen. Ich sende mit dem 
Hypertermial ein zeichen indem ich es in die Plattform über die Tastatur 
eingebe aber mein Programm geht nicht über die Abfrage ob ein Zeichen 
verfügbar ist hinaus. Kann mir jemand bei diesem Problem weiter helfen?

hier der Code:

void inti_uart(){
  UBRR0H  = UBRRH_VALUE >> 8;
  UBRR0L  = UBRRL_VALUE & 0xFF;

  UCSR0B |= (1<<RXEN0);

  // Sendestatus
  UCSR0C  =  (0<<UMSEL00)|    //EinstellungAsynchronmodus
        (0<<UMSEL01)|
        (0<<UCSZ02) |
        (1<<UCSZ01) |
              (1<<UCSZ00) ;

         }

int main(void){

DDRD  &= ~(1<<0);
DDRC   =  (1<<3)|(1<<4);
PORTC  =  (1<<3)|(1<<4);
PORTD &= ~(1<<0);

char led_on=0;

inti_uart();

while (!(UCSR0A & (1<<RXC0))) // wartet bis Zeichen verfügbar ist
  ;
PORTC ^= (1<<3);

led_on = UDR0;

if (led_on == 0)
{PORTC ^= (1<<4);
}


while(1)
    {

    }
}

P.S. Das senden habe ich in einen anderen Programm mit den gleichen 
Einstellungen getestet und es klappt. Also die Verbindung sich Terminal 
und Controller ist in Ordnung.

von Karl H. (kbuchegg)


Lesenswert?

> if (led_on == 0)

du wirst dir schwer tun, ein Zeichen mit dem ASCII Wert 0 über 
Hyperterminal zu versenden. :-)

  if (led_on == '0')

von Kevin (Gast)


Lesenswert?

Danke aber bis dahin kommt das Programm garnicht, denn die Prüfled nach 
der Abfrage geht nicht an. Woran kann es liegen?

von Karl H. (kbuchegg)


Lesenswert?

Dann wird er wohl hier in der Schleife hängen

while (!(UCSR0A & (1<<RXC0))) // wartet bis Zeichen verfügbar ist
  ;


Hast du im Hperterminal das Handshake ausgeschaltet bzw. mit einer LED 
am Tx Pin des µC kontrolliert, ob etwas ankommt?

von Kevin (Gast)


Lesenswert?

ich habe gerade mal nachgemessen also wenn ich sende habe ich kein high 
am TX
Pin aber was mache ich da falsch? Beim HTerminal habe ich das lokale 
Echo eingestellt damit ich sehe was ich sende

von Karl H. (kbuchegg)


Lesenswert?

Kevin schrieb:
> ich habe gerade mal nachgemessen also wenn ich sende habe ich kein high
> am TX

Mein Fehler.
Natürlich am Rx Pin vom Prozessor. Dort endet ja die Strecke die vom PC 
zum µC führt.

von Kevin (Gast)


Lesenswert?

habe es einfach mal mit einem anderen Terminalprogramm versucht und da 
hat gleich alles funktioniert.
danke für deine Hilfe

von Karl H. (kbuchegg)


Lesenswert?

Schätze mal du bist über das hier

> Hast du im Hperterminal das Handshake ausgeschaltet

gestolpert.

Im Hyperterminal ist standardmässig als Flusskontrolle (also als 
Handshake) "Hardware" eingestellt. D.h. wenn du dem PC den CLS Eingang 
an der seriellen nicht bedienst, sendet der nix. Flusskontrolle auf 
"keines" umstellen sollte den Spuk beseitigen.

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.