Problema de RAM en PIC10F200

Hola compañeros. A ver si me podéis echar una mano.

Recientemente me he puesto de nuevo con los microcontroladores, de momento con programas super sencillos rollo "Hola mundo"
Para la programación estoy usando MPLAB, con el compilador de CCS y programación en C.

De momento, lo poco que había hecho siempre ha sido con un PIC16F84A, pero para comenzar con proyectos mega sencillos he hecho una prueba con un PIC10F200 y aquí es donde aparece mi problema.

El típico programa de encender un led parpadeando no ha habido problemas.
Pero ahora he hecho un programa que simula una vela electrónica, generando una especie de PWM mediante un numero aleatorio.
Lo curiosos es que el programa como podréis ver, es muy simple y solo consta de 2 variables de 16 bits (también lo he probado con 8 bits) una para el pulso alto y la otra para el tiempo de pulso bajo, y poca cosa más.
Pero cuando compilo me dice que no hay suficiente RAM para las variables (Not enought RAM for all variables).
Ya sé que el PIC usado es el más pequeño de todos, pero dudo mucho que no sea capaz de funcionar con un programa tan sencillo como este.
El mismo programa en un PIC16F84A funciona sin problemas.

Como he dicho soy muy novato por lo que seguramente el código se podrá mejorar.
¿Me podéis indicar el motivo de ese error?

Quedo a la espera de vuestra ayuda. Muchas gracias.

El código de mi programa es el siguiente:
PHP:
#include <10f200.h>
#include <stdlib.h>
#include <time.h>

#use delay(clock = 4000000)
#fuses NOWDT
#locate aux=0x001
#zero_ram

void main()
{
   set_tris_b (0b111111110);
   int16 high_pulse, low_pulse;
   srand(get_timer0());
   while(1)
   {      
      high_pulse = rand()%(1111)+425;
      low_pulse = 1536-high_pulse;
      for (high_pulse; high_pulse>0; high_pulse--)
      {
         output_high(PIN_B0);
      }         
      for (low_pulse; low_pulse>0; low_pulse--)
      {
         output_low(PIN_B0);      
      }         
   }
}
 
Última edición por un moderador:
El 10F200 tiene solo 16 Bytes de RAM, No tienes modo de que CCS te diga el uso que se hace de la misma?
 
El 10F200 tiene solo 16 Bytes de RAM, No tienes modo de que CCS te diga el uso que se hace de la misma?

Hola josemaX, creo que si, es más me suena que cuando lo he mirado me marcaba un uso del 48% por eso no me cuadra.
Soy consciente de que ese pic es muy simple. Pero si no es capaz de ejecutar un programa tan simple como este ya me dirás para que se puede usar este PIC.
Me quieres decir que a parte de encender un led no sirve para nada más??? Creo que hay algo que estoy haciendo mal pero no se el que y como solucionarlo
 

D@rkbytes

Moderador
El problema es con las rutinas srand y rand de la librería stdlib.
Usan variables de 16 y 32 bits y ese PIC tiene una RAM muy pequeña.
Apenas 256 x 12 y 16 x 8 , contra los 8K x 14 y 64 x 8 del PIC16F84/A
 
Última edición:
El problema es con las rutinas srand y rand de la librería stdlib.
Usan variables de 16 y 32 bits y ese PIC tiene una RAM muy pequeña.
Apenas 256 x 12 y 16 x 8 , contra los 8K x 14 y 64 x 8 del PIC16F84/A

Hola D@rkbytes, pude ser una locura pero se podría modificar la libreria stdlib.h y cambiar las variables que uso para el rand y el srand a 8 bits? Realmente de toda la libraria solo uso esa función



Confirmado he abierto la librería stdlib.h y he buscado las variables de los srand y rand y eran de 16 y 32 bits, por lo que las he modificado todas para que sean de 8 bits y ahora el programa ya funciona en el pic 10F200 (no muy bien ya que al manejar solo variables de 8 bits) la simulacion de llama no es muy buena. Pero funciona

Gracias a todos
 
Última edición:
Arriba