Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/05/2012 #461

Avatar de ByAxel

sshoice esparza dijo: Ver Mensaje
exelente men
nadamas estas declarando la variable dato con : int8 dato;
pero para declarar una variable de tipo byte?
El int8 es lo mismo que byte, por defecto toma valores de 0 a 255. El resto ya depende del programa si se desea usa signed o unsigned delante de byte o int8. En el tiempo que he usado el CCS me he dado cuenta que no es un compilador muy estricto.

Tambien hay int1, int8 , int16 que es lo mismo para byte, word, int, etc... todo esta en el archivo de ayuda.

Un saludo
10/05/2012 #462


Saludos,

Estoy tratando de mostrar la lectura del adc (AN0) del pic16f877A en una pantalla gráfica en proteus, francamente no sé cómo proceder pues no he acertado con la solución, estaré muy agradecido si me orientan o, si tienen, un ejemplo básico para mostrar un float o entero en estas glcd.
14/05/2012 #463


Bueno, ya lo resolví con un ejemplo de la ayuda del pcw, aunque tengo algunas dudas al respecto y, formulo nuevamente, si alguien puede orientarme, muchas gracias de antemano. Mi dudas son respecto a lo que hacen algunas lineas del ejemplo como estas:

adc=(adc>249)?249:adc;

if (adc>200 && !warn)
14/05/2012 #464

Avatar de ByAxel

DEPREDADORX1 dijo: Ver Mensaje
Bueno, ya lo resolví con un ejemplo de la ayuda del pcw, aunque tengo algunas dudas al respecto y, formulo nuevamente, si alguien puede orientarme, muchas gracias de antemano. Mi dudas son respecto a lo que hacen algunas lineas del ejemplo como estas:

adc=(adc>249)?249:adc;

if (adc>200 && !warn)
Hola:
En adc=(adc>249)?249:adc;
es como un resumen de los comandos IF-ELSE que seria así:

Código:
if(adc>249){
   adc = 249;
}else{
      adc = adc;
}
y en if (adc>200 && !warn)
hace una doble comparación y ambas tienen que ser verdaderas.

Si(If) ¿adc>200 y(&&) warm=0? entonces.... {}

Un saludo
14/05/2012 #465


Ah.... ya veo, mi sincero agradecimiento por tu respuesta, seguiré practicando ahora que me es un poco más claro esto a ver a donde llego y quizás mas adelante enbarcarme en un buen proyecto.

De nuevo gracias y mucha Suerte!
17/05/2012 #466


Saludos nuevamente,

Estaba interesado en hacer un velocímetro en ccs pero veo que resulta complejo pues tiene que implementarse con timer y, segun he leido, resulta dificil alcanzar la precisión necesaria para tal fin pues habría que hacer lectura cada segundo, me gustaría tener la opinión del algun forero que sepa, pues entonces no me complico y lo dejo en basic (proton) pues tiene la orden Count para tal fin.
24/05/2012 #467


buenas tardes amigos.. estoy impresionado por las cosas que se pueden hacer con los microcontroladores, los felicito por tan excelente página. estoy iniciandome pocoa poco en el mundo de la programación y hace poco realice un llamado propeller displays con un 16F877A en el cual tengo conectado el puerto B a los leds (desde RB1 a RB7) para asi formar las palabras en una matriz de 7x5 (los 5 me los da el desplazamiento de la barra de leds), ademas de esto le tengo 2 leds conectados 1 a RA0 y el otro a RA1 los cuales los tengo en los extremos de la barra para asi tener un marco en la imagen, en inconveniente que tengo es la sincronización que debe tener el sistema para que al pasar por los 360° de la circunferencia se haga una interrupción y me comience de nuevo el mensaje(cosa que no sucede y cuando termina de escribir el mensaje se repite de inmediato), lo que se me ha ocurrido es un sensor óptico de barrera conectado al RC0 que con el registro de control del timer 1 se pueda obtener esta señal y enviarlo de nuevo al inicio de la escritura en el display, lo que no se es como leer este registro para así cada vez que se termine de leer la palabra el micro tenga que esperar a que se culminen los 360° para volver a empezar.

De antemano les agradezco su colaboración
26/06/2012 #468


tu si broer ah para aquel que empieza tus ejemplos son muy utiles sigues asi muchacho.
06/07/2012 #469


Problema al repetir ciclo de sentencias
hola a todos
tengo un problema y no se como resolverlo, es referente al pic12f508 donde tengo las instrucciones para encender dos led.
en la primera intruccion se enciendn las salidas 3 y 4 (uno y despues el otro) en la segunda intruccion es parecida solo que quiero que se repita por lo menos 5 veces antes de que regrese a la primera instruccion.
despues quiero que al mismo tiempo se encienda los 2 led pero no me lo respeta solo enciende uno a la vez (este codigo no lo inclui debido a que no me encienden asi).
ojala alguien pueda hecharme la mano

incluyo el programa

Código:
LIST P=12F508, r=hex   ;originalmente es PIC12C508 yo lo cambie porque uso el 12F508
   INCLUDE "P12F508.INC"   ;Incluimos la libreria que originalmente era PIC12C508

   __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC ;Aquí se configuran los fusibles

; Variables
W   EQU 0
F   EQU 1

OUT1   EQU   0   ;GP0
OUT2   EQU   1   ;GP1
OUT3   EQU   2   ;GP2   ; no se usa GP3 por ser exclusivamente entrada
OUT4   EQU   4   ;GP4
OUT5   EQU   5   ;GP5
AUX1   EQU   0x0C   ;variable auxiliar
AUX2   EQU   0x0D   ;variable auxiliar
N    EQU 0x00

   ORG 0x000

   clrwdt


   movlw b'11000000'
   option

   movlw b'00001000'   ; Configura GP0-GP2 y GP4-GP5 como salida. GP3 solo es entrada
   tris GPIO

   bcf GPIO,OUT1   ;Borra todas las salidas
   bcf GPIO,OUT2
   bcf GPIO,OUT3
   bcf GPIO,OUT4
   bcf GPIO,OUT5


flasher 
bsf  GPIO,OUT3   ;Enciende el tercer LED
   call retardo   ;Espera un tiempo
   bcf  GPIO,OUT3   ;Apaga el tercer LED
   call retardo   ;Espera un tiempo 

 bsf  GPIO,OUT4   ;Enciende el cuarto LED
   call retardo   ;Espera un tiempo
   bcf  GPIO,OUT4   ;Apaga el cuarto LED
   call retardo   ;Espera un tiempo
goto repetir


repetir
incf N,F
bsf  GPIO,OUT2   ;Enciende el tercer LED
   call retardo   ;Espera un tiempo
   bcf  GPIO,OUT2   ;Apaga el tercer LED
   call retardo   ;Espera un tiempo 
 bsf  GPIO,OUT5   ;Enciende el cuarto LED
   call retardo  ;Espera un tiempo
   bcf  GPIO,OUT5   ;Apaga el cuarto LED
   call retardo   ;Espera un tiempo

goto flasher


retardo
   movlw   0x80      
   movwf   AUX1
   movwf   AUX2
Dec_1
   decfsz   AUX1, F
   goto   Dec_1
   decfsz   AUX2, F
   goto   Dec_1
   retlw   0
08/07/2012 #470

Avatar de tronik

Fuses para pic16f767
Hola como están gente !

tengo una duda con respecto a los fuses de este pic
tengo varios microcontroladores como este que me encontré
y quiero programarlos, pero ala hora de empesar con el programa
me copie los fuses de un pic16f84a y los pege en el programa de pic16f767 pero me da
me da error el programa MPLAB

alguien se sabe los fuses para este pic
o como buscarlos si por medio de datasheet o otra parte
otra cosa estoy programando en assambler


gracias!!
08/07/2012 #471


fuses para el 16f767
lo mas facil es buscar el archivo "P16F767" y ver al final del documento los bits de configuracion. En windows por ejemplo esta dentro del directorio "..microchip\\mplabx\mpasmx" en caso de que estes usando MPLABX.
Archivos Adjuntos
Tipo de Archivo: txt P16F767.txt (19,6 KB (Kilobytes), 33 visitas)
09/07/2012 #472
Moderador

Avatar de D@rkbytes

lopezulises4 dijo: Ver Mensaje
hola a todos
tengo un problema y no se como resolverlo, es referente al pic12f508 donde tengo las instrucciones para encender dos led.
en la primera intruccion se enciendn las salidas 3 y 4 (uno y despues el otro) en la segunda intruccion es parecida solo que quiero que se repita por lo menos 5 veces antes de que regrese a la primera instruccion.
despues quiero que al mismo tiempo se encienda los 2 led pero no me lo respeta solo enciende uno a la vez (este codigo no lo inclui debido a que no me encienden asi).
ojala alguien pueda hecharme la mano
Saludos.
Haz algo como esto.
Código:
    clrf GPIO   ; Puerto en 0

flasher
;   Código...
;...............
;...............
    movlw 0x05        ; ¿Cuantas veces repetir?
    movwf contador  ; Cargar el contador en este caso con 5
    
repetir
;   Código...
;...............
;...............
; Aquí empiezas el bucle (loop)
    decfsz    contador,F    ; Decrementar contador
    goto    repetir    ; contador no llego a 0
;   Código...          ; contador llego a 0
;...............
;...............
    goto flasher
;***********************************************
; Y para encender dos o más LED puedes hacer esto.
    movlw    0x30
    movwf    GPIO    ; Pongo en 1 GPIO,5 y GPIO,4
    call    retardo
    clrf    GPIO    ; Los apago
    call    retardo
Suerte.
09/07/2012 #473


problema con el pic 16f877
hola amigos mi problema este programa alguien me ayuda por favor:

list p=16f877, f=inhx32
#include<p16f877.inc>
CBLOCK 0x20
ENDC
ORG 0x00
GOTO COMIENZO
ORG 0x05
COMIENZO BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
CLRF PORTB
SEGUIR BSF PORTB,0
CALL SEGUNDO
BCF PORTB,0
CALL SEGUNDO
GOTO SEGUIR
INCLUDE<RETAR_1s.INC>
END

LOS ERRORES DE ESTE PROGRAMA:
3 found directive in column 1. (CBLOCK)
4 " " " " " (ENDC)
11 register in operand not in bank 0. ensure that bank bits are correct.
16 symbol not previously defined (SEGUNDO)
18 " " " " "
20 Cannot open file (include file <RETAR_1S.INC> not found)

por favor necesito ayuda ayudenme GRACIAS.
09/07/2012 #474

Avatar de Daniel Meza

Vayamos por partes:

register in operand not in bank 0. ensure that bank bits are correct
Cada que utilices algún registro más allá del banco 0 debes de especificar sobre que rango de memoria está, por ejemplo:

movwf TRISA^0x80

El registro TRISA se encuentra en el banco 1, por eso se debe especificar que está más allá del banco 0 por medio de la sintáxis "^0x80"

symbol not previously defined (SEGUNDO)
Debes de declarar las variables a utilizar antes de usarlas.
Esto se logra por medio de:

Segundo EQU 0x20, donde en lugar de 0x20 puedes definir la posición de memoria que desees

Cannot open file (include file <RETAR_1S.INC> not found)
La librería Retar_1s.INC debe de estar en la carpeta de librerías del ensamblador

Saludos
09/07/2012 #475


gracias amigo sobre las libreria como hago eso si no se me podes dar un dato ? y si no tengo de donde lo saco recien soy nuevo en los pic.....gracias
09/07/2012 #476

Avatar de Daniel Meza

Tienes que conseguirla. Si no, los retardos los puedes generar tu mismo con subrutinas de retardo.
Si apenas empiezas con esto te recomiendo este libro para que vayas aclarando dudas
09/07/2012 #477


daniel te agregue a mi msn y face para asi me ayudes un poco por favor me aceptas....gracias
09/07/2012 #478

Avatar de Daniel Meza

bien. Como ayuda te dejo este enlace , allí se habla sobre el tema de los retardos para PIC's
12/07/2012 #479


Matrix de leds 8x8
Mis saludos cordiales.

La programación trata de una matriz de leds 8x8 utilizando el pic16f88

Tengo problemas que aún no las puedo resolver, quisiera pedir su ayuda, o alguna señal de cual podria ser la solucion..

A continuación pego el codigo que es en C. e indico los 5 errores que me aparecen al compilar en software MPLAB IDE v8.86


Código:
#include <16f88.h>      // Tipo de microcontrolador
#fuses INTRC_IO,MCLR    // Oscilador interno, MCLR activo
#fuses NOPUT,NOBROWNOUT // Sin Brownout reset ni Power up timer 
#use fast_io(B)       // La configuración de los puertos solo se hace al principio.
#use delay(clock=8M)    // Velocidad del oscilador interno 8 MHz

#define Load PIN_B0   // Load (STCP ambos integrados) B0
#define Clk PIN_B1   // Clock (SHCP ambos integrados) B1
#define dClm PIN_B2   // Data para las columnas (DS integrado 1) BC2
#define dLin PIN_B3   // Data para las lineas (DS integrado 2) B3


char  Memoria[96];      // 96 Bytes para la memoria (0 - 95)
char  Visor[8];         // 8 para el visor (8 columnas)

int1  flag;             // Flags de control
int1 flag2;
int   indx;             // Indice donde almacenará las nuevas columnas.
int   line;             // Linea que a mostrar.
int   time;             // Variables para el control de
int   ptime;            // la velocidad de desplazamiento.
int   t;                // Variable auxiliar.

void CargaMem(char Ascii);
void GuardaClm(char c);

#int_rtcc
void isr(){
   int Mul=128;         // Cada vez que ocurre la interrupcion
   if(++line>7)Line=0;  // selecciona la siguiente linea, si se pasa de 7 vuelve a 0.
   
   if(++ptime>5){      // Suma 1 a ptime. Si se pasa de 20
      ptime=0;          // lo pone en 0 y suma 1 a time.
      if(++time>200){   // Si se pasa de 200
         time=0;        // lo pone en 0
         Flag=true;     // y activa el flag.
      }
   }
   
   
   for(t=0;t<8;t++){    // Bucle 0 - 7 (Lineas)
      
    Aqui-> output_bit(dLin,!!(Visor[Line]&Mul)); //el error: Undefined identifier   PIN_B3

                                              
      if (Line==t)output_high(dClm);         // Si Line es igual a t
                                             // activa el bit correspondiente
      else  output_low(dClm);                // a la columna, sino lo desactiva.
      
    Aquí ->  output_low(Clk);  // el error: Undefined identifier   PIN_B1

    Aquí ->  output_high(Clk); // el error: Undefined identifier   PIN_B1
      
      Mul>>=1;          // Divide la mascara que compara con Visor[] (128,64,32...)
   }
   Aquí ->   output_low(Load);  //el error: Undefined identifier   PIN_B0
   Aquí ->   output_high(Load); // El error: Undefined identifier   PIN_B0

   
}
void main(){
   int k;   
   set_tris_a(0x00);
   set_tris_b(0x00);
   for (k=0;k<8;k++){
      Visor[k]=0;
   }
   for (k=0;k<96;k++){
      Memoria[k]=0;
   }                    // Limpia la memoria y el visor
   
   flag=true;           // Activo el flag para que cargue la memoria
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);  // Configuración del Timer0
   enable_interrupts(int_rtcc);              // Interrupcion por Timer0
   enable_interrupts(global);                // Interrupciones globales
   
   do{
      if (Flag){                 // Si el flag está activado
         flag2=true;             // Activa el flag2
         
         for (k=0;k<8;k++){      // Pasa el contenido de las primeras 8
            visor[k]=Memoria[k]; // columnas en memoria al visor
         }
         
         for (k=0;k<95;k++){        // Rota el contenido de toda la memoria
            Memoria[k]=Memoria[k+1];// a la izquierda 1=1+1, 2=2+1, n=n+1...
            
            if (Memoria[k]!=0){Flag2=false;} // Si hay alguna columna que no
                                             // esté vacía desactiva el flag2
         }         
         Memoria[95]=0;             // Limpia la ultima columna de la memoria
        
        if (Flag2){                 // Si flag2 está activo            
            indx=7;                 // a partir de la columna 7 
            CargaMem("PICROBOT");   // escribe PICROBOT            
         }
         Flag=false;                // Desactiva el flag
         
      }
   }while (true);    // Bucle infinito


}

void GuardaClm(char c){
   if (indx<94){
      Memoria[indx]=c;     // Guarda la columna en la ubicación actual de memoria
      indx++;              // y aumenta el indice
   }
}


void CargaMem(char ascii){    // Carga la memoria con el caracter deseado
   switch (ascii){    
      
      case('B'):
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b01001001);
      GuardaClm(0b01001001);
      GuardaClm(0b01111111);
      GuardaClm(0b00110110);      
      break;
      
      case('C'):
      GuardaClm(0b00111110);
      GuardaClm(0b01111111);
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);
      GuardaClm(0b01100011);
      GuardaClm(0b00100010);     
      break;

      case('I'):
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);      
      break;  

      case('O'):
      GuardaClm(0b00111110);
      GuardaClm(0b01111111);
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);
      GuardaClm(0b01111111);
      GuardaClm(0b00111110);      
      break;      
      
      case('P'):      
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b00001001);
      GuardaClm(0b00001001);
      GuardaClm(0b00001111);
      GuardaClm(0b00000110);      
      break;
      
      case('R'):
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b00001001);
      GuardaClm(0b00011001);
      GuardaClm(0b01111111);
      GuardaClm(0b01100110);
      break;
      
      case('T'):
      GuardaClm(0b00000011);
      GuardaClm(0b00000001);
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b00000001);
      GuardaClm(0b00000011);
      break;      
   }
      GuardaClm(0b00000000);
}
//Gracias
12/07/2012 #480
Moderador

Avatar de D@rkbytes

Luno dijo: Ver Mensaje
Mis saludos cordiales.

La programación trata de una matriz de leds 8x8 utilizando el pic16f88

Tengo problemas que aún no las puedo resolver, quisiera pedir su ayuda, o alguna señal de cual podria ser la solucion..
//Gracias
Saludos Luno.
Cargue tu código en MPLAB v8.83 y usando como compilador PCWHD Compiler v4.114
Y no se presento ningún tipo de error al compilar el código.

Memory usage: ROM=17% RAM=35% - 36%
0 Errors, 0 Warnings.


El problema puede estar con el compilador que estas utilizando,
que no reconoce esas instrucciones y por eso te produce errores.

Aquí adjunto el proyecto generado por MPLAB.

PD. Movi tu tema a este otro por tratarse de un programa hecho en MPLAB

Suerte.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.