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

Temas similares

13/02/2013 #1


Creo que tengo errores en el programa del pic
busco alguien que sepa algo de ccs porque este programa que hice lo adapte de un tutorial de YouTube pero no estoy seguro de si está bien escrito o contiene errores. Antes quiero aclarar que soy bastante nuevo, que esta es mi segunda pregunta en el foro y pues mi conocimiento es limitado a lo que otros saben. Este es el programa que escribí:


Código:
#include <18F4550.h>
#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)


#define USB_HID_DEVICE FALSE // deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK // turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK // turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 32 // size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 32 // size to allocate for the rx endpoint 1 buffer


#include <pic18_usb.h> // Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "header.h" // Configuración del USB y los descriptores para este dispositivo
#include <usb.c> // handles usb setup tokens and get descriptor reports

#define led0 PIN_D0
#define led1 PIN_D1
#define led2 PIN_D2
#define led3 PIN_D3
#define led4 PIN_D4
#define led5 PIN_D5
#define led6 PIN_D6
#define led7 PIN_D7
#define puertoD output_d
#define puertoA output_a

const int8 Lenbuf = 32;
int8 recbuf[Lenbuf];
int8 cortina[]={0,1,3,7,15,31,63,127,255};
int8 mover[] = {0,1,2,4,8,16,32,64,128};
int8 gusano[]= {0,1,3,6,12,24,48,96,192,128};
int bipolar[]={10,9,5,6};
int uni_normal[]={12,6,3,9};
int uni_wave[]={8,4,2,1};
int uni_medio []={8,12,4,6,2,3,1,9};
int cont;
void main(void) {
  delay_ms(500);
  usb_init();
  usb_task();
  usb_wait_for_enumeration();
  enable_interrupts(global);
  while (TRUE){
    if(usb_enumerated()){
      if (usb_kbhit(1)){
        usb_get_packet(1, recbuf, Lenbuf);
        
        if(recbuf[0]==1){led0=~led0;}
        if(recbuf[0]==2){led1=~led1;}
        if(recbuf[0]==3){led2=~led2;}
        if(recbuf[0]==4){led3=~led3;}
        if(recbuf[0]==5){led4=~led4;}
        if(recbuf[0]==6){led5=~led5;}
        if(recbuf[0]==7){led6=~led6;}
        if(recbuf[0]==8){led7=~led7;}
        if(recbuf[0]==9){puertoD=0;
        for (cont=0;cont<=8;cont++){
         puertoD=cortina[cont];
         delay_ms(500);
        }
        for (cont=8;cont>=0;cont--){
         puertoD=cortina[cont];
         delay_ms(500);
        }
        }
        if(recbuf[0]==10){puertoD=0;
        for (cont=0;cont<=8;cont++){
         puertoD=mover[cont];
         delay_ms(500);
        }
        for (cont=8;cont>=0;cont--){
         puertoD=mover[cont];
         delay_ms(500);
        }
        }
        if(recbuf[0]==11){puertoD=0;
        for (cont=0;cont<=9;cont++){
         puertoD=gusano[cont];
         delay_ms(500);
        }
        for (cont=8;cont>=0;cont--){
         puertoD=gusano[cont];
         delay_ms(500);
        }
        }
        if(recbuf[0]==12){
        for (cont=0;cont<=3;cont++){
         puertoA=bipolar[cont];
         delay_ms(25);
        }
        }
        if(recbuf[0]==13){
        for (cont=0;cont<=3;cont++){
         puertoA=uni_normal[cont];
         delay_ms(25);
        }
        }
        if(recbuf[0]==14){
        for (cont=0;cont<=3;cont++){
         puertoA=uni_wave[cont];
         delay_ms(25);
        }
        }
        if(recbuf[0]==15){for (cont=0;cont<=7;cont++){
         puertoA=uni_medio[cont];
         delay_ms(25);
        }
        }
      }
    }
  }
}
me aparecen tres errores: uno que hace referencia a LVALUE, y otros de undefined en output_d y output_a.

este programa es para controlar unos led y un l298n por el pic18f4550 y usando el puerto usb.

ah, y si alguien es tan gentil de indicarme que argumentos adicionales serian necesarios para que digamos el puerto b reciba datos por unos interruptores y este dato recolectado sea enviado siempre por el puerto usb, se los agradecere mucho que este asunto me recontraurge
13/02/2013 #2
Moderador

Avatar de D@rkbytes

Éstas definiciones...
#define puertoD output_d
#define puertoA output_a
Cámbialas por...
#Byte puertoD = GetEnv("SFR:PORTD")
#Byte puertoA = GetEnv("SFR:PORTA")

Suerte.
13/02/2013 #3


bueno, se arreglo lo del undefined output, pero persiste en lo del LVALUE. Me dice que eso sucede cuando he asignado una constante donde deberia ir una variable. Alguna idea de que hago?
En el compilador me señala donde asigne led0=~led0
13/02/2013 #4
Moderador

Avatar de D@rkbytes

OK. Para poder determinar bien que hace ese programa, adjunta el archivo faltante header.h
Yo lo prodría compilar usando el estandard usb_desc_hid.h pero posiblemente cambie algo.
También adjunta un esquema o simulación si la tienes.
13/02/2013 #5


ok, este es. pero como te digo, me da ese error en la parte de

led0=~led0;

mirame a ver que sale

aprovechando, sabes como es que tengo que hacer para que la simulacion de isis pueda conectarla a la maquina. o sea, ya puse los virtual usb drivers, pero al conectar el pic al puerto usb me pide instalar el driver pero no me sale, ya probe con los mas nuevos que da microchip, con los que me pasaron en youtube, de mil lugares, pero no conecta, siempre me dice que no se hallo informacion del hardware que estoy tratando de instalar.
Archivos Adjuntos
Tipo de Archivo: zip test.zip (125,7 KB (Kilobytes), 5 visitas)
13/02/2013 #6
Moderador

Avatar de D@rkbytes

Prueba cambiando todas las instrucciones if(recbuf[0]==1){led0=~led0;} por ejemplo por...
if(recbuf[0]==1){output_toggle(led0);}
En mi caso no me pide instalar ningún controlador ya que uso Windows XP
Puedes probar los que vienen con el programa de CCS en la carpeta Drivers.
C:\Archivos de programa\PICC\Drivers\NT,2000,XP,VISTA,7
Y quizás sobre este tema puedas orientarte más, acerca de la conexión del PIC por USB
Interfaz de control para PICs USB-BULK (LabVIEW - C#)

Suerte.
13/02/2013 #7


yo tambien estoy usando xp, y si me pide instalar el driver. Pero probare lo que me dices
13/02/2013 #8
Moderador

Avatar de D@rkbytes

GerardoR2012 dijo: Ver Mensaje
yo tambien estoy usando xp, y si me pide instalar el driver. Pero probare lo que me dices
Tienes razón, ya recordé cuando los instale. Fue en esta ocasión
Ahí explico como instalar los controladores para ISIS.
14/02/2013 #9


pues no, no me funcionaron los driver de picc. Siempre dice lo mismo.
14/02/2013 #10
Moderador

Avatar de D@rkbytes

Desinstala todos los que hayas puesto, inicia ISIS y sigue los pasos que mencione.
Con eso otra vez debe volver a pedir los controladores, y salir la ventana del asistente.
14/02/2013 #11


si, lo de pedir los controladores lo hace, pero cuando voy a donde se supone está el driver, me dice que no se halló información sobre el hardware en ese archivo :S
14/02/2013 #12
Moderador

Avatar de D@rkbytes

Prueba con estos, son los que yo tengo instalados, y no tuve problemas durante la instalación.
Archivos Adjuntos
Tipo de Archivo: rar NT,2000,XP,VISTA,7.rar (5,7 KB (Kilobytes), 29 visitas)
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.