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

Temas similares

26/08/2012 #21

Avatar de cosmefulanito04

ilcapo dijo: Ver Mensaje
..no sabes en que carpeta del KEIL estan las librerias ? no encuentro ni siquiera el archivo LPC214x.h y seguro que si esta porque los programas compilan bien ,,
Cuando creas un nuevo proyecto tenés que indicar con que familia trabajas una vez que haces eso, ya incluís esas librerías.

...tampoco encuentro otras librerias ( si es que tiene) como para manejar teclados, LCD etc ...
Mira, yo en ese sentido trato de evitar esas "funciones" de terceros que manejan un cierto periférico, ya que perdés el control de lo que haces con el uC, salvo que me digas que revisaste el código y entendiste bien que hace la función.

Si bien C está bueno para aislarte un poco del hard (a comparación de assembler), tampoco está bueno abusar y querer tener funciones que configuran un puerto serie, un ADC, etc sin saber que hacen realmente. Creo que lo mejor es meterse con la hoja de datos en mano y ver que registros tenés que manejar para hacer funcionar cierto periférico y de esa forma estar 100% seguro de que tocas y que no en una función y como podrías optimizarlo.

Por darte un ejemplo, en la familia AVR, usando el AVR studio (el keil de los AVR), la función "delay" que tienen esas librerías está pensada de forma tal que pueda distinguir en que configuración se encuentra tu uC (es decir a que clock trabaja) y esto implica un código gigante para todas las posibles configuraciones, lo cual resulta pesado y totalmente inútil si uno sabe en que configuración estás.

Yo que sé, ese tipo de funciones "delay" prefiero hacerlas con un timer o a lo sumo con algún código en cual sepa más o menos cuanto demora (el típico FOR, pero aplicado en assembler).

En otras palabras, si bien en C te alejas un poco del hard haciendo la programación mucho más sencilla, el costo a pagar es no tener todo el control sobre el uC como si lo tendrías en assembler, por eso creo que no está bueno entregar ese control que si podés tener en C usando funciones de terceros sin revisarlas antes.
29/08/2012 #22

Avatar de ilcapo

bueno buscando un poco por internet encontre algunas funciones predefinidas como ser para el seno, coseno etc ( osea matematicas) pero nada de las otras ( delay, input_pin, etc ) , sera que hay que hacerlas como decis vos o alejandro lerner "todo a pulmon" ja XD!
29/08/2012 #23

Avatar de ByAxel

Hola ilcapo:
Como dices, el Keil no tiene funciones predefinidas por lo tanto es un poco más complicado (toma tiempo) desarrollar una aplicación (full ANSI C o en C++).

Otra cosa ya que estás con el ARM te sugiero que busques librerias en la misma página del frabicante o en la página de ARM (www.arm.com), digo esto porque cuando me inicié con los STM32 tenia ese mismo problema al estar mal acostumbrado con el CCS jeje, y poco a poco encontre buenas cosas, asi que para los LPC debe haber similares.

Saludos
31/08/2012 #24


Funciones If / Else
Hola y muy buenos dias a esta comunidad.

Mi problema es el siguiente:
Como describo en el código de A a B no me cumple con esas funciones. Sin embargo, de B a C si cumple con esas funciones.
Como es obvio mi problema es de A a B y busco una solución.

PD: eh probado borrando los "else" de B a C y si funcionan todas las funciones, pero me causan rebotes constantes en las salidad de B a C, lo cual es una falla.

Finalmente, las entradas de A a C son pulsadores que activan las salida, si solo si, se encuentran a 5V, sino las desactivan.


Gracias por su atención

Código:
#include <16f877a.h>
#fuses NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP 
#use delay(clock=4000000)

void main()
{
int i = 0;
setup_adc_ports(NO_ANALOGS);
set_tris_a(0xFF); 
set_tris_c(0x00); 
set_tris_d(0x00);
set_tris_e(0xFF); 
disable_interrupts(GLOBAL); 

output_low(PIN_C1); 
setup_ccp1(CCP_PWM);

setup_timer_2(T2_DIV_BY_16, 255, 1);

output_low(PIN_C2);
output_low(PIN_C3);
output_low(PIN_C4);
output_low(PIN_C5);
output_low(PIN_C6);

output_d(0x00);

while(1)
{


if (input(PIN_A0)&&(i<255))
i++;
{set_pwm1_duty(i);
delay_ms(8);}

if (input(PIN_A1)&&(i>0))
i--;
{set_pwm1_duty(i);
delay_ms(5);} 

////////////////////////////////////--- A ----//////////////////////////////

if (input(PIN_A4))  { 
output_high(PIN_C3);
output_high(PIN_C5);
}       
else{
output_low(PIN_C3);
output_low(PIN_C5);
}


if (input(PIN_A5))   {
output_high(PIN_C4);
output_high(PIN_C6); 
}   
else{
output_low(PIN_C4);
output_low(PIN_C6);
}


////////////////////////////////////--- B ----//////////////////////////////



if (input(PIN_E0))   {
output_high(PIN_C3);
output_high(PIN_C6); 
 } 
else{
output_low(PIN_C3);
output_low(PIN_C6);
}


if (input(PIN_E1))   {
output_high(PIN_C4);
output_high(PIN_C5); 
 } 

else{
output_low(PIN_C4);
output_low(PIN_C5);
}

////////////////////////////////////--- C ----//////////////////////////////


}//End While
}//End Void main
Respuesta
¿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.