PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Uart mit Rn-Control 1.4



manu_f
27.03.2007, 18:18
hallo zusammen,

habe wieder mal ein problem.
versuche gerade einen text über uart an meinen pc zu senden. leider kommt nichts an und der pegel von tx bleibt auf -8,3V stehn.
der µC ist ein Atmega32.
das programm habe ich irgendwo im forum gefunden:



// AVR-Includes
#include <avr/io.h>

// Defines
#define F_CPU 4000000 // Hier die Taktfrequenz in Hz eingeben
#define UART_BAUD_RATE 9600 // Hier die gewünschte Baudrate
#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16L)-1)


// Funktionen
// -=> UART initialisieren <=-
void UART_init(void){

UBRRL |= (uint8_t) UART_BAUD_SELECT;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

// -=> Byte Transmit <=-
void UART_transmit(uint8_t c){
while(!(UCSRA & (1<<UDRE)));
UDR = c;
}

// -=> String Transmit <=-
void UART_transmit_string(uint8_t *string){
while(!(UCSRA & (1<<UDRE)));
while( *string){ UART_transmit (*string++); }
}



int main (void)
{


UART_init(); // UART-Init Funktion ausführen

while(1)
{
UART_transmit_string("Test");
waitms(500);
}
}



wäre super wenn mir jemand helfen könnte, steh gerade auf den schlauch!
viele grüße
Manu

Superhirn
27.03.2007, 18:51
Hi,

verwende mal meine dateien.. sind für atmega16/32 getestet.

Du musst die usart.h include mit
#include "usart.h"
und die usart.c dazulinken (also in der makefile dazuschreiben...)

vergiss nicht davor zu initialisieren.

und:
uart_putf sendet ohne kommastellen, uart_putd mit, jedoch musst du länge und kommastellen angeben. uart_puts sendet text.

manu_f
27.03.2007, 20:18
hi superhirn,

danke für deine funktionen!
das programm oben von mir macht ja das gleiche wie du in deinen funktionen.
leider funktiontiert immer noch nichts! :(

braucht man für den uart einen externen quarz? müssen lock/fusebits verstellt werden?
kann bitte noch mal jemand über den code schaun?
was könnten noch fehlerquellen sein? bin mir sicher, dass am hyperterminal alles stimmt. 9600 8N1 und keine flussteuerung.

vielen dank!
manu

Superhirn
27.03.2007, 21:46
Also externer Quarz ist notwendig da der interne zu ungenau ist. Aber der ist eh schon auf dem RN-Board. Musst ihn nur mit den fuse-bits einstellen (cksel0-3: 0000 bei mir).
und mein programm hat eine andere baudrate,kannst aber einstellen. ich benutz imemr die grlßt mögliche um das programm nicht durch lange übertragungen zu blockieren. (für dich ist das noch kein thema).
also wenn du hyperterminal auf die serielle schnittstelle einstellst, aber zb baudrate doer so flasch, dann kommen mindestens irgendwelche kryptischen sachen an. sag mal ob da was kommt. hast du das rihtige kabel?

manu_f
28.03.2007, 05:09
ok danke!
dann werde ich erst mal den externen quarz aktivieren müssen.
das kabel ist das richtige, ein testprogramm in bascom hat funktioniert. im moment bekomme ich gar nichts aufs hyperterminal.

hoffe ich komme heute noch mal zum testen.

viele grüße,
manu

manu_f
28.03.2007, 16:02
ok bin gerade etwas verwirrt!

also ich habe mit ponyprog meine fusebits ausgelesen. alle kästchen haben KEINEN haken.
muss ich jetzt für den externen quarz die häckchen von CKSEL0-3 setzen?

viele grüße,
manu

Superhirn
28.03.2007, 16:22
du musst zuerst fuse bits lesen bevor du setzt!

manu_f
28.03.2007, 16:44
habe ich gemacht. alles leer, also keine häckchen.

viele grüße

manu_f
29.03.2007, 17:33
hallo noch mal,

wie kann ich einen hardware-funktionstest für uart machen, glaube langsam das ich ein hardwareproblem habe...

viele grüße,
manu

Superhirn
29.03.2007, 17:42
probier einfach nochmal vom bascom aus.

manu_f
29.03.2007, 17:50
hab ich ja schon! :(

vom asuro bekomme ich daten über rs232 geschickt.

kann ich irgendwie die funktion vom rn-control testen?

manu_f
19.04.2007, 20:13
hallo,

wollte eben noch bescheid sagen, dass mein atmega32 kaputt war. hab mir einen neuen bestellt und jetzt gehts! \:D/

vielen dank noch mal!

gruß manu