Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

13/01/2011 #1


DAC por I2C con CCS C.
Hola a todos, estoy usando una demo board del pic16F886 de 28 pines para hacer pruebas controlando un DAC de 12 bits,entre otros, el dac lo quiero controlar mediante I2C, lo unico que tengo que mandar es un valor hex para que me de un nivel de tension a la salida del Dac, mediante un Pc con una tarjeta I2C lo he conectado primero y he visto que funcionaba, le daba valores y todo perfecto, la trama que utilizo con el portatil y la tarjeta I2c es la siguiente:

S C0 00 00 --> para una Vout de 0V
S C0 0F FF --> para una Vout max(5v)

Siendo C0 la direccion I2c del DAC de 8 bits.

Ahora bien mi problema es que quiero hacer eso mismo pero con el PIC16F886, he estado mirando el tutorial y he visto que incluyendo
#use i2c(Opciones)
siendo las opciones (MASTER, SDA=PIN_C4, SCL=PIN_C5,ADDRESS=0X01,FAST,FORCE_HW)
puedo utilizar las funciones de:
i2c_isr_state; i2c_slaveaddr; i2c_write ;i2c_poll; i2c_start; i2c_speed; i2c_read; i2c_stop;

Viendolo asi me parecia muy sencillo ya que con estas 4 lineas creia que estaba hecho:
i2c_start(); //condicion de inicio
i2c_write(0xC0); //direccion del esclavo con el que haremos la comunicacion
i2c_write(0x0000); //enviamos un dato, DAC -->Vout=0V
i2c_stop(); //finalizacion de la comunicacion

pero no me funciona, no me hace nada, he probado simular con proteus y he conseguido que me funcione un ejemplo que hay por inet con un pic16f877 pero con el pic16f886 no consigo que mande nada, aqui os pongo el codigo por si me podeis hechar una mano.
Gracias.

#include <16f886.h>
#use delay(clock=4000000)
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C5,ADDRESS=0X01,FAST,FORCE_HW)

void main(void)
{

int cinco=1;
delay_ms(1000);
while(TRUE)
{
if(cinco==1)
{
i2c_start(); //condicion de inicio
i2c_write(0xC0); //direccion del esclavo con el que haremos la comunicacion

i2c_write(0x0000); //enviamos un dato, DAC -->Vout=0V
i2c_stop(); //finalizacion de la comunicacion

delay_ms(1000);
}

Nota:este programa me lo he copiado(ya que el mio no iba,para probar) de uno que estaba por inet,que he visto que con un pic16f877 funcionaba en proteus, lo he modificado un poco para ver si me iba pero nada.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.