Comunicacion SPI con QT60248 (Tecnologia Touch)

Hola amigos del foro, ¿Alguno de ustedes ha tenido la oportunidad de usar este chip?.
Yo actualmente lo tengo montado en un teclado touch (0 desgaste mecanico :) ) pero he tenido problemas para establecer la comunicacion entre mi PIC y el QT60248, esta comunicacion se hace en SPI.

El QT60248 es un esclavo SPI y trabaja en el modo de trasmitir datos en el flanco de bajada, recibir datos en el flanco de subida y el estado de reposo del reloj es en nivel alto. Esta información es sacada del datasheet. Si algo entendi mal por favor diganmelo, esto es muy importante para un trabajo que estoy haciendo.

El datasheet del chip esta aqui: http://www.atmel.com/dyn/resources/prod_documents/qt60248_402.pdf

Les dejo el codigo que uso para hacer la lectura y escritura de bytes al QT60248.
Uso ProtonIDE v1.0.4.6 y Proton+ Basic Compiler v3.2.5.5.

Por cierto, NO estoy usando el hardware del PIC para manejar el SPI ya que por motivos de diseño no puede usar los terminales correspondientes del manjedor SPI por hardware del micro. El SPI lo intente implementar por software (por raro que parezca es muy dificil encontrar algunos codigos de ejemplo de la implementacion del protocolo SPI por software) El Proton tiene las instrucciones SHIN y SHOUT pero no me dejan hacer la configuracion correcta de envio o recepcion de datos segun el datasheet del QT60248.

Esta es la subrutina que uso para recibir bytes en SPI.

Código:
Recibir_SPI_Master:

' Esta rutina recibe un byte usando el protocolo SPI con las siguientes caracteristicas:
'   Velocidad del reloj = 50kHz (T = 20us)
'   El estado de reposo del reloj es Alto (High)
'   El byte se recibe del QT en el flanco de subida del reloj.
'   Se envia primero el bit menos significativo (LSB).

Low SS

Low MOSI
    
DelayUS 10

For i = 0 To 7 Step 1

    Low SCK
    
    DelayUS 10

    High SCK
    
    DelayUS 5
    
    If MISO = 1 Then
       
        DatoaRecibir.7 = 1
        
    Else
    
        DatoaRecibir.7 = 0
        
    EndIf

    If i <> 7 Then
    
        DatoaRecibir = DatoaRecibir >> 1
    
    EndIf
    
    DelayUS 10
    
Next i

DelayUS 5

High SS

High SCK

DelayMS 10

Return
Esta es la subrutina que uso para enviar bytes en SPI.

Código:
Enviar_SPI_Master:

' Esta rutina escribe un byte usando el protocolo SPI con las siguientes caracteristicas:
'   Velocidad del reloj = 50kHz (T = 20us)
'   El estado de reposo del reloj es Alto (High)
'   El byte se escribe en el QT en el flanco de subida del reloj.
'   Se envia primero el bit menos significativo (LSB).

Low SS

DelayUS 10

For i = 0 To 7 Step 1
    
    Low SCK

    If DatoaEnviar & $01 = 1 Then
    
        High MOSI
        
    Else
    
        Low MOSI
        
    EndIf
    
    DatoaEnviar = DatoaEnviar >> 1
    
    DelayUS 10
    
    High SCK

    DelayUS 10
         
Next i

DelayUS 5

High SS

Low MOSI

High SCK

DelayMS 10

Return
Espero me puedan ayudar en lo que sea, de verdad me siento un poco perdido.

Muchas gracias.

Saludos.
 
Última edición:
Atrás
Arriba