View previous topic :: View next topic |
Author |
Message |
Userrr
Joined: 09 Jul 2004 Posts: 40 Location: Europe
|
FT245BM |
Posted: Tue Jun 14, 2005 12:17 pm |
|
|
Please answ. me can I use PSP in 18F452 for driving FT245BM
and how mutch speed I can get from it?
Maybe some source code for it? |
|
|
valemike Guest
|
|
|
valemike Guest
|
|
Posted: Tue Jun 14, 2005 1:49 pm |
|
|
By the way, the demo module uses a PIC16F872 and it does have a 40pin DIP socket. All you have to do is plug in your own 18F452 after converting the demo code from 16F to 18F. |
|
|
kender
Joined: 09 Aug 2004 Posts: 768 Location: Silicon Valley
|
UART instead of PSP |
Posted: Wed Jun 15, 2005 12:16 am |
|
|
FT245BM accepts serial 0-5V input, and it can work with PIC's UART. The datasheet for FT245BM says that it can comunicate at 3Mbaud at TTL levels. I have used the chip only at 100kbaud. |
|
|
rwyoung
Joined: 12 Nov 2003 Posts: 563 Location: Lawrence, KS USA
|
Re: UART instead of PSP |
Posted: Wed Jun 15, 2005 7:26 am |
|
|
kender wrote: | FT245BM accepts serial 0-5V input, and it can work with PIC's UART. The datasheet for FT245BM says that it can comunicate at 3Mbaud at TTL levels. I have used the chip only at 100kbaud. |
I think you have confused the FT232BM with the FT245BM. The FT232BM is a UART to USB while the FT245BM is a 8-bit parallel bus to USB. Both parts can operate in a bit-banging mode at a reduced speed. _________________ Rob Young
The Screw-Up Fairy may just visit you but he has crashed on my couch for the last month! |
|
|
treitmey
Joined: 23 Jan 2004 Posts: 1094 Location: Appleton,WI USA
|
|
Posted: Wed Jun 15, 2005 7:48 am |
|
|
You can write your own dirver fairly easly. I did.(but I can't share the code)
Take someones serial ring buffer example(IRQ Tx & Rx). You can modifly them to do the 8bit parallel. And again this will be IRQ driven and the pins you use for IRQ should be apparent once you read the spec sheet. Also, FTDI has many example schamatics that will get you started, and let you know how to tie off pins and which ones to use.
http://www.ftdichip.com/Documents/Schematics.htm
I use 245BM example and the 245-5vb.pdf as reference.
This is the 5V bus powered example. |
|
|
Guest
|
|
Posted: Wed Jun 15, 2005 8:44 am |
|
|
Here is an extract of operational code from two different applications, one written in C showing how to output to the FT245 and one written in assembler inputting characters from the FT245. I did not have an example of inputting from the FT245 in C as it was not needed for the specific application.
Both examples used a combination of USB and serial UART driver - if the USB was active it was used, if not then the USART was used.
Code: |
/* some initialisation code */
//; initialise the I/O lines to the USB controller
bit_set(USB_FLUSH); //; initialise the flush FIFO pin
bit_clear(USB_WR); //; set default WR level
bit_set(USB_RD); //; set default RD level
/* end of initialisation code */
void console_putc(char TxChar)
/************************************************************************************************
;
; Subroutine console_putc
;
; Stdout routine (BLOCKING) for putting characters to the console interface.
;
; On Exit:
;
; Calls: Console_serial_putc
;
; ***********************************************************************************************/
{
long counter = 65535; // setup counter to prevent lockup on failure of USB
//; test to determine if the USB device is active
if (!bit_test(USB_PwrEn))
{
while ((counter!=0) && bit_test(USB_WRF))
{
counter--;
}
if (Counter)
{
DBus = TxChar; //; write the character to the data bus
bit_set(USB_WR);
DBusDir = 0; //; set data bus to output
bit_clear(USB_WR);
DBusDir = 0xff; //; set data bus to input
}
else
{
// timeout waiting on USB
Console_serial_putc(TxChar);
}
}
else
{
//; not active, pass control to the async port code
Console_serial_putc(TxChar);
}
}
void ServiceTxQConsole()
/************************************************************************************************
;
; Subroutine SrvTxQConsole
;
; Polled Console serial output subroutine (NON-BLOCKING)
; Transmits the next byte, if present, from the
; Console transmit buffer to the Console
; If the USB port is active, it is used, else the console Port is used
;
; Returns immediately if no characters are pending
; in the output buffer
;
; If the output register is busy the routine returns
; immediately
;
;
; Entry:
; Tx_TailC points to next character in buffer for transmission
; Tx_HeadC points to end of buffer
;
; Exit:
;
; Calls:
;
; ***********************************************************************************************/
{
//; test if there are any characters in the buffer to be processed
if (Tx_TailC != Tx_HeadC)
{
//; test to determine if the USB device is active
//; if not active pass control to the async port code
if (Bit_test(!USB_PwrEn))
{
//; here if the USB port is active
//; test if the device is free to transmit
if (bit_test(!USB_WRF))
{
console_putc(Tx_BaseC[Tx_TailC]);
Tx_TailC = (Tx_TailC + 1) % TxCQSize;
}
}
else
{
// USB not active
// check the status of the serial port to see if it is free
if (bit_test(TXIFC))
{
console_putc(Tx_BaseC[Tx_TailC]);
Tx_TailC = (Tx_TailC + 1) % TxCQSize;
}
}
}
}
; *************************************************************************
;
; Subroutine Srv_RxQIn
;
; Basic polled RS232 Rx port input service subroutine (NON BLOCKING)
; Services the USB controller if active, else services the asynchronous port
; Received a byte from the Async Port and puts it in the Rx232 buffer
;
; Entry:
; Rx_Head points to next free location in RS232 receive buffer
;
; Exit:
; FSR2 destroyed
; Read byte, if present is added to the receive buffer
; Rx_Head point to next location in the ring buffer
;
; *************************************************************************
Srv_RxQIn
; test to determine if the USB device is active
; if not active pass control to the async port code
btfsc USB_PwrEn
bra SRQI_Async
; here if the USB port is active
; any characters present?
btfsc USB_RDF
bra SRQI_Async ; no characters so check modem
; here we have a character in the USB controller
; Point FSR2 to the RS232 receive buffer
movlw high Rx_Base
movwf FSR2H
movff Rx_Head, FSR2L
; fetch it and add it to the receive buffer
setf DBusDir ; set the data bus to input
bcf USB_RD
nop
movf DBus, W
bsf USB_RD
movwf INDF2
; update the RS232 buffer head pointer
incf Rx_Head, F
return
SRQI_Async
;..... RS232 UART handler follows.... |
|
|
|
|