www.mikrocontroller.net

Forum: Compiler & IDEs UART. sende probl.


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen, ich kommen hier nicht ganz weiter! aus meiner sicht, 
sollte der code funktionieren! denke ich habe ein hadware-problem!
aber um "dumme" fehler auszuschließen, wollte ich euch kurz bitten, den 
conde anzuschauen!
#include <avr/interrupt.h>
#include "usart.h"



ISR(USART_RXC_vect) 
{
Usart_Rx_Data();
}

int main(void)
{
uint16_t UBRR =(4000000/(16*9600))-1;// Interne Taktquelle

sei();    //Global Interrupt Enable Bit im Status Register gesetz
Usart_init(UBRR);
while(1)
{
Usart_Tx_Data('A');
}

}


...und hier die ".c" mit den funktionen!
#include <avr/io.h>
#include "usart.h"


void Usart_init(uint16_t baud)
{
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;

/*
USART Control and Status Register B: UCSRCB

Bit 7 – RXCIE: RX Complete Interrupt Enable
Bit 6 – TXCIE: TX Complete Interrupt Enable
Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable
Bit 4 – RXEN: Receiver Enable
Bit 3 – TXEN: Transmitter Enable
Bit 2 – UCSZ2: Character Size
Bit 1 – RXB8: Receive Data Bit 8
Bit 0 – TXB8: Transmit Data Bit 8
*/

UCSRB |= (1<<RXCIE) |(1<<TXEN) | (1<<RXEN);    //Inerrups-Flap bei RX aktiv, RX und TX aktiv 

/*
USART Control and Status Register C: UCSRC

Bit 7 – URSEL: Register Select
Bit 6 – UMSEL: USART Mode Select
Bit 5:4 – UPM1:0: Parity Mode
Bit 3 – USBS: Stop Bit Select
Bit 2:1 – UCSZ1:0: Character Size
Bit 0 – UCPOL: Clock Polarity
*/

UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);    //Frame-Format: 8Data-Bits, 1Stop-Bit

}

void Usart_Tx_Data(unsigned char DATA)
{
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
    {
    }
    UDR = DATA;    
}

ich wollte nur fix die usart_data funktion testen...aber nix :D
habe ich etwas übersehen!? benutze avr-studio/gcc!
danke für die antworten :)

mfg
Tom

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom wrote:
> ISR(USART_RXC_vect)
> {
> Usart_Rx_Data();
> }
Wo ist die Funktion Usart_Rx_Data und was soll die machen?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die ISR für den Receive Interrupt hast du bestimmt angelegt, oder?
Stimmt auch deine Taktrate? Zeig mal deine FUSES

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, danke für die schnellen antworten!
die receive funnktion habe ich noch nicht ferig geschrieben!
es ging mir jetzt erstmal um das senden, wass eigl funzen sollte :(

ich benutze den internen rc-takt 4mhz!

mfg
Tom

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was geht denn nicht?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry...

ich empfange nicht auf den hyperterminal!
er sollte mir doch viele "A" ausstucken oder nicht^^
ich habe den termianl auf 9600,8,n,1 konfiguriert!
genau wie die usart-schnittstelle auf meinem µC!

mfg
Tom

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uint16_t UBRR =(4000000/(16*9600))-1;// Interne Taktquelle
Das geht auch schief. 4000000 passt nicht in einen int. Das gibt ohne 
ein UL dahinter Müll.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom wrote:
> hallo, danke für die schnellen antworten!
> die receive funnktion habe ich noch nicht ferig geschrieben!
Ich fragte nicht, ob Du die Funktion fertig geschrieben hast oder nicht, 
sondern was die macht! Wenn mit dem Receiver noch nicht gearbeitet wird, 
gibt es keinen Grund, den überhaupt einzuschalten und den Interrupt 
freizugeben!

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@johannes: da hast du recht!
werde die funktion schreiben, damit der interrupt auch genutzt wird!
mfg

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Immer dran denken: Im RXC-Handler muss UDR gelesen werden!

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke leute es funzt jetzt :)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Tom (Gast)

>Danke leute es funzt jetzt :)

Durch Zufall. RC-Oszillator und UART ist ein Don't!

http://www.mikrocontroller.net/articles/AVR-Tutori...

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.