TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Foox en 05 de Julio de 2013, 22:52:13

Título: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 05 de Julio de 2013, 22:52:13
Hola gente buenas noches, estoy iniciandome en la programacion por medio de CCS y pics 16F
Me gustaría saber como es la manera asignar un valor  a un puerto y que no sea bit a bit.

Por ejemplo, en C18 solo tenias que configurar el Puerto como salida y después PORTB=Valor;

Necesito esto mismo pero en CCS para un 16F627A asi enviar los valores {12,6,3,9}; a uno de sus puerto, conectados a un ULN2803A para mover un motor PaP Unipolar.

(http://dc415.4shared.com/doc/cLb5r7e0/preview_html_4057dcb3.png)

Disculpen por si ya hay un post que habla sobre esto, no sabia bien como buscarlo y realmente no lo encontré!  :oops:

Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: KALLITOS en 05 de Julio de 2013, 23:12:21
Hola, busca por ACA (http://www.todopic.com.ar/foros/index.php?topic=14634.0), encontrarás mucho mas de lo que por el momento necesitas.

saludos
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 07 de Julio de 2013, 14:53:38
Te lo agradezco!!! ahora voy a ponerme a leer esa informacion ! gracias =D
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 16 de Julio de 2013, 02:50:09
Disculpen que vuelva a comentar, en la pagina de CCS hay una pregunta frecuente que habla sobre mi duda
http://www.ccsinfo.com/faq.php?page=map_io_to_variable

Código: [Seleccionar]
#byte PORTB = 6
#define ALL_OUT 0
#define ALL_IN 0xff

main() {
   int i;
   set_tris_b(ALL_OUT);
   PORTB = 0; // Set all pins low
   
   for(i=0;i<=127;++i) // Quickly count from 0 to 127
      PORTB=i; // on the I/O port pin
   
   set_tris_b(ALL_IN);
   i = PORTB; // i now contains the portb value.
}

Pero ahora mi problema es que mi compilador no reconoce lo que es el PORTB. Como si no fuera una herramienta del CCS.

***Error 44 "Motor paso a paso.c" Line 30(1,1): Internal Error - Contact CCS INCDEC SCR=268

Disculpen mi ignorancia, creo que me esta faltando algo que saber
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: ppyote en 16 de Julio de 2013, 06:22:14
Ese error no es del código que has puesto... Pon tú código y así se verá mejor cual puede ser el fallo,
por lo que leo, el fallo lo tienes en la línea 30... Miratelo a ver
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 16 de Julio de 2013, 12:16:48
Estoy usando el PIC C Compiler de CCS y en la ventana del programa me dice PCWHD, tiene tantos nombres que realmente no se para que lado buscar informacion!

Este es mi codigo! lo saque una linea que ocupaba lugar y ahora me dice que el error esta en el 29, osea en
Código: [Seleccionar]
PORTB=Motor; // on the I/O port pin
Código: [Seleccionar]
#include "C:\Documents and Settings\Fox\Mis documentos\PIC\Motor paso a paso.h"


void main()
{
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
 
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
# Byte PORTB = 6
# Define ALL_OUT 0
# Define ALL_IN 0xff
#define A PIN_A0
#define B PIN_A1
#define C PIN_A2
#define D PIN_A3
int Motor[4]={12,6,3,9};
set_tris_a(0x00);
   
   While(1){
   set_tris_b(ALL_OUT);
   PORTB = 0; // Set all pins low
   
   for(Motor=0;Motor<=3;++Motor) // Quickly count from 0 to 127
      PORTB=Motor; // on the I/O port pin
   
   set_tris_b(ALL_IN);
   Motor = PORTB; // i now contains the portb value.
            }
}

hay partes que quedaron al editarlo y están  sin usar :oops:
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: bmb en 16 de Julio de 2013, 15:55:28
Hola Foox, el código que muestras no alcanza a tener 30 líneas; habría que ver también el contenido del archivo Motor paso a paso.h, para verificar todas la líneas.

Saludos!
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 16 de Julio de 2013, 22:28:09
Hola bmb! gracias por responder aca te dejo un screen shot del programa ! Fijate la linea y el error! Muchas gracias :D

(http://img189.imageshack.us/img189/904/j24u.png)
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: KALLITOS en 16 de Julio de 2013, 22:42:21
las líneas 14, 15 y 16 no están correctamente escritas.
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: MGLSOFT en 16 de Julio de 2013, 22:55:24
Eso esta bien, pero no creo que sea el problema.

En este trozo de codigo:

Código: C
  1. int Motor[4]={12,6,3,9};
  2. set_tris_a(0x00);
  3.    
  4.    While(1){
  5.    set_tris_b(ALL_OUT);
  6.    PORTB = 0; // Set all pins low
  7.    
  8.    for(Motor=0;Motor<=3;++Motor) // Quickly count from 0 to 127
  9.       PORTB=Motor; // on the I/O port pin

Declaras Motor como un Int, y luego ese Int lo asignas a un Byte, sin hacer un Casting en el medio.

Ademas te refieres directamente a la variable Motor sin usar indexacion, en una variable que tiene indice ( Motor[2] asigna el valor 3 al Byte PORTB).

Prueba con este codigo a ver si va mejor....

Código: C
  1. byte Motor[4]={12,6,3,9};
  2. int8 My_Index = 0;  //usada como indice despues
  3. set_tris_a(0x00);
  4.    
  5.    While(1){
  6.    set_tris_b(ALL_OUT);
  7.    PORTB = 0; // Set all pins low
  8.    
  9.    for(My_Index=0;My_Index<=3;++My_Index) // Quickly count from 0 to 3
  10.       PORTB=Motor[My_Index]; // on the I/O port pin
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: MGLSOFT en 18 de Julio de 2013, 09:11:55
Lo has podido probar ?? :) :)
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 19 de Julio de 2013, 15:10:08
Lo compilo bien! mira vos, cuanto que me falta aprender!! =( recien arranco les agradezco de corazon !!!! Ahora lo pruebo!!

Me podrias explicar porque
Código: [Seleccionar]
byte Motor[4]={12,6,3,9};
int8 My_Index = 0;  //usada como indice despues
set_tris_a(0x00);

byte Motor[4]={12,6,3,9} me podrias en que transforma el byte, a la array?
y por que int8 ?


Muchas gracias a todos! y disculpen mi ignorancia! tengo 2 libros para consultar Lenguaje en C y uno para CCS pero por ahi necesito me surgen duda y necesito de su ayuda!
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: MGLSOFT en 19 de Julio de 2013, 16:07:46
Me alegro que compilara bien !! :D :D

y lo mas importante, funciona ??  :shock: :shock:
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: MGLSOFT en 19 de Julio de 2013, 16:25:34
Los tipos de datos en CCS.


Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 20 de Julio de 2013, 16:15:06
Hola chicos! Les agradezco mucho su ayuda!! me compila bien pero no me da pelota el 16F627A =( conecte 4 led para simularlo y no encienden, estos estan conectados a los pines del puerto A RA0 RA1 RA2 RA3
( con el programa viejo output_low y output_high, funciona! asi que el problema es en la programacion  :( )

El codigo lo copie de MGLSOFT !! Muchas gracias =D

Código: [Seleccionar]
#include "C:\Documents and Settings\Fox\Mis documentos\PIC\Motor paso a paso.h"


void main()
{
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
  
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
#Byte PORTA = 6
#Define ALL_OUT 0
#Define ALL_IN 0xff
byte Motor[4]={12,6,3,9};
int8 My_Index = 0;  //usada como indice despues
set_tris_a(0x00);
  
   While(1){
   PORTA = 0; // Set all pins low
         for(My_Index=0;My_Index<=3;My_Index++) // Quickly count from 0 to 3
         PORTA=Motor[My_Index]; // on the I/O port pin
         delay_ms(50);
   }
            }
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: MGLSOFT en 20 de Julio de 2013, 17:35:29
Publica por favor el otro archivo, motor pap.h
Veo de compilarlo y te digo que puede ser...
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 21 de Julio de 2013, 17:05:26
Código: [Seleccionar]
#include <16F627A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=4000000)

este seria el motor pap.h !
Muchas gracias por la ayuda ! =D
Título: Re: Como asignar un valor a un puerto en CCS?
Publicado por: Foox en 02 de Agosto de 2013, 13:31:28
Esto me esta quemando la cabeza, en los FAQs de la pagina de CCS da un ejemplo de un contador de 127 numeros
Código: [Seleccionar]
# Byte PORTB = 6
# Define ALL_OUT 0
# Define ALL_IN 0xff

main () {
   int i;
   set_tris_b (ALL_OUT);
   PORTB = 0; / / Establecer todos los pines bajos
   
   for (i = 0; i <= 127; + + i) / / cuenta rápidamente de 0 a 127
      PORTB = i; / / en el pin del puerto I / O
   
   set_tris_b (ALL_IN);
   i = PORTB; / / i ahora contiene el valor PORTB.
}
Recuerde al usar el # BYTE, la variable creada es tratada como la memoria. Usted debe mantener el control de los tres estados se registra a sí mismo a través de la función SET_TRIS_X.

asi como esta, me compila re bien.. pero cuando quiero transformar esa
Código: [Seleccionar]
int i;en un array
Código: [Seleccionar]
int i[4]={12,6,3,9};
me dice lo de siempre, solo por ese cambio  :z) :z) :z)