Forum: Mikrocontroller und Digitale Elektronik ATmega168 USART und Minicom


von Conker (Gast)


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.
1
void USART_Init( unsigned int ubrr)
2
{
3
  /*Set baud rate */
4
  UBRR0H = (unsigned char)(ubrr>>8);
5
  UBRR0L = (unsigned char)ubrr;
6
  /*Enable receiver and transmitter */
7
  UCSR0B = (1<<RXEN0)|(1<<TXEN0) | (1<<RXCIE0);
8
  /* Set frame format: 8data, 2stop bit */
9
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);
10
}
11
12
void USART_Transmit( unsigned char data )
13
{
14
  /* Wait for empty transmit buffer */
15
  while ( !( UCSR0A & (1<<UDRE0)) );
16
  /* Put data into buffer, sends the data */
17
  UDR0 = data;
18
}
19
20
void sendUart(char* cmd)
21
{
22
  do
23
  {
24
    while (!(UCSR0A & (1<<UDRE0)))  {}              // Warten bis man senden kann
25
    UDR0 = *cmd++;                                  // senden und zum nächsten zeichen wechseln
26
  }
27
  while(*cmd);                                      // so lange bis das ende erreicht ist
28
}
Interrupts habe ich global aktiviert mit sei();
Hier der Interruptvektor, jedoch wird er scheibar gar nicht aufgerufen:
1
ISR(USART_RX_vect) // rx interrupt
2
{
3
char data = UDR0;
4
sendUart("Zeichen empfangen : ");
5
USART_Transmit(data);
6
sendUart("\n\r");
7
}

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

Conker

von A.K. (Gast)


Lesenswert?

Interrupts sind eingeschaltet?

von Conker (Gast)


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.

von Conker (Gast)


Lesenswert?

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

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.