www.mikrocontroller.net

Forum: Compiler & IDEs UART Empfang mit Atmega168 funktioniert nicht


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich versuche gerade verzweifelt mit meinem Atmega168 etwas zu empfangen. 
Hatte damals mein MyAVR Board mit einem Atmega8 und da ich mich vor 
kurzem aus meinem Atmega8 ausgesperrt habe durch falsche FuseBits hab 
ich mir den 168er gekauft.

Das versenden vom µc an den PC funktioniert ohne Probleme...
Hier mal der Code:

<code>
#define F_CPU 3686400
#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)

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

void sendUart(char* cmd)
{
  do
  {
    while (!(UCSR0A & (1<<UDRE0)))  {}              // Warten bis man 
senden kann
    UDR0 = *cmd++;                                  // senden und zum 
nächsten zeichen wechseln
  }
  while(*cmd);                                      // so lange bis das 
ende erreicht ist
}

unsigned char USART_Receive( void )
{
  /* Wait for data to be received */
  while ( !(UCSR0A & (1<<RXC0)) )
    ;
  /* Get and return received data from buffer */
  return UDR0;
}

void USART_Init( unsigned int baud )
{
  /* Set baud rate */
  UBRR0H = (unsigned char)(baud>>8);
  UBRR0L = (unsigned char)baud;
  /* Enable receiver and transmitter */
  UCSR0B = (1<<RXEN0)|(1<<TXEN0) | (1<<RXCIE0);
  /* Set frame format: 8data, 2stop bit */
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}

ISR(USART_RX_vect)
{
  PORTC = 0xFF;
}

int main(void)
{
  USART_Init(USART_BAUD_SELECT);
  sei();
  DDRC = 0xFF;
  sendUart("Programm gestartet\n");
  PORTC = 0x00;
  //USART_Receive();
  //PORTC = 0xFF;
  for(;;){}
}
</code>

USART_Init() und USART_Receive() hab ich aus dem Datenblatt übernommen.
Die Baudrate und das initialisieren müsste korrekt sein, da das Senden 
ja funktioniert.
Nur egal ob ich die USART_Recieve(); verwende, oder die 
Interrupt-methode, es passiert beidesmal nichts!! Das Kabel hab ich auch 
schon durchgemessen, das müsste funktionieren. Ich verstehe das nicht. 
Mit dem Atmega8 hat damals der Empfang auch funktioniert ( ist aber 
schon 1 1/2 Jahre her)

Der Code müsste doch richtig sein oder nicht?

Was mache ich falsch?

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hardware-Probleme ausgeschlossen?

D.h., die RXD-Leitung liegt auf 5V und das Multimeter "zuckt", wenn 
Daten vom PC ankommen?

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das versenden vom µc an den PC funktioniert ohne Probleme...

Am PC eventuell noch das Handshaking aktiv?

> Hatte damals mein MyAVR Board mit einem Atmega8 und da ich mich
> vor kurzem aus meinem Atmega8 ausgesperrt habe durch falsche
> FuseBits hab ich mir den 168er gekauft.

Du weist wie du den Mega8 wieder öffnen kannst?

Autor: Manuel Bührer (man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver Döring wrote:
> Hardware-Probleme ausgeschlossen?
>
> D.h., die RXD-Leitung liegt auf 5V und das Multimeter "zuckt", wenn
> Daten vom PC ankommen?


Also die RXD und TXD Leitungen sind am µc gemessen beide auf 5v (PD0 und 
PD1)

Wenn etwas ankommt müsste, zuckt aber nichts. Es bleibt ganz ruhig auf 
der gleichen Spannung.


Karl heinz Buchegger wrote:
>> Das versenden vom µc an den PC funktioniert ohne Probleme...
>
> Am PC eventuell noch das Handshaking aktiv?

Keine Ahnung... ich benutze KontrollerLab und da war das einzigste was 
ich eingegeben hab die Baud rate und das Device ansonsten nichts.
Später hab ichs mal mit
echo "test" > /dev/ttyS0
nach dem ich mit
setserial /dev/ttyS0 uart 16550A
den comport für uart eingestellt habe.


> Du weist wie du den Mega8 wieder öffnen kannst?

So viel ich weis hab ich den µc wohl auf externe Clocksource 
eingestellt. Also müsste ich halt irgendwie nen Takt erzeugen eventuell 
mit nem anderen µc. Oder gibts noch was besseres?

Autor: Manuel Bührer (man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade festgestellt, dass mit dem myAvr Controlcenter (hab das 
myAvr board) die UART Kommunikation in beide Richtungen funktioniert!! 
Und sogar mit hyperterm funktioniert es plötzlich. Ich hatte einfach 
vergessen Flusssteuerung auf keine einzustellen. mit echo "test" > 
/dev/ttyS0 gehts jetzt auch. Jetzt würde mich nur noch sehr 
interessieren wieso es nicht mit Kontrollerlab funktioniert.

Autor: cadManiac (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich bin einer der Entwickler von KontrollerLab. Es geht deshalb nicht, 
weil wir beim KontrollerLab standardmäßig (und ohne groß darüber 
nachzudenken, aber so entstehen ja die meisten Bugs :-) ) die 
Flußkontrolle per RTS/CTS eingeschaltet hatten. Das ist mittlerweile 
gefixt, man kann das jetzt einstellen wie man will (RTS/CTS, XON/XOFF 
oder keine Flusskontrolle). Das ist dann in der 0.7.1er Version drin, 
die in ca. 3 Tagen erscheinen wird.

Für eilige: Man kann sich das ganze natürlich auch aus den Sourcen 
selber bauen und das ganze aus dem SVN repository ziehen. Bitte seid 
nicht irritiert, dass da bereits die Toolbar für den Debugger drin ist, 
die aber noch nicht funktioniert. Ignoriert sie einfach :-) Das kommt 
dann alles noch in einem guten Monat oder so.

viele Grüße,
Martin

Autor: Manuel Bührer (man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das freut mich! wird es auch gleich ein (K)ubuntu-deb geben?

Gruß
Manuel

Autor: cadManiac (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, war länger nicht mehr hier. Nur der Vollständigkeit halber: Ja, 
den gibts. Das hast Du aber wahrscheinlich längst bemerkt ;-)

Viele Grüße,
Martin

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.