Gast
#29831
Hallo,
ich hoffe, daß mir hier jemand weiterhelfen kann.
ich habe auf einer seperaten Platine (Lochraster) einen Pegelwandler mit
einem Max3232 aufgebaut mit fünf 100nF Kondensatoren (keine Elkos, einer
ist ein Stützkondensator).
Als Zuleitung zum PC habe ich ein ca. 1.20m langes Flachbandkabel
genommen, daß per Klemm-Schneide Technik auf der einen Seite einen 9
Pol. Stecker (female) hat, auf der anderen Seite so ne 2x5 polige
Buchse, die ich auf eine Stiftleiste draufstecken kann.
Zur Mikrocontroller-Platine verbinde ich den Pegelwandler über ein ca.
15cm langes Flachbandkabel.
Der Mikrocontroller (Mega128L) wird mit 7.3728MHz getaktet.
1. Das erste Problem tritt auf, wenn ich nur den Pegelwandler über das
1.20m Kabel mit dem PC verbinde und ihn an 3.5V hänge. Wenn ich ein
Terminalprogramm starte und mit einer Hand den Pegelwandler "streichel",
dann empfängt er hunderte von 0x00 ...
Ist der Aufbau so kritisch? Muß ich da was spezielle beachten?
Der Pegelwandler ist auf der Lochrasterplatine mit Kupferlackdraht
"gefädelt". Könnte das daran liegen?
2. Wenn ich den Pegelwandler mit dem 15cm Kabel mit dem Mikrocontroller
verbinde und was sende, dann empfange ich ebenfalls nur 0x00. Baudrate
habe ich auf 2400 eingestellt und kein Handshake. Steckerbelegungen
stimmen 100%. Das habe ich mindestens 100 mal nachgeprüft.
Ich habe die ganze Nacht experimentiert und bin jetzt mit meinem latein
am Ende. Bin für jeden Tip dankbar.
Hier der Source, den ich zum senden verwende:
typedef unsigned char BYTE;
#define UART1_BAUDRATE 2400
#define UART1_UBR (AVR_CLK/(16*UART1_BAUDRATE)-1)
int main(int argc, char* argv[])
{
usart1_init();
while(1){
usart1_sendByte('K');
}
}
return 0;
}
void usart1_init(){
//Baud Rate setzen
UBRR1H = (BYTE)(UART1_UBR>>8);
UBRR1L = (BYTE)(UART1_UBR);
//Frame Format setzen
//1 StartBit, 8 DatenBits, keine Parität 1 StopBit
UCSR1C = (3<<UCSZ10);
//Receiver und Transmitter einschalten
UCSR1B = (1<<RXEN1)|(1<<TXEN1);
}
void usart1_sendByte(BYTE data){
//Warte bis Transmit Buffer leer ist
while ( !( UCSR1A & (1<<UDRE1) ) );
//Data in den Buffer schreiben (startet die Übertragung)
UDR1 = data;
}
Gruß,
Klaus