mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega168 USART und Minicom


Autor: Conker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe noch keine besonders große Erfahrung mit AVRs. Jedoch hab ich 
mir vorgenommen die Basics zu lernen und nachher ein X-Ufo zu komplett 
selbst basteln.

PWM habe ich schon hingekriegt. Jetzt hänge ich aber im Moment am USART:
Der AVR kann Daten an den PC senden und diese kann ich mit Minicom unter 
Linux empfangen.
Jedoch kann ich keine Daten mit dem PC an den AVR senden, ich drücke 
Tasten, minicom zeigt mir die Zeichen im Terminal an, aber der AVR 
empfängt nichts :?

Als Format habe ich 57600 8N2  eingestellt.
Ich verwende 2 verschiedene Funktionen zum Senden u.A. aus dem Tutorial 
und aus den Atmel Datenblättern übernommen.
void USART_Init( unsigned int ubrr)
{
  /*Set baud rate */
  UBRR0H = (unsigned char)(ubrr>>8);
  UBRR0L = (unsigned char)ubrr;
  /*Enable receiver and transmitter */
  UCSR0B = (1<<RXEN0)|(1<<TXEN0) | (1<<RXCIE0);
  /* Set frame format: 8data, 2stop bit */
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}

void USART_Transmit( unsigned char data )
{
  /* Wait for empty transmit buffer */
  while ( !( UCSR0A & (1<<UDRE0)) );
  /* Put data into buffer, sends the data */
  UDR0 = data;
}

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
}
Interrupts habe ich global aktiviert mit sei();
Hier der Interruptvektor, jedoch wird er scheibar gar nicht aufgerufen:
ISR(USART_RX_vect) // rx interrupt
{
char data = UDR0;
sendUart("Zeichen empfangen : ");
USART_Transmit(data);
sendUart("\n\r");
}

Hat jemand vielleicht eine Idee was noch fehlt oder was ich generell mit 
minicom falsch mache ?

Conker

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupts sind eingeschaltet?

Autor: Conker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja,
Interrupts habe ich global aktiviert mit sei();

ich verwende einen mySmartUSB-Adapter, auf dem sich 3 Status LEDs 
befinden.
Als ich dieses Programm noch nicht hatte und nur minicom ausprobiert 
hatte, haben die LEDs geblinkt, als ich Taster auf der Tastatur drückte. 
Jetzt sehe ich keine Aktivität.

Autor: Conker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich weis nicht so genau, was ich beim Basteln am Code verändert 
habe, aber es funktioniert nun.:-D

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.