Forum: Mikrocontroller und Digitale Elektronik AVR Butterfly USART Kommunikation


von Philipp (Gast)


Lesenswert?

Hallo!

Ich möchte gerne eine USART - Kommunikation zwischen meinem PC und 
meinem AVR Butterfly aufbauen. Leider funktioniert absolut nichts.

Die Initialisierung habe ich in Anlehnung an das AVR Demoprogramm 
erstellt.
1
void USART_Init(unsigned int baudrate)
2
{
3
    // Set baud rate
4
    UBRR0H = (unsigned char)(baudrate>>8);
5
    UBRR0L = (unsigned char)baudrate;
6
7
    // Enable 2x speed
8
    UCSR0A = (1<<U2X0);
9
10
    // Enable receiver and transmitter
11
    UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<UDRIE0);
12
13
    // Async. mode, 8N1
14
    UCSR0C = (0<<UMSEL0)|(0<<UPM00)|(0<<USBS0)|(3<<UCSZ00)|(0<<UCPOL0);
15
}

und das Hauptprogramm:
1
int main()
2
{
3
4
 Init();
5
 USART_Init(12);
6
7
  while(1)
8
  {
9
    Usart_Tx('a');
10
    PORTD=~PORTD;
11
    _delay_ms(50);
12
  }
13
14
 return 0;
15
}

Im Prinzip soll das Programm in gewissen Zeitabständen ein "a" über die 
USART an den PC senden und dann PORT D toggeln (um mir optisch zu 
zeigen, dass der Buchstabe versandt wurde).

Das komische ist, dass ich am Terminal GAR nichts empfange, auch keine 
fehlerhaften Zeichen (was ja bei fehlerhafter Initialisierung bei USART 
öfter mal vorkommen kann), aber es kommt einfach NICHTS an.
Ich komm einfach nicht dahinter.

Ich habe wenig erfahrung mit dem Butterfly, muss ich noch irgendwas 
beachten bei der USART Kommunikation?

Programmiert wird das Butterfly übrigens mit dem STK 500 über ISP.

Danke,
Philipp

von Purzel H. (hacky)


Lesenswert?

Der Butterfly laeuft am internen RC Oszillator. Wenn man den nicht mit 
dem 32k Quarz abgleicht ist wahrscheinlich nichts.

von Philipp (Gast)


Lesenswert?

Hmm...
Sonstige Funktionen (wie z.b. Zugriff auf externes RAM) funktionieren 
einwandfrei, nur die USART eben nicht.

von Hc Z. (mizch)


Lesenswert?

>     // Enable receiver and transmitter
>     UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<UDRIE0);

Du schaltest Interrupt für Sender und Empfänger ein.  Gibt es dafür auch 
die passenden Service-Routinen?  Gezeigt hast Du keine.  Dann wäre das 
ein zuverlässiger Aufhänger.

von Stefan E. (sternst)


Lesenswert?

Hazeh Zimmerer schrieb:
>>     // Enable receiver and transmitter
>>     UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<UDRIE0);
>
> Du schaltest Interrupt für Sender und Empfänger ein.

Nö, macht er nicht.

von Hc Z. (mizch)


Lesenswert?

Stimmt.  Da war ich zu schnell.

von Daniel B. (dbuergin)


Lesenswert?

Bei mir hat damals zuerst die Verkabelung nicht gepasst, habe die
USART PINs auf dem Butterfly verwechselt.
Dannach habe ich es mit dem folgenden Paket:

http://www.siwawi.arubi.uni-kl.de/avr_projects/bf_gcc_20090815.zip

ohne Probleme zum laufen gebracht.

Daniel

von Philipp (Gast)


Lesenswert?

hmm...
ich habe das mal versucht, aber ich komme einfach auf keinen grünen 
Zweig.

Ich habe mir heute das TX Signal auf einem Oszilloskop angesehen und ich 
denke, dass ich ein Pegelproblem habe.

Auf dem TX Pin habe ich gegen Ground gemessen einen Highpegel von 5V, 
einen Low Pegel von ca. 2,3V. Ich denke, dass der DC Anteil beim LOW 
Pegel das Problem verursacht?

Diese Verschiebung kann meiner Meinung nach eigentlich nur von der 
Versorgungsspannung kommen. Normalerweise wird das Butterfly ja mit 
einer Batterie versorgt, im Moment versorge ich allerdings mit 5V über 
den ISP6PIN Stecker des STK500.

Wie kann ich dieses Problem lösen? ich komm nicht dahinter.

Danke,
Philipp

von Hc Z. (mizch)


Lesenswert?

Der RS-Treiber des Butterfly funktioniert nur, wenn der Sender der 
Gegenseite ebenfalls angeschlossen ist, denn von dort bezieht er seine 
negative Spannung.  Hast Du den angeschlossen?

von Philipp (Gast)


Lesenswert?

ja, ich habe RX und TX des Butterfly auf den RS232 Spare des STK 
geschalten.

Ich habe gelesen, dass es kein Problem sei, das Butterfly über ISP mit 
5V zu versorgen, oder befinde ich mich auf dem Holzweg?

von Hc Z. (mizch)


Lesenswert?

Liegt denn am Empfänger des Butterfly auf RS232-Seite eine negative 
Spannung an?

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.