Hallo,
ich habe eine RS232 Verbindung zwischen ATMEGA16 und seriellem
Port des PC aufgebaut. Mein Code sieht dabei folgendermaßen aus:
Wenn ich dann den Controller über MAX232 an den COM4 stecke, dannCode:// external clock speed (12.0 MHz) #define CPU_SPEED 12000000 // Baudrate for USART Interface #define UART_BAUDRATE 9600 // UART UBRR Value #define UART_UBRR ((CPU_SPEED/(16l*UART_BAUDRATE))-1) // init USART transmit UBRRH = (unsigned char)(UART_UBRR>>8); UBRRL = (unsigned char) UART_UBRR; // enable USART transmit UCSRB |= (1<<TXEN); // set UART TX UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); // Asynchronous 8N1 // wait for empty transmit buffer while ( !(UCSRA & (1<<UDRE)) ) ; // put data into buffer and send UDR = 'M';
kommt dort aber nur Müll an (9600Baud eingestellt, 8 Daten, 1 Stop)
Also habe ich mir den Pin2 mit dem Oszy angesehen:
Signalpegel von -8V (High), Peaks bei +8V (Low):
0 1 0 1 1 0 0 1 0 dann immer 1 (Stop+Ruhe)
das würde also einem Startbit und einem invertierten M (0 1 0 0 1 1 0 1) entsprechen.
Wo liegt jetzt das Problem, dass ich kein M bekomme?
Ach so: Die Breite eines Bits beträgt laut Oszy etwas über 100µs, also
genau 9600 Baud, hier liegt das Problem demnach nicht!
DANKE für Hilfe
Gruß
RICOLA
Lesezeichen