www.mikrocontroller.net

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


Autor: oni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>
#include <avr/interrupt.h>
#include "usart.h"
int usart0_rec =0 ;

void usart_init0(int baut0_H, int baut0_L) {

    UCSR0A = 0x00;      /* USART operates at normal speed */
    UCSR0B = (  (1<<RXCIE) | (1<<RXEN)|(1<<TXEN));    /* Enable receiver */
    UCSR0C = (  (0<<UMSEL) |  /* Configure for asynchronous operation */
        (0<<UPM1)  |  /* No parity */
        (0<<UPM0)  |
        (0<<USBS)  |  /* 1 stopbit */
        (1<<UCSZ1) |  /* 8 data bits */
        (1<<UCSZ0));
        UBRR0H=baut0_H;
        UBRR0L=baut0_L;
}

void usart_put0(int data0) {
        while (!(UCSR0A & 0x20));
        UDR0=data0;
}
int usart_get0(void){
        return usart0_rec;
        //return UDR0;
}
SIGNAL(USART0_RX_vect){
        usart0_rec=UDR0;
}



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.

Autor: Baby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird auch sei(); irgendwo aufgerufen um die Interrupts zu aktivieren ?

Autor: oni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: oni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: oni (Gast)
Datum:

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

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: oni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok gestestet und der TX interrupt macht keine probleme
kommt also genau richtig

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: oni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.