Autor Tema: Sencillo pero... no funciona  (Leído 2098 veces)

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

Desconectado Amarice_BA

  • PIC10
  • *
  • Mensajes: 25
Sencillo pero... no funciona
« en: 20 de Abril de 2005, 06:50:00 »
Mi duda no es tanto en cómo programarlo , sino más bien en cómo hacerlo funcionar.
Me explico, algo se me escapa.
Yo programo, compilo, meto al pic el hexadecimal con el mplab y... no va.
No sé si es por el watchdog, no creo, pero es que no sé ponerle.
¿Debo tener en cuenta algo con el mplab?, cuando lo uso lo programo por como viene por defecto y ya está.

Por eso pido ayuda a ver qué me podeis comentar.

El programa en cuestión es bastante sencillo, una comunicación en paralelo con un DAC.


#include <16F870.h>

#fuses HS,NOWDT,NOWRT,NOLVP,NOPUT,NOPROTECT,NOBROWNOUT

#use delay(clock=20000000)

#use fast_io(A)
#use fast_io(B)
#use fast_io(C)

void main()

    {

    byte e0, e1, e2;
    int nivel, estado;
    int const tension[6]={0xCE,0xC0,0xB3,0xA8,0x9E,0x86};

    set_tris_a(0xFF);
    set_tris_b(0x00);
    set_tris_c(0x00);

    output_b(0x00);
    output_c(0x00);

    nivel=0x00;
    estado=0x80;

    e0=input(PIN_A0);
    e1=input(PIN_A1);
    e2=input(PIN_A2);


    while(TRUE)

        {

        if(input(PIN_A0)!=e0)

            {

            estado=tension[nivel];
            output_c(estado);
            output_b(nivel);
            nivel++;

            if (nivel==6) { nivel=0; }

            e0=input(PIN_A0);

            }


        if(input(PIN_A1)!=e1)

            {

            estado++;
            output_c(estado);
            output_b(estado);
            e1=input(PIN_A1);

            }


        if(input(PIN_A2)!=e2)

            {

            estado--;
            output_c(estado);
            output_b(estado);
            e2=input(PIN_A2);

            }

        }

    }


Gracias.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Sencillo pero... no funciona
« Respuesta #1 en: 20 de Abril de 2005, 19:22:00 »
Buenas.

e0, e1, e2 los defines como bytes

void main()

{

Codigo:
byte e0, e1, e2;
int nivel, estado;
int const tension[6]={0xCE,0xC0,0xB3,0xA8,0x9E,0x86};


y los comparas e igualas con bits del puerto A, no será ese el problema?

cambialos a bits a ver si funciona

Desconectado Amarice_BA

  • PIC10
  • *
  • Mensajes: 25
RE: Sencillo pero... no funciona
« Respuesta #2 en: 23 de Abril de 2005, 09:33:00 »
Muchas gracias, tienes toda la razón, ya lo he cambiado.
Como ves, no es problema de programación.
En lo que soy novato es en el resto, montaje y demás.
El pic le tengo con las dos patas de Vss a tierra y con la de Vdd a 5 voltios.
Sin embargo he visto otros montados al revés, con las dos patas de Vss a 5 voltios y la de Vdd a masa.
Luego tengo puesto el consiguiente reloj de 20Mhz entre las dos patas correspondientes y los condensadores de 27pF a masa.
Suena ridícula mi duda pero para no haberlo hecho nunca voy a ciegas.
Gracias por la ayuda.