Forum: Mikrocontroller und Digitale Elektronik FT245 únd AVR


von Andreas Hesse (Gast)


Lesenswert?

Hallo,

hat jemand schon mal einen USB-Chip FT245BM an einen AVR angebunden?
Wäre an einem Erfahrungsaustausch interessiert.


Gruss
A.Hesse

von Matthias (Gast)


Lesenswert?

Hi

mehrmals. Was willst du denn wissen?

Matthias

von Andreas Hesse (Gast)


Lesenswert?

Hallo,

erstmal danke für die Hilfsbereitschaft.

Ich habe ein paar Probleme aufgschrieben:

Verwendete Bauteile:
FT245BM
AT90S8515 mit 6,144 Mhz

1. Spannungsversorgung:
Der AVR wird direkt an VCCIO angeschlossen (Strom durch den AVR <
15mA).
Der Datenport zum FT245 wird standardmässig auf TriState gestellt.
Gibt es irgendwas zu beachten?

2. Übertragung vom AVR zum Ft245:
Wenn ich das Datenblatt richtig interpretiere, ist der FT245 im
Inputmodus, wenn er TXE# nach 0 setzt.
Dann ist jeder Datenpin mit 200k gegen VCCIO hochgezogen. Am AVR werden
dann lediglich die Bits die 0 sein sollen von TriState auf Ausgang
umgeschaltet (und nicht eingeschaltet). Damit liegen sie auf Masse und
signalisieren 0. Alle TriState Pins führen dazu, dass der FT245 über
die internen PullUps logisch 1 erkennt. Ist dieser Ansatz OK?

3 Übertragung vom Ft245 zum AVR:
Für das Schreiben habe ich folgenden Ansatz:
- RXF# geht auf 0
- Schalte den Daten auf den Verbindungsport zum FT245
- Setze WR auf High
- Setze WR auf low
Müssen noch Verzögerungszeiten eingebaut werden (meinem Verständnis
nach nicht, das der FT245 sehr schnell ist)?

4 Gibt es irgendwo ein Referenzdesign?

Gruss
Andreas

von Matthias (Gast)


Lesenswert?

Hi

1.
VCCIO ist ein Eingang. Damit legst du die IO-Spannung des FTDI fest um
den Chip mit einem 3V µC verheiraten zu können. Du kannst da keinen
Strom entnehmen.

2.
Wenn TXE# low ist kannst du in den FTDI schreiben. Wenn du schreiben
willst stellst du den Port des AVR auf Ausgang, legst die Daten an und
ziehst WR kurz auf 1.

3.
Wenn Daten im FIFO des FTDI vorhanden sind ist dessen RXF# auf 0. Dann
stellst du deinen Port auf Eingang, legst RD# auf 0 und ließt das
PIN-Register ein.

4.
http://www.ftdichip.com/Documents/dg232v20.pdf

Matthias

von Andreas Hesse (Gast)


Lesenswert?

Vielen Dank!, Jetzt ist mir einiges klarer geworden.

Gruss
Andreas

von Matthias (Gast)


Lesenswert?

Hi

BTW:
Zwischen Setzen von RD# auf 0 und einlesen des PIN-Registers muß evtl.
ein NOP damit das was drausen anliegt auch wirklich im Register steht.

Matthias

von Andreas Auer (Gast)


Lesenswert?

Das Schreiben von Daten in den FT245 bzw. das Lesen vom FT245 kannst
auch "einfacher" machen, indem du die Ansteuerung des FT245 über ein
paar Gatter erledigst (Peripherie ist also etwas intelligenter).

Mit einfacheren Datenaustausch ist natürlich gemeint, dass du den FT245
in den externen Memory Adressbereich des AVR integrierst (Memory Mapped
Mode). Wenn du dann noch den Zugriff auf ein externes RAM aktivierst
(im MCUCR das SRE Bit setzen), kannst du auf den FT245 zugreifen, als
wäre es ein RAM. So übernimmt der AVR das Umschalten der "Data
Direction" (Input/Output) und auch das WR und das RD Signal. Damit die
Statussignal auch die richtigen Pegel haben, werden wahrscheinlich
einige Gatter notwendig.

Kleines Codeexample in C:

unsigned char *pointer = "Adresse des FT245"

// Schreiben von Daten
*pointer = data;    // hier die Variable mit den Daten

// Lesen von Daten
data = *pointer;    // hier die Variable für die gelesenen Daten

mfg
Andreas

--
Andreas Auer            aauer1 (at) sbox.tugraz.at
Student of Telematics   http://home.pages.at/aauer1
Graz, University of Technology

von Andreas Hesse (Gast)


Lesenswert?

Hallo,

danke für die Tips.

Leider will das Ding noch nicht so, wie ich gerne möchte.
Für die PC-Software verwende ich das Beispiel von der FTDI-Seite.
Die erkennt den Chip und öffnen kann ich ihn auch.
Der AVR ist so programmiert, dass er kontinuierlich Daten senden
sollte, (was aber nicht passiert). (Ich hoffe, dass ich nicht den Chip
geschossen habe).
Wie kann ich denn am besten debuggen?

Ausserdem habe ich noch eine weitere Frage:
Ich verwende einen SP12-programmer.
Kann ich bei angeschlossenem FT245 (Versorgung aller Teile über USB)
diesen Programmer verwenden, um den AVR zu programmieren (bisher habe
ich immer umgesteckt)?

Gruss
Andreas

von Matthias (Gast)


Lesenswert?

Hi

poste doch mal Schaltplan und putc/getc für den FTDI. Dann können wir
besser helfen.

Matthias

von Tobias A. (Gast)


Lesenswert?

Hi

wo wir grad bei dem FTDI 245 sind.
kann mir wer verraten was an dem Ding den Druckerpins
14 (AUTOFDX)
16 (INIT)
1  (STROBE)


entspricht?
Die Bezeichnungen finde ich nämlich nicht auf dem Eval-Board

Gruß
  Tobi

von Andreas Hesse (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

den Schaltplan habe ich zur Zeit nur auf Papier.
Der Ft245 wird an den 8515 wie folgt angeschlossen:
Dataport:PortD
RD=PC0
WR=PC1
TXE=PC2
RXF=PC3
SI/WU=PC4

Das Ft245 board habe ich von Ebay.
Der Assembler - SourceCode für den AVR ist im Anhang (wobei ich mir die
includes für LCD und speicherkopieren gesparthabe)

gruss
Andreas

von Andreas Auer (Gast)


Lesenswert?

Aus reinem Interesse würde mich noch interessieren wieviel das FT245
Board gekostet hat, als du es bei eBay ersteigert hast!

mfg
Andreas

--
Andreas Auer            aauer1 (at) sbox.tugraz.at
Student of Telematics   http://home.pages.at/aauer1
Graz, University of Technology

von Matthias (Gast)


Lesenswert?

Hi

sorry aber durch den ASM-Quellcode kann ich mich grade nicht
durchkämpfen. Wenn du aber so vorgehst wie ich oben beschrieben habe
muß es eigentlich klappen.

Hier mal meine C-Routinen zum Schreiben und Lesen. Die Leseroutine
liefert entweder das gelesene Byte oder -1 (wenn keine Daten vorhanden
sind) zurück.

//Ließt ein Byte von der USB-Schnittstelle
signed int usb_getc(void)
{
  unsigned char t;

  if(!USB_RXF)
  {
    USB_RD_ON;
    asm("NOP");
    t = PIND;
    USB_RD_OFF;

    return t;
  }
  else return -1;
}

//Schreibt ein Byte auf den USB
void usb_putc(unsigned char t)
{
  while(USB_TXE);

  //PORTD auf Ausgang
  DDRD = 0xFF;
  //Daten auf den Port
  PORTD = t;

  USB_WR_ON;
  USB_WR_OFF;

  //PORTC auf Eingang
  DDRD = 0x00;
  //Pull-Ups ein
  PORTD = 0xFF;
}

Matthias

von Andreas Hesse (Gast)


Lesenswert?

@Matthias
soweit erst mal sehr herzlichen Dank.
Ich werde mal ein wenig herumprobieren...

@Andreas
Preis war ca 15 Euro + Versandkosten
USB-Kabel und Zubehör kam noch extra.

Gruss
Andreas

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
Noch kein Account? Hier anmelden.