Forum: Compiler & IDEs atmega 128 empfängt keine daten über uart


von oni (Gast)


Lesenswert?

ich habe einen atmega128 und will daten empfangen und senden.
hierzu nutze ich den USART0, leider wird weder der receive-interrupt 
ausgelöst noch wird das RXC-bit auf 1 gesetzt.
hier mein code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include "usart.h"
4
int usart0_rec =0 ;
5
6
void usart_init0(int baut0_H, int baut0_L) {
7
8
    UCSR0A = 0x00;      /* USART operates at normal speed */
9
    UCSR0B = (  (1<<RXCIE) | (1<<RXEN)|(1<<TXEN));    /* Enable receiver */
10
    UCSR0C = (  (0<<UMSEL) |  /* Configure for asynchronous operation */
11
        (0<<UPM1)  |  /* No parity */
12
        (0<<UPM0)  |
13
        (0<<USBS)  |  /* 1 stopbit */
14
        (1<<UCSZ1) |  /* 8 data bits */
15
        (1<<UCSZ0));
16
        UBRR0H=baut0_H;
17
        UBRR0L=baut0_L;
18
}
19
20
void usart_put0(int data0) {
21
        while (!(UCSR0A & 0x20));
22
        UDR0=data0;
23
}
24
int usart_get0(void){
25
        return usart0_rec;
26
        //return UDR0;
27
}
28
SIGNAL(USART0_RX_vect){
29
        usart0_rec=UDR0;
30
}


der atmega läuft auf 16MHz und das senden funktioniert fehlerfrei.

hier noch die fuses:
Atmel AVR ATmega128 is found.

Fuse Low Byte      = 0xe0
Fuse High Byte     = 0x99
Fuse Extended Byte = 0xff
Calibration Byte   = 0xc5  --  Read Only
Lock Bits          = 0xff
    BLB12 -> 1
    BLB11 -> 1
    BLB02 -> 1
    BLB01 -> 1
      LB2 -> 1
      LB1 -> 1

ich hoffe das mir jemand helfen kann alle lösungen aus dem forum haben 
mir nicht geholfen.

von Baby (Gast)


Lesenswert?

Wird auch sei(); irgendwo aufgerufen um die Interrupts zu aktivieren ?

von oni (Gast)


Lesenswert?

ja in der main.c
aber auch wenn nicht müsst ja das RXC bit gesetzt sein

die hardware ist auch ok hab sie gerade noch mal getestet

von Karl H. (kbuchegg)


Lesenswert?

Zwischenfrage:
Wer oder was hängt am anderen Ende der Leitung (Also: wer sendet
eigentlich?)

Hintergrund: Wenn das ein PC mit zb. Hyperterminal ist, dann ist
eine beliebte Falle, dass vergessen wurde das Hardware Handshake
am PC abzudrehen. Wenn dann gleichzeitig im Kabel die Handshake
Leitungen nicht für diesen Fall verschaltet sind, dann sendet
in so einem Fall der PC ganz einfach nicht.

Wie in so einem Fall das Kabel verdrahtet sein muss, findest
du zb. hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

von oni (Gast)


Lesenswert?

aso es hägt ein pc über einen max232 dran auf dem pc läuft gtkterm
und mit einem atmega8 kann ich senden und empfangen.

von kosmonaut pirx (Gast)


Lesenswert?

hallo,
kann es sein, das das wieder das allseits beliebte volatile-dings ist?

oder anders gefragt: woher weißt du, dass der irq niemals kommt?

bye kosmo

von oni (Gast)


Lesenswert?

ich hab ihn im interrupt mal einen port auf high setzten lassen.
das resultat war das der port nie high wurde.

von kosmonaut pirx (Gast)


Lesenswert?

hallo,
tja für mich sieht das nach dem schauen in der doku erstmal recht fit 
aus.

probier doch mal, das TXCIE0 auch zu setzen. das senden ging ja, wie du 
sagst. funktioniert die ISR, sollte dein port beim senden auf high 
gehen.

bye kosmo

von oni (Gast)


Lesenswert?

ok gestestet und der TX interrupt macht keine probleme
kommt also genau richtig

von kosmonaut pirx (Gast)


Lesenswert?

hallo,
bin kein mega128-experte, vll findet sich da ja noch wer. ich tippe aber 
einfach auf nen hardware-fehler, in der verkabelung möglicherweise. bin 
am ende mit meinem latein soweit.
bye kosmo

von oni (Gast)


Lesenswert?

so hab das probelm gefunden
es lag an meinem eigenbau-isp der irgenteinen müll gemacht
sorry das ich so viel mühe gemacht hab
aber danke trozdem

von Pascal (Gast)


Lesenswert?

Hallo Oni kannst du mir deine quelle code senden (die vollständige 
quelle code)
weil ich das selbe problem habe (ich will daten senden und empfangen) 
aber es fonctinniert nicht. ich sehe hier das du schon einige schritt 
gemacht hast.
ich bedanke mich voraus
pascal

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.