Autor Tema: dsPIC Curso Basico con C30  (Leído 349815 veces)

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

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: dsPIC Curso Basico con C30
« Respuesta #60 en: 25 de Enero de 2005, 05:46:00 »
Es un codigo apañado que encontre para los 16Fxxx
Codigo:

 

  // LCD HD44780U 4 bit mode.
  // LCD tipos:   1x8, 2x8, 1x16, 2x16, 2x20, 4x16, 4x20   
  // Modificado para DsPic 30Fxxxx

 /*                           
         //  USER"S ROUTINES DESCRIPTION:         
                           
  LCD_INIT()                ---> initilalize the LCD.             
  LCD_CLEAR()               ---> Clears and Home LCD.         
                           
  LCD_CMD("char")           ---> Send a command to the LCD.   See LCD datasheet for the complete list of commands.         
  LCD_GOTO(line,pos)        ---> Set the Cursor to a specified Line and position. Lines available are from 1 to 4. Pos available starts from 1 to max available on your LCD.         
  LCD_PUTCH("char")         ---> Write a character on LCD (ASCII representation).

  LCD_PUTS("string" )        ---> Write a string on LCD.
  LCD_PUTC("constant" )      ---> Write a const string on LCD.
  LCD_PUTUN(unsigned long)  ---> Write an Unsigned Number on LCD. It works both with INT (16bit) and CHAR (8bit). y (32bit) maximo 9 digitos
         
  Set_CGRAM_address(char addr) --->

    Ejemplo . escribe 2 caracteres predefinidos en direccion 0 y 1
    LCD_INIT();  
    Set_CGRAM_address(0);
    LCD_PUTCH(1);LCD_PUTCH(2);LCD_PUTCH(4);LCD_PUTCH(8);LCD_PUTCH(16);LCD_PUTCH(32);LCD_PUTCH(1);LCD_PUTCH(1);
    LCD_PUTCH(9);LCD_PUTCH(10);LCD_PUTCH(1);LCD_PUTCH(1);LCD_PUTCH(1);LCD_PUTCH(1);LCD_PUTCH(1);LCD_PUTCH(1);
   
    LCD_CLEAR();  
    LCD_PUTCH(0); LCD_PUTCH(1);
 */


/************************************************************************/
/* Use the following defines to set the lines as your hardware requires   */
/* ...you can use ANY output line of the MCU, even on several ports Sonrisa   */
/************************************************************************/

  #define LCD_ROWS   2   // valid numbers are: 1,2          
  #define LCD_COLS   20   // valid numbers are: 8,16,20   // (set to 2 for 2 or more rows)

  /*  PUERTOS */
  #define   LCD_RS        PORTEbits.RE4          // Register select
  #define   LCD_EN        PORTEbits.RE5          // Enable
  #define   LCD_D4        PORTEbits.RE0          // LCD data 4
  #define   LCD_D5        PORTEbits.RE1          // LCD data 5
  #define   LCD_D6        PORTEbits.RE2          // LCD data 6
  #define   LCD_D7        PORTEbits.RE3          // LCD data 7
  /*  TRIS */
  #define   LCD_RS_TRIS   TRISEbits.TRISE4      // Register select
  #define   LCD_EN_TRIS   TRISEbits.TRISE5      // Enable          
  #define   LCD_D4_TRIS   TRISEbits.TRISE0      // LCD data 4
  #define   LCD_D5_TRIS   TRISEbits.TRISE1      // LCD data 5
  #define   LCD_D6_TRIS   TRISEbits.TRISE2      // LCD data 6
  #define   LCD_D7_TRIS   TRISEbits.TRISE3      // LCD data 7

/************************************************************************/

  #define LCD_CLR      0x01                // Clear Display
  #define LCD_HOME      0x02                // Cursor to Home position
                                           
                                            // Entry mode set
                                            // ejemplo: LCD_CMD( CURSOR_DIRECCTION_Decrement | NO_Accompanies_display_shift );
  #define  CURSOR_DIRECCTION_Increment 0x6
  #define  CURSOR_DIRECCTION_Decrement 0x4
  #define  Accompanies_display_shift  0x5
  #define  No_Accompanies_display_shift 0x4
                                           // Display on/off control
                                           // ejemplo: LCD_CMD( DISPLAY_ON | CURSOR_ON | CURSOR_BLINKING_OFF );
  #define DISPLAY_ON 0x0C
  #define DISPLAY_OFF 0x08
  #define CURSOR_ON 0x0A
  #define CURSOR_OFF 0x08
  #define CURSOR_BLINKING_ON 0x09
  #define CURSOR_BLINKING_OFF 0x08
                                           // Cursor or display shift
                                           // ejemplo: LCD_CMD( Cursor_move |  Shift_to_the_left );  
  #define Display_shift 0x18
  #define Cursor_move 0x10
  #define Shift_to_the_right 0x14
  #define Shift_to_the_left 0x10


 /************************************************************************/
  #if (LCD_COLS==20)
   #define LCD_line1   0x80 // Line 1 position 1
   #define LCD_line2   0xC0 // Line 2 position 1
   #define LCD_line3   0x94 // Line 3 position 1 (20 char LCD)
   #define LCD_line4   0xD4 // Line 4 position 1 (20 char LCD)
  #else
   #define LCD_line1   0x80 // Line 1 position 1
   #define LCD_line2   0xC0 // Line 2 position 1
   #define LCD_line3   0x90 // Line 3 position 1 (16 char LCD)
   #define LCD_line4   0xD0 // Line 4 position 1 (16 char LCD)
  #endif
 /************************************************************************/

  // const Font_3x6_0[8] = { 0,0,0,0,0x38,0x44,0x38,0}; /* 0   0x30 */


 /****************************************/
 /*    DelayUs Microsegundos             */
 /****************************************/   
  void DelayUs(int v)   // 40 MIPS
 {
   while(v != 0){
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );

   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );

   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );

   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );
   asm("nop" );asm("nop" );


     /**/


    v--;}
 }

 /****************************************/
 /*    DelayMs MiliSegundos              */
 /****************************************/   
   void DelayMs(int v)
 {
   while (v != 0 ){ DelayUs(1000); v--;}
 }

  /****************************************/
  /*     Enable LCD to read data   */
  /****************************************/
  void LCD_STROBE (void)
  {
  LCD_EN = 1;
  DelayUs(1);
  LCD_EN = 0;
 }   

     
/****************************************/
/*    Write a nibble to the LCD           */
/****************************************/
  void LCD_NIBBLE_OUT (unsigned char c )  {
 
   LCD_D4=c ; c >>= 1;
   LCD_D5=c;  c >>= 1;
   LCD_D6=c;  c >>= 1;
   LCD_D7=c;  
   LCD_STROBE();
  }
 

/****************************************/
/* Write a byte to the LCD (4 bit mode) */
/****************************************/
 void LCD_WRITE (unsigned char c)
  {
  LCD_NIBBLE_OUT(c >> 4);
  LCD_NIBBLE_OUT(c);
  DelayUs(50);
  }


 /****************************************/
 /*       send a command to the LCD      */
 /****************************************/
  void LCD_CMD (char c)  {

  LCD_RS = 0;   // write command
  LCD_WRITE(c);

  }

/****************************************/
/*  GoTO specified line and position    */
/****************************************/
  void LCD_GOTO (char line,char pos)   // Set DDRAM address  
  {
  switch(line)
   {
   case 1: LCD_CMD((LCD_line1-1)+pos);
          break;
   case 2: LCD_CMD((LCD_line2-1)+pos);
        break;
   case 3: LCD_CMD((LCD_line3-1)+pos);
          break;
   case 4: LCD_CMD((LCD_line4-1)+pos);
   }
  }


  /****************************************/
  /*           Clear and Home LCD         */
  /****************************************/
  void LCD_CLEAR (void)
  {
  LCD_CMD(LCD_CLR);
  DelayMs(3);
  }


  /****************************************/
  /*     Write one character to the LCD   */
  /****************************************/
  void LCD_PUTCH (unsigned char c)
  {
  LCD_RS = 1;   // write characters
  LCD_WRITE(c);
  }

 /****************************************/
 /*       Write a string to the LCD      */
 /****************************************/
 void LCD_PUTS ( char  * s)
 {
 LCD_RS = 1;   // write characters
  while(*s)
    LCD_WRITE(*s++);
 }

 /****************************************/
 /*       Write a const to the LCD      */
 /****************************************/
 void LCD_PUTC ( const  * s)
  {  
 LCD_RS = 1;   // write characters
  while(*s)
    LCD_WRITE(*s++);
 }

/****************************************/
/*  Set CGRAM address                   */
/****************************************/
  void Set_CGRAM_address(unsigned char addr){
     addr = addr & 0x3F;
     LCD_CMD(0x40 | addr );
  }

 /************************************************/
 /*       Write a const to the LCD               */
 /*  escribe un caracter predefinido en cgram    */
 /************************************************/
 void LCD_SetCaracter (unsigned  char posicion , const  * s)
 { unsigned char a; a=8;

 Set_CGRAM_address(posicion);

 LCD_RS = 1;   // write characters
  while(a != 0){
    LCD_WRITE(*s++); a--;}
  }

/****************************************/
/*  Escribe Valor numerico al LCD       */
/*  Max 1 a 9 digitos                   */
/*  ceros a la izquierda blancos        */
/*  puno de miles y millones            */
/****************************************/  
/*  ejemplo :  341.000.780   1.886  23  */

  void LCD_PUTUN (unsigned char Digitos , unsigned long valor)
  {
   unsigned char t1,i,wrote;
   unsigned long k;
 
  wrote=0;
  for (i=Digitos-1; i>=1; i--)
     {
     switch(i){

     case 8: k=100000000;
        break;
    case 7: k=10000000;
        break;
     case 6: k=1000000;
        break;
   case 5: k=100000;  if (Digitos > 6){ if (wrote==1){ LCD_PUTCH(".");} else { LCD_PUTCH(" ");}} // millones
        break;
    case 4: k=10000;        
        break;
     case 3: k=1000;  
        break;
   case 2: k=100;     if (Digitos > 3){ if (wrote==1){ LCD_PUTCH(".");} else { LCD_PUTCH(" ");}} // miles
       break;
   case 1: k=10;
   }
    t1=valor/k;
 
   if((wrote)||(t1!=0)){LCD_PUTCH(t1+"0"); wrote=1;}
    else LCD_PUTCH(" ");                               // Ceros izquierda blanco

    valor-=(t1*k);
   
   }
   LCD_PUTCH( valor +"0");

}


/****************************************/
/*             Initialize LCD           */
/****************************************/   
  void LCD_INIT (void)
{
  /* Configura los TRIS como salidas */
   LCD_RS_TRIS  = 0;      // Register select
   LCD_EN_TRIS  = 0;       // Enable          
   LCD_D4_TRIS  = 0;       // LCD data 4
   LCD_D5_TRIS  = 0;       // LCD data 5
   LCD_D6_TRIS  = 0;        // LCD data 6
   LCD_D7_TRIS  = 0;       // LCD data 7


   LCD_RS = 0;              // write control bytes
   DelayMs(20);              // power on delay
   LCD_NIBBLE_OUT(0x04);    // set 4 bit mode
   DelayUs(100);

   #if (LCD_ROWS==1)
    LCD_CMD(0x20);   // 4 bit mode, 1 line, 5x8 font          (0b00100000);
   #else
    LCD_CMD(0x28);   // 4 bit mode, 2 or more lines, 5x8 font (0b00101000);
   #endif

   LCD_CMD(DISPLAY_OFF);
   LCD_CMD(DISPLAY_ON | CURSOR_OFF | CURSOR_BLINKING_OFF);
   LCD_CMD( CURSOR_DIRECCTION_Increment | No_Accompanies_display_shift );
   LCD_CLEAR();
  }





menudos cacharretes Rebotado

Desconectado lobopiC

  • PIC10
  • *
  • Mensajes: 4
RE: dsPIC Curso Basico con C30
« Respuesta #61 en: 11 de Noviembre de 2005, 15:34:00 »

Hola, alguien me pude dar referencia del MIKROBASIC o MIKROPASCAL si ya han realizado proyectos, ke tal es cuando trabaja con oeraciones de coma flotante.
http://www.mikroelektronika.co.yu/english/product/compilers/

Gracias por sus respuestas.

Juan CarlosNavidad

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: dsPIC Curso Basico con C30
« Respuesta #62 en: 21 de Mayo de 2006, 16:47:14 »
Siguiendo con el hilo, quiero probar los dspic y pedir algunos samples a microchip. cuales me aconsejais que pida?

Saludos.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado patolinec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 206
Re: dsPIC Curso Basico con C30
« Respuesta #63 en: 21 de Junio de 2006, 17:18:12 »
Pues no conozco mucho de DsPics y me da enviada que en otrs paises puedas pedir muestras, aca nada pero lo que es nada.

Bueno para empezar creo que el mejor es el 30F2010, y me avisas para poer ir haciendo alguna plicacion entre los dos porque yo ya lo tengo pero no he hecho aun nada con el
Casi me maté pero ahora estoy de nuevo vivo

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: dsPIC Curso Basico con C30
« Respuesta #64 en: 21 de Junio de 2006, 17:42:04 »
Hola:

Yo tengo un 30F2010 y 30F4011 cortesia de Nocturno..  :mrgreen:, esos tipos de Dspic te podrian servir para experimentar.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: dsPIC Curso Basico con C30
« Respuesta #65 en: 21 de Junio de 2006, 20:26:16 »
Bueno, al final he pedido unos samples de DSPIC30F3010. Cuando los reciba empezare a probarlos.

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado patolinec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 206
Re: dsPIC Curso Basico con C30
« Respuesta #66 en: 23 de Junio de 2006, 21:50:46 »
Hola:

Yo tengo un 30F2010 y 30F4011 cortesia de Nocturno..  :mrgreen:, esos tipos de Dspic te podrian servir para experimentar.

Hola Lord me lo podrias prestar me refiero al dsPic30f2010?
Casi me maté pero ahora estoy de nuevo vivo

Desconectado Arbolito

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 893
Re: dsPIC Curso Basico con C30
« Respuesta #67 en: 23 de Junio de 2006, 23:00:59 »
Hola yo tengo un  de dspic que compre  8),pero de momento no lo voy a utilizar
bueno si alguien los nesecita porque les va a dar uso pues se los puedo prestar  :mrgreen:
un saludo
juan.
Existo, aunque pienses que no pienso

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: dsPIC Curso Basico con C30
« Respuesta #68 en: 30 de Junio de 2006, 22:41:35 »
Saludos a todos, apenas comenzare en la programacion del dsPIC30F2010 para la implementación de un control difuso. El programador que ya me funciona es el JDM por serie ya esta implementado y funcionando (en protoboard en 3 días hare el circuito impreso) es bastante rápido  con el programa winpic800. Si tengo alguna información la pondre por aqui por si a alguien le sirve, poco a poco claro esta ya que apenas estoy aprendiendo a programar tanto pics como dspic (yo usaba el atmel AT89C2051)

Hasta pronto
Que la fuerza te acompañe

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: dsPIC Curso Basico con C30
« Respuesta #69 en: 01 de Julio de 2006, 02:40:13 »
Enhorabuena FJPPita y ánimo con tu proyecto.

¿Qué será exactamente lo que haga tu control difuso?

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: dsPIC Curso Basico con C30
« Respuesta #70 en: 04 de Julio de 2006, 15:56:08 »
Lo que planeo hacer es una lampara de luz blanca mediante la combinacion de los colores primarios usando LEDs (rojo, azul y verde) y el control difuso se va a encargar de manipular la cantidad de color que proporciona de cada uno de los LEDs. Las variables que obtendre para introducir en el control difuso sera una la cantidad de luz de color de cada led mediante un sensor TCS230 y la salida sera un voltaje de control para cada LED.
Que la fuerza te acompañe

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: dsPIC Curso Basico con C30
« Respuesta #71 en: 17 de Diciembre de 2006, 00:40:01 »
 Hola muchachos quería hacerles unas consultas sobre el dspic 30f4011

 Yo tengo mi grabador y graba el dspic 30f4011 20I/P sin problemas, pero cuando coloco el 30f4011 20E/P lo lee`pero no lo puede borrar ni grabar, el Vpp=13.3v. porque ocurre esto, serà que la versión E/P necesita màs voltaje por ejm 14v para grabar.

 Y otra inquietud los dspics son robustos, por ejm puede estar funcionando realizando algoritmos complejos durante 36 horas sin parar, (claro que bien protegidos contra el ruido externo e interno). Puede ponerse a la altura de la robuztes de un motorola o un texas, gracias por responder.

control de movimiento

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: dsPIC Curso Basico con C30
« Respuesta #72 en: 02 de Enero de 2007, 21:50:58 »
 hola muchachos, voy a ponerme al día hasta donde han avanzado en este curso de C30, luego empezaré a aportar, nos vemos
control de movimiento

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
como utilizar el timer.h que trae el C30
« Respuesta #73 en: 11 de Enero de 2007, 21:33:59 »
  Hola muchachos, me he comprado el libro de Angulo "Microcontroladores Avanzados dsPIC" y es un buen libro, explican en una forma clara los módulos y como funciona un dsPIC pero tiene un problema los ejemplos están en asembler, pero igual se los recomiendo.

 He estado revisando los timer, y he cojido un ejemplo pequeño de microchip, que utiliza el timer1, como temporizador síncrono y prescaler de 1:1 para hacer bascular la patita RD1. Sin embargo cuando lo compilo me salen varios errores todos relacionados a la librería Timer.h, no reconoce WriteTimer1(), ReadTimer1(), etc.

 Alguien porfavor puede cargar este archivo y hacerlo compilar con el C30, porque no puedo usar el timer.h..?, como se lo usa, o se la llama..?.

 El programita es este


#include "p30f4011.h"
#include <timer.h>

unsigned int timer_value;     /*valor entero sin signo  */

void __attribute__((__interrupt__)) _T1Interrupt(void)
{
 PORTDbits.RD1 = 1; /* RD1 en alto  */
 WriteTimer1(0);    /*   */
 IFS0bits.T1IF = 0; /* Clear Timer interrupt flag */
}

int main(void)
{
 unsigned int match_value;   /* valor entero sin signo  */
 TRISDbits.TRISD1 = 0;       /* RD1 como salida */
 PORTDbits.RD1 = 1;          /* RD1 en alto */
 /* Habilitando interrupción del timer 1, prioridad 1 */
 ConfigIntTimer1(T1_INT_PRIOR_1 & T1_INT_ON);
 WriteTimer1(0);             /* lo cargamos con cero */
 match_value = 0xFFF; 
 /* configuración del timer1 temporizador síncrono, y prescaler 11  */
 /*  PR1=match_value, timer1 no funciona en modo espera */
 OpenTimer1(T1_ON & T1_GATE_OFF & T1_IDLE_STOP &
 T1_PS_1_1 & T1_SYNC_EXT_OFF &
 T1_SOURCE_INT, match_value);
 /* Wait till the timer matches with the period value */
 /* esto hace bascular al RD1 en tiempos síncronos  */
 while(1)
 {
   timer_value = ReadTimer1();
   if(timer_value >= 0x7FF)
     {
      PORTDbits.RD1 = 0; /* RD1 en bajo */
     }
 }
 CloseTimer1();
}

  /* gracias  */
control de movimiento

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: dsPIC Curso Basico con C30
« Respuesta #74 en: 12 de Enero de 2007, 02:34:41 »
Compiló bien a la primera:
BUILD SUCCEEDED: Fri Jan 12 06:30:44 2007

Quizás lo que te ha ocurrido es que no has completado el proyecto con todos los ficheros que son necesarios, o sea:
- en Source files tu fichero .C: prueba.c
- en Header files: timer.h
- en Library Files los ficheros: libp30F4011-coff.a y libp30F4011-elf.a
- en Linker Scripts: p30f4011.gld

Te dejo a continuación el fichero de proyecto que yo he usado por si te sirve, aunque no tendrás la misma estructura de carpetas que yo, siempre puedes modificarla editando el fichero de proyecto con cualquier editor de texto.


 

anything