Autor Tema: pca9685  (Leído 1648 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado centeno

  • PIC10
  • *
  • Mensajes: 1
pca9685
« en: 07 de Febrero de 2021, 17:13:06 »
hola amigos les cuento: estoy trabajando en un proyecto personal y necesito controlar 16 servos con un PIC18f4550 y la pca9685 vía I2C
hasta el momento intente hacer unos códigos pero no consigo controlar la pca9685, el i2c estoy seguro que esta bien, lo que se me complica es enviar el PWM a los pines de salida de la PCA. No encuentro mucha información en internet ya que solo aparecerse información para Arduino y todas las librerías que encuentro son para Arduino.
no se si alguien de ustedes sepa usarla la pca9685 con un PIC específicamente el 18f4550 o si saben de alguna librería que me permita controlar los servos desde el pic como maestro y enviar la información a la PCA
trabajo en Mplab X y XC8 2.10
les agradaría si me pudieran ayudar ya que llevo varios días y ya estoy estresado.
les dejo el código que mas me ha ayudado:
Código: [Seleccionar]
#include <xc.h>
#include <htc.h>
#include <stdio.h>
#include <stdlib.h>
#include "I2C_LIB.h"
#include "CONFIG.h"


unsigned int pca_addr;

void pca_init (unsigned int addr){
    pca_addr = addr;
    TRISDbits.TRISD0 = 0;
    PORTDbits.RD0 = 0; // Habilitación de PCA9685 con OE = 0
   
    I2C_Init (100000); // Inicializando la comunicación I2C a 100 KHz
    I2C_Start (); // Señal de inicio
    I2C_Enviar(pca_addr); // Especificando la dirección del esclavo en modo escritura
    I2C_Enviar (0x00); // Registro de control configurado en la dirección 00h
    I2C_Enviar (0x21); // Modo 1 configurado con AI = 1 y ALLCALL = 1
    I2C_Stop (); // Señal de parada
    __delay_ms(500);   
}

void pca_write(unsigned int ledn, unsigned int on_count, unsigned int off_count)
{
    if(ledn>15)                         //Checking for invalid output pin number
        return;   
    I2C_Init(100000);                 //Initializing I2C communication at 100KHz
    I2C_Start();                        //Start signal
    I2C_Enviar(pca_addr);                //Specifying slave address in write mode
    I2C_Enviar((ledn*4)+6);              //Control register set to address LEDn_ON_L
    I2C_Enviar(on_count & 0xFF);           //Writing 8 LSB bits of ON count
    I2C_Enviar((on_count & 0xF00)>>8);     //Writing 4 MSB bits of ON count
    I2C_Enviar(off_count & 0xFF);          //Writing 8 LSB bits of OFF count
    I2C_Enviar((off_count & 0xF00)>>8);    //Writing 4 MSB bits of ON count   
    I2C_Stop();                         //Stop signal
}
void main(void) {
    ADCON1=0X0F;
    TRISA=0XFF;
    TRISD=0X00;
    PORTD=0X00;
    while(1){
        pca_init(0x40);
        pca_write(1, 1024, 3072);
    }
   
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:pca9685
« Respuesta #1 en: 07 de Febrero de 2021, 17:39:10 »
Solo voy a preguntarte:

¿leiste el datasheet del PCA9685 en ves de estar probando y probando?

Ya que decis:

Citar
No encuentro mucha información en internet

Cuando el datasheet del PCA9685 explica lo que tenes que enviarle, como, etc, etc, etc. Hasta provee ejemplos sobre los valores a cargar para calcular el PWM