Control de velocidad del motor utilizando I2C (lenguaje CCS)

Estimados expertos o practicantes ,necesito una ayuda es que hice el codigo CCS para que el control de velocidad de motor utilizando i2c ,es decir,un maestro que esta conectado con el teclado y el esclavo funcionaria como el motor .
Te cuento es que mi problema es que el esclavo esta funcionando pero no es controlado por el teclado .
Presento mi codigo y porfavor corrige y si es mejor me das tu codigo resuelto.
master :
#include <16F876a.h>
#fuses XT,HS,PUT,NOPROTECT,BROWNOUT,NOLVP,NOWDT
#use delay (clock=4000000)
#use i2c(MASTER, SDA=PIN_C4, SLOW, SCL=PIN_C3, NOFORCE_SW)
#define use_portb_kbd TRUE //Configuración puerto b para lectura teclado
#include <kbd.c> //Carga archivo para control de teclado
#include <lcd.c>
#use standard_io(b)
#use standard_io(c)
int tecla; //Dato a transmitir
void envio_I2C (){
i2c_start(); //Comienzo de la comunicación I2C ...
i2c_write(0xa0); //...con la dirección del PIC esclavo...
i2c_write(tecla); // Envia dato
i2c_stop(); //Finalización de la transmisión
}
void main() {
// char k;
int x;
lcd_init();
kbd_init();
port_b_pullups(TRUE);

while (TRUE) {
tecla=kbd_getc();
if(tecla!=0){
if(tecla=='*')
lcd_putc('\f');
else
lcd_putc(tecla); //Imprime carácter
}
}
}
slave:
#include <16F876a.h>
#use delay (clock=4000000)
#use standard_io(c)
#use standard_io(c)
#use I2C(SLAVE, SDA=PIN_C4 ,SLOW, SCL=PIN_C3, ADDRESS=0xa0, NOFORCE_SW)
#define use_portb_lcd TRUE
void main() {
int kant;
int dato;
char PWMH=0,PWML=0;
while (true) {
if(i2c_poll()) {
dato=i2c_read();
}
dato=dato-48; //Se convierte de ASCII a valor numérico
PWMH=dato*28; //Proporción entre valor tecla y semiperiodo Alto.
PWML=255-PWMH; //Semiperiodo Bajo


for(PWMH;PWMH>0;PWMH--){ //Obtención de la salida a nivel alto
OUTPUT_HIGH(PIN_A0);}
for(PWML;PWML>0;PWML--){ //Obtención de la salida a nivel bajo
OUTPUT_LOW(PIN_A0);}
}
}
y ademas adjunto el archivo de proteus.
 

Adjuntos

  • pruebaA.pdf
    32.7 KB · Visitas: 14
Atrás
Arriba