PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FT232 und Atmega32 Probleme (gelöst=



Martin.
08.10.2009, 20:12
Hallo !

Ich hab mir einen USB->UART Converter gemäß dem Datenblatt zusammengelötet. Nun möchte ich eigentlich mit ner Baudrate von 9600 und nem externen 16 MHz Quarz mal ein Testsignal an den PC schicken. HTerm kommt aber auf nichts vernünftiges. Genauer gesagt: HTerm empfängt nur bei BAUD 115200 etwas, kann es sein, dass ich über FPROG beim FT232RL eine Baudrate einstellen muss und nicht nur beim MC und beim HTerm? Das nächste Problem: Die RX Diode leuchtet nicht. Also hab ich das Oszi genommen und überprüft ob ein ordentliches Signal anliegt. Beim Anstecken des Masseanschlusses begann die LED zu leuchten und HTerm hat auch bei Baud 9600 Daten empfangen, nur nix richtiges. Kann es sein, dass ich da ne Masseschleife hergestellt habe? Ich hab doch nur das Oszi mit der Masse von meiner Atmega32 Platine verbunden. Der Converter ist übrigens BUS powered. Achja er wurde übrigens von Windows Problemlos erkannt und ich kann auch mit FProg auf ihn zugreifen.

Hier noch der MC Code:

#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
#define F_CPU 16000000UL // Systemtakt in Hz - Definition als unsigned long beachten
// Ohne ergeben sich unten Fehler in der Berechnung
#endif

#define BAUD 9600UL // Baudrate

// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.

/*#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
#endif*/

int uart_putc(unsigned char c)
{
while (!(UCSRA & (1<<UDRE)));
UDR = c;
return 0;
}


void uart_puts (char *s)
{
while (*s)
{
uart_putc(*s);
s++;
}
}

int main(void)
{
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC |= (1<<URSEL)|(3<<UCSZ0);

UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;

uart_puts('a');
uart_puts('b');
uart_puts('c');
uart_puts('d');
uart_puts('e');
uart_puts('f');
while(1!=0)
{
uart_puts('g');
_delay_ms(1000);
}
}
hier der Schaltplan:
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2390

Danke für eure Hilfe!

Martin

hacker
08.10.2009, 23:18
Die Massen von deinem Konverter und deiner µC-Schaltung müssen verbunden sein.

wkrug
08.10.2009, 23:34
Ich denk mal, das Du deinen FT232 im VCP Mode betreibst und da muß dann in der empfangenden Software natürlich auch die Baudrate eingestellt werden.
Und zwar die Gleiche, die auch dein Microcontroller benutzt.

Wenn Du dein Gerät BUS POWERD machst, musst Du über den Microcontroller auch noch einen Pin des FT232 abfragen, wann der USB Bus in den Suspend Modus geht und den Controller daraufhin in einen Sleep Modus versetzen.

Wenn das nicht möglich ist, solltest Du die Schaltung aus dem Datenblatt des FT232, mit dem P-FET, verwenden.
Das ist aber nur ein zusätzliche Info und hat mit Deinem Problem vorerst mal nichts zu tun.

Martin.
09.10.2009, 12:21
Also vielen Dank für eure Hilfen! Der Converter ist Bus-Powered und nicht der Atmega32. In sofern brauch ich glaub ich keine PWREN verbindung oder nen P-Mosfet. Die Massen hab ich jetzt miteinander verbunden und nun leuchtet die RX Diode wie sie soll. Ich bekomme auch Signale nur die falschen. Es kommt immer 244 oder 245 ein ò. Bei HTerm hab ich Baud 9600 und beim MC ebenfalls 9600 eingestellt. Ich verwende auch nen externen Quarz. Muss ich aber im EEProm vom FT232RL ebenfalls eine BAUD Rate einstellen?

Danke

Martin

PS: Da die Frage zu elektronisch ist, hab ich sie auch mal auf Mikrocontroller.net gestellt. Nicht das sich hier jemand hintergangen fühlt! Sobald das Problem gelöst ist, werde ichs aber auch sagen!





EDIT: Das Problem ist gelöst. In der Makefile stand ne falsche Quarzfrequenz. Vielen Dank an die Helfer!