PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232



chientech
25.09.2006, 09:01
Hi,
ich hab versucht mit Hilfe der RS232 Schnittstelle mir Zahlen von meinem Mega32 auf den Rechner zu schicken.

Verwendet wurde:
Mega32
HyperTerminal
Verbindungskabel an COM1 (von Robotik Hardware)
Programmierung wie im ISM empfolen.

Hat jemand erfahrung oder Beispiel Code?
Ich kann auch meinen verwendeten Code hier einfügen, wenn mir einer sagt wie man das mit dem Fensterchen hingriegt.[/code]

chientech
25.09.2006, 09:49
Hi,

hab mitlerweile "GCC (Tastatur-Echo)" ausprobiert. geht auch nicht.

Einstellung Hyperterminal:

com1
Bits pro Sekunde 9600
Datenbits 8
Parität keine
Stoppbits 1
Flusssteuerung Hardware

Kabelverbindung müsste stimmen ca. 100mal überprüft

kennt jemand noch Fehlerquellen?

freue mich über alles was mir weiterhelfen könnte.

PicNick
25.09.2006, 10:29
Flußsteuerung: none

probier' mal

Slein
25.09.2006, 10:29
Nurn Schuß ins Blaue:
probier mal ohne Flußsteuerung (im Hyperterminal auf "keine").

vajk
25.09.2006, 10:47
so gehts mit dem Debuggen:



//-------------------------------------------------------
int uart_putchar(char c)
{
if (c == '\n')
uart_putchar('\r');
loop_until_bit_is_set(UCSRA, UDRE);

UDR = c;

return 0;
}


int main(void)
{
fdevopen(uart_putchar, NULL, 0); // 4 debugging -> use printf :-)

UCSRA = 0x00; // Control und Status Register
UCSRB |= (1 << TXEN) // TXEN=TX an
UCSRC |= (1 << USBS) | (3 << UCSZ0); // asyncron 8N1->Handbuch
UBRRH = 0;
UBRRL = 51; // 103 für 9600 || 51 für 19200 || 25 für 38400 || 16 für 57,6k || 12 für 76,8 || 8 für 115,2 - alles bezogen auf 16 MHz


// und dann der Test

printf("hallo pc");

// oder so:

UDR = 'x';

return(0);
}



Das müßte so tun :-)

chientech
25.09.2006, 15:34
Hi,
mit Flusssteuerung "keine" geht es auch nicht


#include <avr/io.h>


#define F_CPU 16000000

#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)

//-----------------------------------------------------
int main(void)
{
char bZeichen;

UCSRB = (1 << RXEN) | (1 << TXEN);
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
UBRRL = (unsigned char) USART_BAUD_SELECT;

while (1)
{
while ( !(UCSRA & (1 << RXC)) )
{;}
bZeichen = UDR;

while (!(UCSRA & (1 << UDRE)))
{;}
UDR = bZeichen;
}
return 0;
}

was mach ich falsch?

PicNick
25.09.2006, 15:42
Jetzt gibt's noch zwei Dinge:
Den Rs232-Stecker am Board umdrehen (Rx/TX vertauschen)
Oder es is was mit den Fuses ( -> externer quartz ?)

chientech
25.09.2006, 16:10
DDDDDat geeeehhht!!!!!!!!!!

Erst einmal danke ich allen die mir Weiterhelfen wollten/konnten.

Es muss wohl eine Verbindung aus Flusssteuerung "keine" und RX/TX verdreht gewesen sein. (hab alle möglichen varianten zig mal ausprobiert.)

Flusssteuerung muss (bei mir zumindest) "keine" sein.

Danke zusammen.

SprinterSB
25.09.2006, 16:26
Nur mal so nachgefragt...

Machst du Pegelanpassung RS232 <-> UART? Falls nicht...

chientech
25.09.2006, 18:02
Hi,
Pegelanpassung kein Problem. Max232


Hab da mal ne andere Frage.
Wenn ich Funktionen aus einem Projekt in einem anderen nutzen möchte wie mach ich das mit AVR Studio am einfachsten.
Mit Add excisting File erscheint zwar das SourceFile ist aber Durchgestrichen, auch nach erneutem Debuggen.

Was mach ich falsch bzw gibt es eine bessere Lösung?