TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: robo_z en 27 de Marzo de 2017, 11:29:40
-
Hola Amigos
Me he propuesto hacer un Contador con un Integrado 74HC595 este tambien Multiplexa el Display de 2 Digitos, pero viendo mi simulacion no me funciona bien.
El Problema es que en la simulacion se Sobrepone un Numero Sobre el Otro, El punto es que ya lo habia simulado antes (lo hice con arduino) y funcionaba bien; pero al pasarlo al PIC12F675 sucede este problema.
Ojala Alguno de Uds. Pueda Ayudarme, Aqui dejo el Codigo y Una Imagen de la Simulacion:
#include <12F675.h>
#device ADC=10
#FUSES PUT //Power Up Timer
#FUSES NOMCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES PROTECT //Code protected from reads
#FUSES CPD //Data EEPROM Code Protected
#use delay(internal=4MHz)
#use FIXED_IO( A_outputs=PIN_A3,PIN_A2,PIN_A1,PIN_A0 )
#define DATA PIN_A0
#define CLOCK PIN_A1
#define LOAD PIN_A2
#define LED_1 PIN_A3
#define BTN_1 PIN_A4
#define BTN_2 PIN_A5
const int TiempoEspera = 5;
const byte NumAnodo[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
void shiftOut(int dataPin, int clockPin, int val);
void MuestraEnShift(int Decena, int Unidad);
void main()
{
setup_comparator( NC_NC_NC_NC ); // disable comparators
setup_adc_ports( NO_ANALOGS ); // disable analog inputs
setup_adc( ADC_OFF ); // disable A2D
output_bit(DATA, 0);
output_bit(CLOCK, 0);
output_bit(LOAD, 0);
while(TRUE)
{
MuestraEnShift(1, 2);
//delay_ms(100);
//TODO: User Code
}
}
void shiftOut(int dataPin, int clockPin, int val)
{
for (int i = 0; i < 8; i++)
{
output_bit(dataPin, !!(val & (1 << (7 - i))));
output_bit(clockPin, 0);
output_bit(clockPin, 1);
}
}
void MuestraEnShift(int Decena, int Unidad)
{
const int DispDigit[2]={DATA, CLOCK};
int DispNum[2]={};
DispNum[0]=Unidad;
DispNum[1]=Decena;
//for(int k=0; k<2; k++)
//{
for(int m=0; m<2; m++)
{
shiftOut(DATA, CLOCK, NumAnodo[DispNum[m]]);
output_bit(LOAD, 0);
output_bit(LOAD, 1);
//delay_ms(TiempoEspera);
output_bit(DispDigit[m], 1);
delay_ms(TiempoEspera);
output_bit(DispDigit[m], 0);
delay_ms(TiempoEspera);
//output_bit(LOAD, 1);
}
//}
}
De Antemano se Agradece Su Ayuda :)
-
Seguramente algun error en la simulacion del Proteus.
Todo parece casi correcto.
-
Muchas Gracias por Revisarlo KILLERJC
Lo Armaré en Fisico, Probablemente sea Como Dices. Yo Tampoco le Encuentro Error. Lo Raro es que cuando lo hice con Arduino me funciono normal en el Proteus, la unica diferencia que se me ocurre es la velocidad del Clock, Arduino Tiene 16Mhz y con este PIC le configure a 4Mhz (Interno).
Bueno Muchas Gracias Nuevamente.
-
Hola ,no programo en C y no puedo comprender tu programa pero te comento mi experiencia cuando use en su momento este CI ,lo configure uniendo las dos entradas de clock SHCP/STCP ,esto hace que con un pulso de clock el dato se desplaza hasta la salida directamente (no podes usar el estado de alta impedancia) y tuve que iniciar el envio con dos pulsos de clock ,el primer pulso de clock que envias hace ingresar el dato y el segundo lo pone a la salida ,luego envias normal con cada pulso de clock ,si recuerdo bien era de esta manera que me funciono ,bueno espero te ayude el comentario . Saludos!
-
El problema que el usa el pin de Clock para comandar los comunes de los displays tambien. De unirlos haria que desplaze una ves mas ( segun el flanco de reloj )