TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: LadyMandarine en 26 de Abril de 2007, 04:47:52
-
Hola me gustaría saber si alguien me puede proporcionar código para hacer lo siguiente:
Tengo un pic16F84A pintado en Proteus con 5 interruptores en el puerto b y 4 leds y un speaker en el puerto a. Por el momento quisiera saber como puedo hacer en c para q cada vez q yo pulso un interruptor, se ilumine un led en ocncreto y suene un sonido por le speaker. Si pulso otro interruptor se ilumine otro led y suene otro sonido, etc...
Muchísimas gracias de antemano. Esto me ayudaría mucho a entender el proceso y poder avanzar con mi proyecto porque llevo mucho tiempo estancada y no emcuentro a nadie que me pueda ayudar. :(
-
si tu programa solo consta de los leds, pulsadores y speaker deberias leer continuamente el valor de los pulsadores, si ademas hace otras cosas emplea las interrupciones para no perder ninguna pulsacion en caso de un largo programa.
despues de detectar que han apretado determinado pulsador enciende el LED correspondiente mediante la activacion de la linea a la que lo conectes (seguramente necesitaras usar un driver para dar la corriente que pida el LED) y para generar el sonido solo tienes que hacer que el speaker suene con una frecuencia determinada (por ejemplo para hacer un LA 440Hz: encender- esperar 2.27ms- apagar - esperar 2.27ms )
espero que te sirva para algo
un saludo
-
Muchísimas gracias, me ha servido para entender la idea pero soy muy nueva en esto y no se empezar, necesitaría que alguien me ayudase con el código porq la verdad es q no tengo tiempo para aprender mas despacio, si supiera hacer el código para encender un led y hacer un sonido a la vez al pulsar un interruptor creo q sería capaz de entender y pensar por mi misma el resto de lo que tengo q hacer. Gracias mil.Ojalá alguien sepa hacerlo y me pueda ayudar. :(
-
Podes usar la sentencia switch, de una forma como la que expongo
leeropcionelegida();
switch (opcionelegida):
1 : // Ejecutar rutina Opcion 1
break;
2 : // Ejecutar rutina opcion 2
break
default : break;
-
yo es que lo de programar en C no lo conozco. estoy usando ensamblador y se que para hacer esas cosas es facilillo.
seguro que algun programador de C te puede ayudar.
un saludo y suerte
-
Ola, yo tuve hace poco esa misma duda y relacionado a todo eso yaq tambien soy nuevo en esto. Pero bien he avanzado y pude lograr justo eso q quieres, solo q todo esta echo para el PIC 18F452, quiza puedas modificarlo x)
/*
Proyecto 1
Descripcion: Prender un led y hacer sonar el buzzer cuando se aprieta el swich B0.
Por: Jeremy LF.
*/
#include <18f452.h> //El pic a usar.
#fuses XT,NOWDT,NOPROTECT,PUT //Configuracion de los fusibles del integrado.
#use delay(clock=4000000) //Megahers del cristal a usar.
#use fast_io(b) //Entrada y Salida (io) Rapidas (fast) para el puerto B.
#int_rtcc
void handle_rtcc_int()
{
//Output_toggle: Cambiar al estado contrario al q esta (1 o 0).
Output_Toggle(PIN_C2);
Set_timer0(1000);
}
//PROGRAMA/////////////////////////////////////////////////////////////////////
void main(void)
{
unsigned int i; //Creo la variable i sin signo, esto es un numero mayor de 0. (Creo)
unsigned int numero_leds=4;//Creo la variable numero_leds sin signo, esto es un numero mayor de 0. (Creo) (sin uso)
set_tris_b(0b0000001); //Defino q pines del Puerto B seran entradas o salidas.
disable_interrupts(GLOBAL); //Habilito todas las interrupciones globales.
output_b(0); //Poner 0 voltaje a todos los pines del puerto B.
while(1)
{
//Logica negada ¬¬'
//CUANDO ESTA PRESIONADO
if (input(PIN_B0)==0) //Pregunto si el pin 0 del puerto B es igual a 0, que por logica negada quiere decir q si esta presionado.
{
set_tris_b(0); //Todos los pines del puerto B seran salidas.
output_high(PIN_B0); //Prendo el pin 0 del puerto B.
setup_timer_0(RTCC_DIV_16 | RTCC_8_BIT); //
enable_interrupts(int_rtcc); //Habilito las interrupciones...
enable_interrupts(global); //Habilito todas las interrupciones globales.
}
//CUANDO NO ESTA PRESIONADO
else //Sino......
{
set_tris_b(1); //todos los pines del puerto B seran entradas.
disable_interrupts(int_rtcc); //Deshabilito las interrupciones...
disable_interrupts(global); //Deshabilito todas las interrupciones globales.
}
}
}
Lo habia explicado para mi, espero te ayude :D
salu2 8) 8)
-
En la sección de ejmeplitos hay un montón de programas con leds para empezar. Creo que muchos de nosotros hemos empezado por ahí y nos ha ido ha bastante bien...
-
Hola a todos,
Os agradezco vuestro interés, el problema es el siguiente, yo si que se C, lo que no se es de PICS, es decir:
Se q la idea es hacer el switch, y tras leer q botón has pulsado, iluminar un led u otro y hacer sonar una nota u otra, pero lo q no se es iluminar el led y hacer sonar la nota, no se cual es el código que tiene q ir dentro de leeropcionelegida(), y dentro de case1: etc... .Tb me vendría bien el código en asm, al menos tendría algo por donde empezar a entender. Muchas gracias a todos ojalá me podáis ayudar porque mi situación es bastante desesperada, tengo q hacerlo como sea y no tengo conocimientos suficientes sobre el tema como para poder afrontarlo. Por eso estoy triste. Gracias de nuevo
PD Envío adjunto captura de Proteus para q veáis el diseño q he hecho
-
Hola Lady, por aca tienes un desarrollo (en .asm e ingles), pero te servira para tu desarrollo...
http://www.piclist.com/techref/piclist/simon/index.htm (http://www.piclist.com/techref/piclist/simon/index.htm)
aqui otro programa en C
/*
8-6-06
Copyright Spark Fun Electronics© 2006
Nathan Seidle
nathan at sparkfun.com
Example Simon game for PIC 16F688
Generates random sequence, plays music, and displays button lights.
Simon tones from Wikapedia
* A (red, upper left) - 440Hz - 2.272ms - 1.136ms pulse
* a (green, upper right, an octave higher than the upper right) - 880Hz - 1.136ms - 0.568ms pulse
* D (blue, lower left, a perfect fourth higher than the upper left) - 587.33Hz - 1.702ms - 0.851ms pulse
* G (yellow, lower right, a perfect fourth higher than the lower left) - 784Hz - 1.276ms - 0.638ms pulse
The tones are close, but probably off a bit. The internal oscillator would very +/-5% between PICs
making the tones change even if they were calculated correctly.
Timer1 rolls over at 65535 and is reset to 64535 (TMR1IF) so 1000 possible timer values numbers
64535 + 250 <= 64785 will be button 1
64785 + 250 <= 65035 button 2
65035 + 250 <= 65285 button 3
65285 + 250 <= 65535 button 4
So each button has an equal chance of being added to the game sequence
Each timer1 click is every 500ns (8MHz / 4) so the button possibility
changes every 125us or 8000 times a second
Not random, but no one can play the same way to within 125us!
The sequence changes *every* game
*/
#include "C:\Global\Code\c\16F688.h" // device dependent interrupt definitions
#include "C:\Global\Code\c\int16CXX.H"
#pragma config|= 0x31C4 //Internal 8MHz Oscilator, PWRT
//Hardware port definitions
//=================================================
#define BUZZ0 PORTC.4
#define BUZZ1 PORTC.5
#define STATUS_LED PORTB.4
#define LED_RED PORTC.2
#define LED_GREEN PORTC.3
#define LED_BLUE PORTC.0
#define LED_YELLOW PORTC.1
#define B1 PORTA.0
#define B2 PORTA.1
#define B3 PORTA.2
#define B4 PORTA.3
#define LED_ON 1
#define LED_OFF 0
//=================================================
//Global variable declarations
//=================================================
uns8 data_byte_in;
uns8 game_string[32];
uns8 game_string_position;
//=================================================
//Interrupt Vectors
//=================================================
#pragma origin 4
interrupt serverX( void)
{
int_save_registers
//char sv_FSR = FSR; // save FSR if required
if(TMR1IF)
{
//Reset timer with 65535 - 1000 = 64535 = 0xFC17
TMR1H = 0xFC;
TMR1L = 0x17;
TMR1IF = 0;
}
//FSR = sv_FSR; // restore FSR if saved
int_restore_registers
}
//=================================================
//Function declarations
//=================================================
void boot_up(void);
void delay_ms(uns16);
void delay_us(uns16 x);
void toner(uns8, uns8);
void add_to_string(void);
void play_string(void);
void play_loser(void);
void play_winner(void);
void putc(uns8 nate);
uns8 getc(void);
uns8 bin2Hex(char x);
void printf(const char *nate, int16 my_byte);
//=================================================
void main(void)
{
uns8 choice;
uns8 new_button;
uns8 current_pos;
uns16 time_limit;
uns8 old_choice;
boot_up(); //Initialize PIC ports
uns8 x;
BEGIN_GAME:
//delay_ms(3000);
//Display fancy LED pattern waiting for two buttons to be pressed
//Wait for user to begin game
while(1)
{
LED_RED = 1;
LED_BLUE = 0;
LED_GREEN = 0;
LED_YELLOW = 0;
delay_ms(100);
if(B1 == 0 || B2 == 0 || B3 == 0 || B4 == 0) break;
LED_RED = 0;
LED_BLUE = 1;
LED_GREEN = 0;
LED_YELLOW = 0;
delay_ms(100);
if(B1 == 0 || B2 == 0 || B3 == 0 || B4 == 0) break;
LED_RED = 0;
LED_BLUE = 0;
LED_GREEN = 1;
LED_YELLOW = 0;
delay_ms(100);
if(B1 == 0 || B2 == 0 || B3 == 0 || B4 == 0) break;
LED_RED = 0;
LED_BLUE = 0;
LED_GREEN = 0;
LED_YELLOW = 1;
delay_ms(100);
if(B1 == 0 || B2 == 0 || B3 == 0 || B4 == 0) break;
}
//play_winner();
//Indicate the start of game play
LED_RED = 1;
LED_BLUE = 1;
LED_GREEN = 1;
LED_YELLOW = 1;
delay_ms(1000);
LED_RED = 0;
LED_BLUE = 0;
LED_GREEN = 0;
LED_YELLOW = 0;
game_string_position = 0; //Start new game
while(1)
{
add_to_string(); //Add the first button to the string
play_string(); //Play the current contents of the game string back for the player
//Wait for user to input buttons until they mess up, reach the end of the current string, or time out
for(current_pos = 0 ; current_pos < game_string_position ; current_pos++)
{
//Button scanning
//=======================================
time_limit = 0; //Run timer while we wait for the user to push a button
while(1)
{
if(B1 == 0 || B2 == 0 || B3 == 0 || B4 ==0) break;
delay_ms(1);
time_limit++; //3 second time limit
if (time_limit > 3000)
{
play_loser(); //Play anoying loser tones
goto BEGIN_GAME;
}
}
//Wait for user to release button
choice = 0;
while(choice == 0)
{
if(B1 == 0) choice = '3'; //Lower left button
if(B2 == 0) choice = '4'; //Lower right
if(B3 == 0) choice = '1'; //Upper left
if(B4 == 0) choice = '2'; //Upper right
toner(choice, 50); //Fire the button and play the button tone
}
//=======================================
if (choice != game_string[current_pos])
{
play_loser(); //Play anoying loser tones
goto BEGIN_GAME;
}
}//End user input loop
//If user reaches the game length of X, they win!
if (current_pos == 13)
{
play_winner(); //Play winner tones
goto BEGIN_GAME;
}
//Otherwise, we need to wait just a hair before we play back the last string
delay_ms(1000);
}
}//End Main
//Plays the loser sounds
void play_loser(void)
{
//printf("You failed!\n", 0);
LED_RED = 1;
LED_GREEN = 1;
toner('0', 500);
LED_BLUE = 1;
LED_YELLOW = 1;
toner('0', 500);
LED_RED = 1;
LED_GREEN = 1;
toner('0', 500);
}
//Plays the winner sounds
void play_winner(void)
{
uns8 x, y, z;
//printf("You win!\n", 0);
LED_RED = 1;
LED_YELLOW = 1;
LED_BLUE = 0;
LED_GREEN = 0;
for(z = 0 ; z < 4 ; z++)
{
LED_RED ^= 1;
LED_YELLOW ^= 1;
LED_BLUE ^= 1;
LED_GREEN ^= 1;
for(x = 250 ; x > 70 ; x--)
{
for(y = 0 ; y < 3 ; y++)
{
//Toggle the buzzer at various speeds
BUZZ1 = 1;
BUZZ0 = 0;
delay_us(x);
BUZZ1 = 0;
BUZZ0 = 1;
delay_us(x);
}
}
}
}
//Plays the current contents of the game string
void play_string(void)
{
uns8 string_pos;
uns8 button;
for(string_pos = 0 ; string_pos < game_string_position ; string_pos++)
{
button = game_string[string_pos];
toner(button, 100);
delay_ms(150);
}
}
//Adds a new random button to the game sequence based on the current timer elapsed
void add_to_string(void)
{
uns16 random_timer;
uns8 new_button;
random_timer.high8 = TMR1H;
random_timer.low8 = TMR1L;
//Timer rolls over at 65535 and is reset to 64535 (TMR1IF) so 1000 possible numbers
//64535 + 250 = 64785 will be button 1
//64785 + 250 = 65035 button 2
//65035 + 250 = 65285 button 3
//65285 + 250 = 65535 button 4
//So each button has an equal chance of being added to the game sequence
//Each timer1 click is every 500ns (8MHz / 4) so the button possibility
//changes every 125us or 8000 times a second
//Not random, but no one can play the same way to within 125us!
//The sequence changes *every* game
//64535 to 64785
if(random_timer < 64785)
new_button = '1';
else if(random_timer < 65035)
new_button = '2';
else if(random_timer < 65285)
new_button = '3';
else
new_button = '4';
game_string[game_string_position] = new_button;
game_string_position++;
}
//Tone generator
void toner(uns8 tone, uns8 buzz_length)
{
uns16 buzz_delay;
uns16 loop_length;
switch (tone)
{
case 'z' :
case '0' :
//button = ; //Failure Light up all LEDS
buzz_delay = 300; //1500;
loop_length = 132;//33;
break;
case 'A' :
case '1' :
buzz_delay = 227;//1136; //Upper left, Red
loop_length = 176;//44;
LED_RED = LED_ON;
break;
case 'a' :
case '2' :
buzz_delay = 113;//568; //Upper right, Green
loop_length = 352;//88;
LED_GREEN = LED_ON;
break;
case 'D' :
case '3' :
buzz_delay = 170;//851; //Lower left, Blue
loop_length = 236;//59;
LED_BLUE = LED_ON;
break;
case 'G' :
case '4' :
buzz_delay = 127;//638; //Lower right, Yellow
loop_length = 312;//78;
LED_YELLOW = LED_ON;
break;
//Special noises without LEDs
case '5' :
buzz_delay = 150;//300; //Special noise
loop_length = 300;//167;
break;
case '6' :
buzz_delay = 160;//300; //Special noise
loop_length = 300;//167;
break;
}
//Run buzzer for ~250ms?
for( ; buzz_length > 0 ; buzz_length--)
{
for( ; loop_length > 0 ; loop_length--)
{
//Toggle the buzzer at various speeds
BUZZ1 = 1;
BUZZ0 = 0;
delay_us(buzz_delay);
BUZZ1 = 0;
BUZZ0 = 1;
delay_us(buzz_delay);
}
}
//Turn off all LEDs
LED_RED = LED_OFF;
LED_BLUE = LED_OFF;
LED_YELLOW = LED_OFF;
LED_GREEN = LED_OFF;
}
//Initializes the various ports and interrupts
void boot_up(void)
{
OSCCON = 0b.0111.0000; //Setup internal oscillator for 8MHz
while(OSCCON.2 == 0); //Wait for frequency to stabilize
//Setup Ports
ANSEL = 0b.0000.0000; //Disable ADC on all pins
CMCON0 = 0b.0000.0111; //Turn off comparator on RA port
//Setup Ports
PORTA = 0b.0000.0000;
TRISA = 0b.0000.1111; //0 = Output, 1 = Input (Buttons)
PORTC = 0b.0000.0000;
TRISC = 0b.0000.0000; //0 = Output, 1 = Input (RC7 = UART RX)
//Sets up the UART for serial comm
//=============================================================
//SPBRG = 129; //20MHz for 9600 inital communication baud rate
//SPBRG = 25; //4MHz for 9600 inital communication baud rate - Not yet tested
//TXSTA = 0b.0010.0100; //8-bit asych mode, high speed uart enabled
//RCSTA = 0b.1001.0000; //Serial port enable, 8-bit asych continous receive mode
//=============================================================
//Setup interrupts
//=============================================================
//TMR1IF = 0;
T1CON = 0b.0000.1101; //Enable Timer1 with internal osc
//TMR1H = 0x80; //Preload Timer1 for 1s
TMR1IE = 1;
PEIE = 1;
GIE = 1;
//=============================================================
}
//Really short delay
void delay_us(uns16 x)
{
//Calling with 1us returns 11us
//Calling with 10us returns 56us
//for ( ; x > 0 ; x--);
//Calling with 1us returns 7.5us
//Calling with 10us returns 48
//Calling with 1000us returns 4.5ms
while(--x);
}
//General short delay
void delay_ms(uns16 x)
{
//Clocks out at 1006us per 1ms
uns8 y, z;
for ( ; x > 0 ; x--)
for ( y = 0 ; y < 4 ; y++)
for ( z = 0 ; z < 69 ; z++);
}
:-/ :mrgreen:
espero te sea de ayuda
Norberto
-
Hola Norberto,
Estoy sumamente agradecida, de veras. Nunca se me va a olvidar esto, aqui tienes una amiga para siempre. Ojalá yo pudiera hacer algo por ti. Tengo muchas dudas porque como dije no tengo ni idea de PICS por eso pedi ayuda y me gustaría aprender, por ejemplo supongo q tendré q adaptar los puertos a mi dibujo y a mi pic16f84a y no se si voy a saber. Es posible que pregunte algo muy trivial, espero que en ese caso me perdones. ¿Por qué tu código tiene puertoA, puertoB y puertoC?. Otra pregunta, veo que añades las librerias: int16 q supongo q será para las interrupciones y la 16f688 q será la del pic q tu utilizas. He buscado ese pic y veo q efectivamente tiene puerto A y puerto C, pero no tiene puerto b no? y entonces esto no lo entiendo: #define STATUS_LED PORTB.4. Me gustaría tanto aprender!!!. Espero no aburriros con mis rollos.
Mil gracias. A ver si consigo mi gesta.
-
Amiga LadyMandarine si de verdad quieres aprender realiza paso a paso los ejemplos de este post: http://www.todopic.com.ar/foros/index.php?topic=4530.0
En ellos se va desde encender un simple LED, hasta comunicaciones serie transmitiendo datos obtenidos por el A/D, pasando por el uso de LCD's, display's 7-segs y un largo etc...
Para lo que pretendes hacer tendrías suficiente con leer los 4 primeros ejemplitos. Ahí verás que con un simple output_high(PIN_B1); puedes encender un led conectado al pin B1 y así con el resto de leds... te lo dice uno que hace varios meses sólo sabía C y ahora hace alguna que otra cosa interesantilla con PIC's.
Un saludo!!
-
Hola a todos,
Muchas gracias DarkVect por las indicaciones, en cuanto acabe con esto y lo entregue (si lo consigo) me voy a poner desde cero para el examen, que todavía me quedan 4 meses, pero la práctica debo entregarla pronto y no me da tiempo. No me deja acceder a: http://www.piclist.com/techref/piclist/simon/index.htm, alguien tiene ese código?.
Respecto a la adptación del código q me ha proporcionado Norberto, sigo en ello. No acabo de estar segura si basta con cambiar los puertos o hay funciones diferentes para ambos PICS. Muchs gracias a todos de nuevo, me estais siendo de mucha ayuda.
-
Hola, sinceramente creo que acabarás mucho antes leyendo los 4 primeros ejemplos del post que dije y copiando y pegando el código que ahí encuentres (además usa los mismos puertos que tu PIC) que adaptando el código que te han pasado.
De verdad que es mucho más fácil. Fíjate en el primer ejemplo como se declara el PIC a utilizar, la frecuencia del reloj, los puertos y listo para encender leds, así de simple. Luego sólo tienes que leer los botones y seguir encendiendo y apagando leds.
Básicamente sería:
if (input(PIN_B0)==0) //mirar si se pulsa el botón
{
output_high(PIN_B1); //encender led
delay_ms(500); //durante medio segundo como mínimo para verlo bien
}
else
{
output_low(PIN_B1); //al dejar de pulsar se apaga
}
Para el resto de leds igual. Sólo falta que inicialices el PIC y los puertos y eso lo tienes muy bien explicado en los ejemplos.
Un saludo!!
-
hola lady. Como yo también recibo mucha ayuda de este foro, voy a intentar echarte una manita.
te he hecho un programita rapido para que enciendas el primer led, y hagas sonar el parlante. Para lo demás solo tienes que cambiar el nombre de entradas y saludas y la frecuencia del parlante.
No he probado el programa, porque ya es tarde y apetece poko, pruebalo así primero a ver si te rula bien y luego lo implementas. En caso de que no este bien hecho, no te preocupes que aqui hay gente de sobra con muy buenos conocimientos para corregirme.
Si te da problemas, nos ponemos manos a la obra y lo dejamos ok.
#include <16f84a.h> //pic a utilizar
#fuses XT,NOWDT,noPROTECT,NOPUT //ordenes para el programador
#use delay (clock=4000000) // si tu oscilador es distinto, pues cambias el valor
#use fast_io(b)
void main(void){
int i=0,j=0;
set_tris_b(0b00011111); aqui creo tur entradas (rbo - rb4)
for(;;){
if(input(pin_b4)){ // al pulsar rb4
output_high(pin_a0);// enciendes el led de ra0
do{
output_high(pin_a4); // mandas un tren de pulsos al parlante
delay_us(2250);
output_low(pin_a4);
delay_us(2250);
i++;
if(i>220){
i=0;
j++;
}
}while(j<4); /a los 4 segundos aprox. se para el parlante
i=0;
j=0;
output_low(pin_b4); // se apaga el led
}
}}
Un saludo
-
Hola otra vez, sigo con lo mío. Con vuestra ayuda he hecho un pequeño ejemplo:
#include <pic.h>
#include <pic1684.h>
#define pin_a3 PORTA.3;
#define pin_b4 PORTB.4;
#define pin_b0 PORTB.0;
#define ON 1;
#define OFF 0;
void delay_us(uns16);
void main(void){
int i=0,j=0;
pin_a3=0;
pin_b4=0;
pin_b0=0;
while(1){
if(pin_a3 == 1)
{
pin_b4=ON;
do{
pin_b0=ON;
delay_us(2250);
pin_b0=OFF;
delay_us(2250);
i++;
if(i>220)
{
i=0;
j++;
}
}while(j<4);
i=0;
j=0;
pin_b4=OFF;
}
}
}
void delay_us(uns16 x)
{
while(--x);
}
y lo he puesto en el proteus en el diseño que envié en otra ocasión y al compilar con picc, me da un montón de fallos que no sé resolver:
básicamente function body expected y expression syntax. Porqué esta mal?. Alguien lo sabe??. Gracias por adelantado. Voy a suspender. No avanzo nada snif!! :(
-
Porque no pruebas primero con el programa que te mande?
Este no te debe dar error al compilar.
Coge un manual de picc y una vez que entiendas estas funciones verás que el programa que propones no es dificil.
Es más, este programa hace lo que tu quieres, pero solo para un led, una vez lo entiendas no te costará implementarlo para los demás.
(Espero que funcione)
#include <16f84a.h> //pic a utilizar
#fuses XT,NOWDT,noPROTECT,NOPUT //ordenes para el programador
#use delay (clock=4000000) // si tu oscilador es distinto, pues cambias el valor
#use fast_io(b)
void main(void){
int i=0,j=0;
set_tris_b(0b00011111); //aqui creo tur entradas (rbo - rb4)
for( ; ; ){
if(input(pin_b4)){ // al pulsar rb4
output_high(pin_a0);// enciendes el led de ra0
do{
output_high(pin_a4); // mandas un tren de pulsos al parlante
delay_us(2250);
output_low(pin_a4);
delay_us(2250);
i++;
if(i>220){
i=0;
j++;
}
}while(j<4); //a los 4 segundos aprox. se para el parlante
i=0;
j=0;
output_low(pin_b4); // se apaga el led
}
}}
-
Hola
Primero probé con tu programa paco1980, pero no me funciona. No me reconoce pin_a4 etc....Tampoco las funciones output_high ni delay ni output_low, ni input.
Estoy usando el compilador picc de hi-tech. Estas funciones q tu utilizas estan definidas en la libreria 16f84a???. ¿Sabes al menos donde puedo obtener mas informacion sobre las librerias? Gracias
-
Es que yo utilizo el CCS.
Puedes probarlo, ya que te lo puedes descargar gratuito.
Un saludo.
-
Las funciones que te han dado son para CCS. Un programa como el de Paco debería funcionar. Fíjate en como configura el TRIS para declarar los pines de entrada y de salida. Luego ya sólo es ir activando o desactivando salidas según leas los pines de entrada.
Bájate CCS y pruébalo, es muy sencillo y hay multitud de ejemplos.
-
Hola chicos, ojalá pudiera hacerlo con CCS, porque ya veo que es un trillón de veces más fácil. Pero el tema es que no puedo elegir. Hay que hacerlo con Proteus y el compilador picc de hi-tech. Y claro por lo que vo cambia bastante, y no encuentro nada. Alguien utiliza este compilador??. Que diferencias hay?. Cómo se utiliza?. :( .Sniff!! No se como se accede a las entradas siquiera...
-
Vamos por partes.
Hi-Tech no lo he utilizado nunca, pero siendo un compilador de C la base será la misma que la de CCS. Coge el Manual del Compilador y busca cómo activar una salida, no es tan complicado.
Una vez sepas eso y cómo se configura el TRIS en ese compilador prueba a encender un simple led. Si logras eso ya tienes el problema solucionado porque el resto sólo es programar en C las condiciones necesarias para que se enciendan y apaguen el resto de leds según los botones.
Pero te recomiendo ir paso a paso. Somos muchos los que primero hemos encendido un led con un simple programa de 5 líneas antes de hacer cosas más complicadas.