Hallo Gemeinde! Ich hab da ein kleines Problem mit meinem USB-Seriell-Wandler. Ich verwende einen FT232BM für meine uC-Kommunikation. Leider bringe ich die Kommunikation nicht hin und hab leider keinen KO um die Signale zu messen. Ich hab die Schaltung zwei mal Fräsen lassen und beide bestückt. Habe auf beiden Prints die gleichen Phänomene. So wie's scheint stimmt der Takt nicht ganz, denn ein zwei Bytes von 100 kommen richtig an, aber naja, eigentlich erwarte ich 0.0% Fehler. Ich habs mit Frequenzen zwischen 2400-38400 versucht, überall das selbe. Auch die Einstellungen im uC hab ich ein dutzend mal überprüft. Die Spannungen die ich messen konnte habe ich überprüft, das sollte alles korrekt sein. Nun hab ich mal gedacht vielleicht fällt jemandem von euch gleich etwas auf, was an der schaltung probleme machen könnte! Gruss Humpe
das bild bitte in einer passenderen qualität so sieht man nix ... dann : wenn man davon ausgeht das der FTDI geht .. wo sind die sourcen von der UART des µC ? und baudraten versuchen ist nicht lege dir eine baudrate fest und nutze diese alles andere geht eh schief es sei denn man baut eine autobaudfunktion mit ein ..
dann noch µC ... baudratenquarz ? oder wie sind die fuses gesetzt ?? mehr infos !!!!
Da hst du wohl recht, geht besser mit zwei bilder. Dazu ist zu sagen, hab dne 8Mhz-Quarz des uC durch einen 14.7456Mhz Quarz ersetzt. Gespiesen ist die Schaltung mit 3.3V Die Clock Fuses hab ich leider nicht im Kopf und kann den uC im Moment nicht anhängen. Was würdest du denn mit dieser Konfiguration empfehlen`? BAUD-Settings: U2x=0, UBRR=23. Also eigentlich möchte ich 38400baud, aber hab halt andere ausprobiert um den Fehler auszuschliessen! Hier noch der Code der Initialisierung:
1 | void USART_Init(void) { |
2 | |
3 | // Sets Baudrate |
4 | UBRR0H=0; |
5 | UBRR0L=(unsigned long)F_CPU/((unsigned long)BAUD<<4)-1; |
6 | |
7 | |
8 | UCSR0B |= (1<<RXEN) | (1<<TXEN) | (1<<RXCIE); //Transmit- u Receive-Enable und Receive-Interrupt-Enable setzen |
9 | |
10 | UCSR0C |= (1<<UCSZ0) | (1<<UCSZ1); //8-Bit Telegramm |
11 | |
12 | |
13 | // use USART for printf function |
14 | stdout = &mystdout; |
15 | |
16 | } |
(--> UBRR wird richtig gesetzt, habs auch mal direkt reingeschrieben) Hier noch der Code der Empfangsroutine:
1 | /*****************************************************************************/ |
2 | /* */ |
3 | /* Routine um ein Byte von der UART-Schnittstelle zu empfangen */ |
4 | /* WER / 03.02.10 */ |
5 | /* */ |
6 | /*****************************************************************************/ |
7 | |
8 | unsigned char UART_Receive(void) { |
9 | unsigned char i=0, data=0x00; |
10 | while(((UCSR0A & (1<<RXC))==0) && (i<100)){ //Warten bis Daten empfangen (40ms Timeout) |
11 | _delay_us(400); //400us warten |
12 | i++; //Zählvariable i inkrementieren |
13 | } |
14 | data = UDR0; //Byte von Datenregister einlesen |
15 | checksum += data; //Daten zur Checksumme addieren |
16 | return data; //Daten übergeben |
17 | } |
Gruss
Dass die FTDI-Bausteine einen SECHS MHz Quarz brauchen, weißt Du? Wenn ich das richtig entziffere, hast Du da 8 MHz eingebaut. Dann ist das kein Wunder, dass die Baudraten nicht stimmen. fchk
Die korrekte Funktion des FT232 kannst Du überprüfen, indem Du den Controller weglässt und die RX- und TX-Leitungen des FT232 miteinander verbindest. Schließt Du den Aufbau an einen PC an und verwendest ein Terminalprogramm, solltest Du abgesendete Daten als Echo sehen können. Wenn das sichergestellt ist, kannst Du Dich mit Deinem µC beschäftigen, vorher ist das nicht sinnvoll.
Hier noch die Bilder! Huch, das ist auch ein Fehler im Schema, dort hab ich einen 6Mhz verbaut! Sorry für die Fehler! Gruss
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.