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.
Flußsteuerung: none
probier' mal
Nurn Schuß ins Blaue:
probier mal ohne Flußsteuerung (im Hyperterminal auf "keine").
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?
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?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.