Krampfda
21.05.2009, 19:27
Nabend.
Seit einiger Zeit versuche ich, eine serielle Verbindung zwischen meinem Mega 8 und meinem PC herzustellen. Leider hat es bisher nicht geklappt und diverse Forenbeiträge und tutorials haben nichts gebracht.
da ich nicht genau weiß, ob mein problem software oder hardwarebedingt ist, habe ich erstmal hier gepostet.
Bei mir sieht es wiefolgt aus:
Der Microcontroller initialisiert den UART mit 9600 Baud (8MHz externer Quarzoszillator)
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
unsigned int ubrr = MYUBRR;
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
UCSRB = (1<<TXEN); // Sendekanal aktivieren
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); // Asynchron 8N1
Dann sendet er immer, wann möglich, aber durch nen timer auf 6Hz (willkürliche zahl) begrenzt:
if(UCSRA & (1<<UDRE)) // UART Data Register Empty = 1 => Senden
{
UDR = (char)'x';
}
An Pin 3 des Controllers kann ich 5V messen. Da mir kein Oszilloskop zur Verfügung steht, kann ich da leider ncihts weiter drüber aussagen.
Der TTL Pegel wird dann durch einen Ordnungsgemäß beschalteten MAX232 umgewandelt (ja, er hat auch ne stromversorgung).
Hier messe ich -7.2V.
das verlängerungskabel ist ca 2m lang und hat zwei buchsen.
Am Rechner selbst lese ich die serielle Schnittstelle unter linux mit "cat /dev/ttyD1" aus.
Aber es passiert nichts.
Konfiguration der Schnittstelle:
homeserv:~# setserial /dev/ttyD1 -a
/dev/ttyD1, Line 1, UART: 16550A, Port: 0x1008, IRQ: 18
Baud_base: 9600, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
Jetzt kommt das kuriose:
Wenn ich den Controller über den MAX232 mit dem PC verbinde, kommt garnichts an.
Wenn ich aber den TTL Pegel direkt mit dem PC verbinde und ein wenig über den Kontakt kratze (wohl prelleffekt) kommen am PC nicht identifizierbare daten an:
Ich weiß leider nicht, wo der Fehler steckt, allerdings habe ich ein paar Überlegungen angestellt:
*Die serielle Schnittstelle am PC funktioniert, da ich an kommende daten sehe.
*sind ankommende daten wegen des pegels falsch oder sendet er nicht richtig ?
*wieso kommen nur daten an, wenn ich über den kontakt kratze
*wieso kommen über den MAX garkeine sichtbaren daten an ?
*ein problem mit modem / nullmodem kabel meine ich ausschließen zu können, da mit TTL am richtigen pin etwas ankommt. die beschaltung hier muss also auch okay sein
kann mir da einer weiterhelfen ?
Seit einiger Zeit versuche ich, eine serielle Verbindung zwischen meinem Mega 8 und meinem PC herzustellen. Leider hat es bisher nicht geklappt und diverse Forenbeiträge und tutorials haben nichts gebracht.
da ich nicht genau weiß, ob mein problem software oder hardwarebedingt ist, habe ich erstmal hier gepostet.
Bei mir sieht es wiefolgt aus:
Der Microcontroller initialisiert den UART mit 9600 Baud (8MHz externer Quarzoszillator)
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
unsigned int ubrr = MYUBRR;
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
UCSRB = (1<<TXEN); // Sendekanal aktivieren
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); // Asynchron 8N1
Dann sendet er immer, wann möglich, aber durch nen timer auf 6Hz (willkürliche zahl) begrenzt:
if(UCSRA & (1<<UDRE)) // UART Data Register Empty = 1 => Senden
{
UDR = (char)'x';
}
An Pin 3 des Controllers kann ich 5V messen. Da mir kein Oszilloskop zur Verfügung steht, kann ich da leider ncihts weiter drüber aussagen.
Der TTL Pegel wird dann durch einen Ordnungsgemäß beschalteten MAX232 umgewandelt (ja, er hat auch ne stromversorgung).
Hier messe ich -7.2V.
das verlängerungskabel ist ca 2m lang und hat zwei buchsen.
Am Rechner selbst lese ich die serielle Schnittstelle unter linux mit "cat /dev/ttyD1" aus.
Aber es passiert nichts.
Konfiguration der Schnittstelle:
homeserv:~# setserial /dev/ttyD1 -a
/dev/ttyD1, Line 1, UART: 16550A, Port: 0x1008, IRQ: 18
Baud_base: 9600, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
Jetzt kommt das kuriose:
Wenn ich den Controller über den MAX232 mit dem PC verbinde, kommt garnichts an.
Wenn ich aber den TTL Pegel direkt mit dem PC verbinde und ein wenig über den Kontakt kratze (wohl prelleffekt) kommen am PC nicht identifizierbare daten an:
Ich weiß leider nicht, wo der Fehler steckt, allerdings habe ich ein paar Überlegungen angestellt:
*Die serielle Schnittstelle am PC funktioniert, da ich an kommende daten sehe.
*sind ankommende daten wegen des pegels falsch oder sendet er nicht richtig ?
*wieso kommen nur daten an, wenn ich über den kontakt kratze
*wieso kommen über den MAX garkeine sichtbaren daten an ?
*ein problem mit modem / nullmodem kabel meine ich ausschließen zu können, da mit TTL am richtigen pin etwas ankommt. die beschaltung hier muss also auch okay sein
kann mir da einer weiterhelfen ?