/*--------------------------------------------------------------------------------------------------------------Gracias aun amigo argentino de aqui mismo q me lo envio y me fue muy ilustrativo se entiende mucho mejor q en assambler...ademas q esta muy bien comentado..por eso quiero migrar todo el codigo del proyecto a c y para el pic 18F q es el q poseo para montarlo y asi poderle hacer lso cambios q desee y verlo en tiempo real.
Ejemplo tutorial suky c18 - leds secuenciales
----------------------------------------------------------------------------------------------------------------
Para hacer el efecto de movimiento de leds se utilizan los operadores a niver de bits
Operadores a nivel de bit (bitwise operators)
-----------------------------------------------
Los operadores de desplazamiento a nivel de bit "<<" y ">>" Desplazan a la izquierda o a la derecha un número
especificado de bits.
En un desplazamiento a la izquierda los bits encendidos se corren hacia la izquieda dejando un cero en su lugar.
De manera análoga pasa con los desplazamientos a la derecha. Veamos un ejemplo:
c = 0x1C 00011100
c << 1 c = 0x38 00111000
c >> 2 c = 0x07 00000111
para más operadores ver archivo dentro de la carpeta teoría
--------------------------------------------------------------------------------------------------------------*/
/*Includes*/
#include "p18F4550.h"
#include <delays.h>
/* Bits de configuración*/
#pragma config PLLDIV = 5 // 20 MHz crystal on board
#pragma config FOSC = HS // using an external, high speed crystal, PLL module is disabled
#pragma config FCMEN = OFF // Fail-safe clock monitor disabled
#pragma config IESO = OFF // Internal/External Oscillator switchover disabled
#pragma config PWRT = OFF // Power-up Timer disabled
#pragma config BOR = OFF // Brown-out reset disabled
#pragma config BORV = 3 // Brown-out voltage at minimum setting
#pragma config VREGEN = ON // USB voltage regulator enabled
#pragma config WDT = OFF // Watchdog timer hardware disabled, software controlled
#pragma config WDTPS = 32768 // Watchdog timer postscale 1:32768 (max)
#pragma config MCLRE = OFF // MCLR pin disabled, RE3 input pin disabled
#pragma config LPT1OSC = OFF // Low power timer 1 oscillator bit low-- timer 1 configured for higher power operation
#pragma config PBADEN = OFF // PORTB <4:0> pins are configured as digitial I/O on reset
#pragma config CCP2MX = ON // CCP2 input/output is multiplexed with RC1 (vs RB3)
#pragma config STVREN = ON // Stack full/underflow will cause reset
#pragma config LVP = OFF // Single supply ICSP disabled
#pragma config XINST = OFF // Instruction set extension and indexed addressing mode disabled (legacy mode)
#pragma config DEBUG = OFF // Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
#pragma config CP0 = OFF // Code protection bits-- Block 0 (000800 - 001FFFh) not code-protected
#pragma config CP1 = OFF // (002000 - 003FFFh)
#pragma config CP2 = OFF // (004000 - 004FFFh)
#pragma config CPB = OFF // Boot block (000000 - 0007FFh) not code-protected
#pragma config CPD = OFF // Data EEPROM not code-protected
#pragma config WRT0 = OFF // Block 0 not write-protected
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRTB = OFF // Boot block not write-protected
#pragma config WRTC = OFF // Configuration register not write-protected
#pragma config WRTD = OFF // EEPROM not write-protected
#pragma config EBTR0 = OFF // Block 0 not protected from table reads executed in other blocks
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTRB = OFF
/*declaración de variables*/
unsigned char k; /* Variable utilizada para realizar efecto */
void main(void)
{
ADCON1=0x0F; /* Todos entradas/salidas digitales - equivalente en binario ADCON1= 0b00001111*/
TRISA=0xFF; /* Todos como entradas - equivalente en binario TRISA = 0b11111111*/
TRISB=0x00; /* Todos como salida - equivalente en binario TRISB = 0b00000000*/
LATB=0x00; /* Todos los leds apagados - equivalente en binario LATB = 0b00000000*/
while(1){ /* Bucle infinito */
if(PORTAbits.RA0==0)
{ /* Se testea estado del pulsador */
/* Si esta en 0 logico no hace nada*/
}
else
{
LATB=0x01; /* Encedemos primer Led para poder rotar 1 bit encendido-
equivalente en binario 0b00000001*/
for(k=1;k<=3;k++)
{ /* Rota 3 veces 0b00000010 0b00000100 0b00001000*/
Delay10KTCYx(125); /* Demora 250ms */
LATB=(PORTB<<1); /* desplaza Led encendido hacia la izquierda*/
}
for(k=1;k<=4;k++)
{ /* Rota 4 veces 0b00000100 0b00000010 0b00000001 0b00000000*/
Delay10KTCYx(125); /* Demora 250ms */
LATB=(PORTB>>1); /* desplaza Led encendido hacia la derecha*/
}
}
}
} // final de main
Ahora pensandolo mejor tal vez se podría armar un proyecto simple basado en los PIC18 para hacer un simple secuenciador LED que permita ser fácilmente programable, donde se observen las virtudes del compilador.Tu crees q eso seria mejor??? mira entra al sitio web del proyecto http://picprojects.org.uk/projects/ledchaserpwm/index.htm y mira el video. Veras q la secuencia de leds es muy como te diria algo compleja..pues no solo se secuencia los leds ademas se controla la intensidad de encendido del led. Algo q me interesa mucho.
CitarAhora pensandolo mejor tal vez se podría armar un proyecto simple basado en los PIC18 para hacer un simple secuenciador LED que permita ser fácilmente programable, donde se observen las virtudes del compilador.Tu crees q eso seria mejor??? mira entra al sitio web del proyecto http://picprojects.org.uk/projects/ledchaserpwm/index.htm y mira el video. Veras q la secuencia de leds es muy como te diria algo compleja..pues no solo se secuencia los leds ademas se controla la intensidad de encendido del led. Algo q me interesa mucho.
Realmente me interesa el c pq ya te dije q me es mas facil de entender q el assembler.
Yo tengo ya montado el mplab ide y el c18. Tengo ese sencillo ejemplo q te puse ahi. Entonces lo q hare sera adaptar el esquema q usa el 16f por un 18f es muy sencillo eso..es solo poner el pic18f donde va el 16f y usar el puerto b..con sus 8 leds.
No es q no tenga sentido migrar el codigo es q lo q busco con migrarlo es entenderlo mejor. Es mas facil entender en C q en assambler. De todas maneras si tu sabes mas de assembler q de C. Entonces ensename como pasar ese codigo de assembler disenado para el pic 16F a el pic 18F..pq yo no se ;-)
Hazte la idea q el hard ya lo tengo manana subo el diseno q es bien sencillo.
Yo te apoyo en el proyecto y buscare toda la info q sea necesaria al final sera un proyecto mas tuyo q mio, pero lo pondre en practica yo mismo. Cuento con los pics el programador y los componentes para armarlo..solo q no cuento con la programacion pues la q tengo es la del 16f q no me sirve.
Podrias mirar el codigo una ves mas montarlo en tu mplab entenderlo a fondo y explicarlo para nosotros. Despues de entenderlo a cabalidad creo q entre todos podremos hacer uno desde 0. Por nosotros mismos. Creo q esa es la mejor idea
no se dime q tu opinas??
alex out
Trataré de hacer el código sencillo cuestión de que sea fácil de migrar a otros C; este punto es importante ya que por allí y aquí uno encuentra código C que parecen hechos para que uno admire al que los realiza pero no para aprender jajaal fin encuentro a alguien con sentido comun y una humilda q lo rebasa...menos mal q piensas asi. Grande no es aquel q sabe hacer las cosas sino aquel q las hace y tiene el valor de enseñarlas. El q las ensenas es recordado para siempre. sobretodo poner comentarios para entender
You just need to modify the initialisation code to setup the device specific registers. Dedcide which I/O pins are used for the LEDs and mode switch. Make changes to the TRIS registers accordingly and to the definitions in the .asm file for the those changes.Loq entiendo y tiene logica es q se debe de modificar la parte inicial del codigo donde se especifica q registros del chips se van a usar...decidir los pines de I/O par alos leds(creo q el puerto B estara bien en este caso q es el mismo q se usa en el pic 16f) y el modo de disparo. Ya lo otro es mas tecnico, hacer los cambios para los registros TRIS(aun no tengo idea de q son debo leerme el datasheet del pic mejor). Segun el creador solo usa una salida en una subrutina..lo q lo hace mas facil.
The output code is nice and simple to deal with since it all goes through a single output subroutine so you only need to tweak that to get the output.
The part that you will really need to engage your brain on is the fact that the 16F688 only has I/O on ports RA0-5 and RC0-5 so you will need to figure out how to take the output variable and map it to across two I/O ports.
Hola no estoy perdio solo algo atareado con mi trabajo, pero en casa estoy haciendo el diseño.. estoy esperando por mi amigo maunix a q se desocupe y empiece a regalarnos codigo para estudiar y hacerle mejoras o cambios...
En espera de q el proyecto comience. Solo tenemos q buscarle un nombre q le pegue..Cual sugieres tu??
Luces fantasticas
LED Chaser
...
alex out
Si pudiese comentar poner un diagrama de bloques y como funciona ese proyecto seria muy util par alos ingnorantes como yo en cuestiones d eprogramacion a bajo nivel.
gracias por tu ayuda.
Podrias por ejemplo ir poniendo en este mismo post partes del codigo del proyecto con su explicacion en assembler y despues la migracion al c y su respectiva explicacion asi poco a poco saldria el codigo entero y los demas podrian ver como lo hicistes. Me explico mejor q se expliq q hace el codigo en assembler como se hace lo mismo en c y su explicacion..seria ideal q se publicara asi.
alex out
-- Las probabilidades de conseguir en este foro que hagan tu trabajo son nulas
-- Las probabilidades de conseguir ayuda son muy altas
-- Las probabilidades de que aprendas lo suficiente para hacerlo tú mismo son del 100%
Si quieres comenzar a programar en C te diria que comiences desde cero, viendo como se estructura, haciendo ejemplos sencillos, no directamente con un proyecto completo, y listo para armar y disfrutar, o porque no venderloVamos a ver suky no se q problemas tienes conmigo, puede q si, q parezca mucha exigencia pero maunix no lo ve asi..es mas el se brindo a enseñarnos. No lo estoy oblingado ni poniendo una pistola en su cabeza el quiere hacerlo y ya. Y en cuanto a aprender de 0 C...ya lo estoy haciendo solo q no de 0 pq yo ya di C.Solo q en mas de 10 años q no lo uso.
No me interesa dotar al proyecto de un super nombre, mas bien me interesa que sea útil para quienes quieran aprender a dar sus primeros pasos con el C18, los PIC18 y porque no los leds.PD:No hablaba de un super nombre sino de un nombre q diera la idea del proyecto y asi poderlo buscar entre los miles de temas y topics q hay aqui, estuve mirando y no vi ninguno parecido
y suky al parecer no quiere q los demas aprendan jajjaja
Esto te aseguro que no es cierto, el mejor tutorial de assembler que hay en el foro lo ha puesto el.Eso lo dije en broma amigo termine con una risa..se q suky es posiblemente el q mas aporte al foro..he leido unos cuantos tutos de el muy buenos....solo lo puse pq cada ves q pido algo el aparece para reganarme jajaja
CitarEsto te aseguro que no es cierto, el mejor tutorial de assembler que hay en el foro lo ha puesto el.Eso lo dije en broma amigo termine con una risa..se q suky es posiblemente el q mas aporte al foro..he leido unos cuantos tutos de el muy buenos....solo lo puse pq cada ves q pido algo el aparece para reganarme jajaja
bueno espero q todos uds q estan ocupado y saben mucho hagan un huequito par alos demas q tamb estamos ocupados pero no sabemos nada
alex out