PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART Problem - keine Daten kommen an



blu3
12.02.2006, 15:40
Hallo!
Ich habe einen RN-Control mit Atmega32. Mein Problem ist nun, dass ich mit dem Program (siehe unten) das immer ein 'X' verschicken soll nichts empfange. Ein anderes Programm (das Interrupts) verwendet funktioniert ohne Probleme.
(Ein Hardwareschaden oder falscher Anschluss kann also ausgeschlossen werden.) Ich verwende auch die gleiche Konfiguration wie im Testprogram (nur ohne Interrupt). Falsche Baudrate kann also auch ausgeschlossen werden.
Aber woran liegt es nun?



#include <avr/io.h>

void init_uart(void);
void timer (void);
void uart_putc(char c);

void init_uart (void)
{
UBRRH = 0;
UBRRL = 207;
UCSRA = 1<<U2X;

UCSRB = (1<<TXEN);

UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

void uart_putc(char c)
{
while(!(UCSRA & (1<<UDRE)));
UDR = c;
}

void timer (void)
{
TCNT0 = 0;
TCCR0 = (1<<CS00)|(1<<CS02);
}

int main (void)
{
uint8_t ticks = 0;
init_uart();
timer();

for (;;)
{
if (TCNT0 > 20)
{
ticks++;
TCNT0 = 0;
}
if (ticks == 128)
uart_putc('X');
}
}

Danke

blu3

DanielSan
12.02.2006, 15:49
Hi,

baue mal das hier in deinen code ein:


void send_string(char wort[])
{
unsigned int index=0;
while(wort[index] != '\0')
{
USART_Transmit(wort[index]);
index++;
}
return;
}



die daten sendest du dann mit send_string("X");

Das müsste funktionieren

Kann es sein das du vergessen hast die baudrate usw. mit anzugeben in deinem programm???
Irgendwie sieht das unvollständig aus.

MFG DanielSan

blu3
12.02.2006, 15:58
Hallo DanielSan!
Daran kann es nicht liegen. Deine Funktion ist nur ein nettes "Frontend" für eine Funktion wie (bei mir) uart_putc(char c) um ganze Strings zu versenden.
Mal ganz davon abgesehen, dass ich hierfür Pointerarithmetik für sinnvoller erachte.

blu3

DanielSan
12.02.2006, 16:03
Tja bin halt neu auf dem gebiet und ich habe es so gelöst und es funktioniert.

Aber hast du mal versucht mit uart_putc('2');
was zu senden? normalerweise müsste doch jetzt ein smiley ankommen.
MFG

blu3
12.02.2006, 16:18
hm. wieso sollte da ein Smiley ankommen? Ich sende ein Zeichen im ASCII Zeichensatz und lese es auch als solches wieder ein.

EDIT: Das Problem ist, dass einfach nichts ankommt. Ein hexdump /dev/ttyS0 zeigt absolut nichts an.

blu3

DanielSan
12.02.2006, 16:22
weil das bei mir so ist aber ich habe nicht richtig hingeguckt ich sende die zeiche etwas anders aber auch mit nem atmega128

MFG

blu3
12.02.2006, 16:42
Juhuu. Es funktioniert. Ich hab aus Spaß ein "uart_putc('\n');" eingefügt und jetzt kommt alles an. Aber warum muss ich erst noch ein '\n' senden bevor ueberhaupt irgendetwas ankommt? Und was wenn ich 1000 Zeichen senden will bei denen kein '\n' vorkommen darf? Muss ich ein eigenes Protokoll implementieren?

blu3

super_castle
12.02.2006, 19:18
man muss beide seiten verstehen.
das terminal und den avr. ihr arbeitetet immer zu hastig. langsam und mit verstand muss es gehen. wahrscheinlich hast du dich noch nicht mit dem pc-empfang und dem protokoll auseinandergesetzt.

wenn ihr euch mehr konzentrieren würdet, kämen weniger fehler zustande.

Castle