bueno aquí está parte del trabajo que realicé en el año. Se esperan comentarios.
http://www.itsteziutlan.edu.mx/index.php?option=com_content&view=article&id=715:propuesta-para-la-programacion-basica-del-temporizador-1-del-microcontrolador-pic18f2550-con-el-compilador-sdcc&catid=27:artlos&Itemid=288
http://www.itsteziutlan.edu.mx/index.php?option=com_content&view=article&id=714:propuesta-para-la-configuracion-basica-del-temporizador-1-del-microcontrolador-pic18f2550&catid=27:artlos&Itemid=288
Blog cajón desastre (CBTis 44 / TecNM Teziutlán) https://github.com/maigke ( tiene muy poca aportación)
Mostrando entradas con la etiqueta piklab. Mostrar todas las entradas
Mostrando entradas con la etiqueta piklab. Mostrar todas las entradas
miércoles, 14 de diciembre de 2011
PIC18F2250 y timer 1 una propuesta para configurarlo.
Etiquetas:
electrónica,
linux,
maigke,
mexico,
micros,
montiel,
pic18f2550,
pics,
piklab,
sdcc,
tec,
temporizado,
teziutlan
sábado, 10 de julio de 2010
Control motor PaP Bipolar con CCS e "interrupcion" por USART programado en Linux
Como es sabido el uC PIC16F84A no cuenta con USART, sin embargo para controlar un motor de pasos bipolar en posición bidireccional, podemos usar un pequeño artilugio para hacer responder a una interrupcion al PIC, usando el protocolo rs232
bueno el codigo fuente es el siguiente
#include <16F84a.h>
#fuses XT,NOWDT
#use delay (clock=4000000)
//#use fixed_io(b_outputs=pin_b3)
//#use fixed_io(a_outputs=pin_a0,pin_a1,pin_a2,pin_a3)
#use rs232(xmit=PIN_B3,rcv=PIN_A4,bits=8)
//variables globales
int1 flagA=FALSE, flagB=FALSE;
int value=50;
//Interrupciones
#INT_EXT
void int_rb0(void){
char letra;
disable_interrupts(GLOBAL);
delay_ms(10);
letra=getc();
letra= toupper(letra);
switch(letra){
case 'D':printf("Derecha\r\n");
flagA=TRUE;
flagB=FALSE;
break;
case 'I':printf("Izquierda\r\n");
flagA=FALSE;
flagB=TRUE;
break;
}
enable_interrupts(GLOBAL);
}
//prototipos
void adelante(void);
void atras(void);
main(){
enable_interrupts(GLOBAL);
ext_int_edge(L_TO_H); //interrupcion en flanco de bajada
enable_interrupts(int_ext); //habilitada interrupcion Externa RB0
printf("Control de\n\r Motor de pasos Bipolar");
while(1){
if(flagA==TRUE)
adelante();
if(flagB==TRUE)
atras();
};
return 0;
}
void adelante(void){
Output_A(input_A()|0x05);
delay_ms(value);
Output_A(input_A()|0x06);
delay_ms(value);
Output_A(input_A()|0x0A);
delay_ms(value);
Output_A(input_A()|0x09);
delay_ms(value);
}
void atras(void){
Output_A(input_A()|0x09);
delay_ms(value);
Output_A(input_A()|0x0A);
delay_ms(value);
Output_A(input_A()|0x06);
delay_ms(value);
Output_A(input_A()|0x05);
delay_ms(value);
}
Aqui el circuito
bueno el codigo fuente es el siguiente
#include <16F84a.h>
#fuses XT,NOWDT
#use delay (clock=4000000)
//#use fixed_io(b_outputs=pin_b3)
//#use fixed_io(a_outputs=pin_a0,pin_a1,pin_a2,pin_a3)
#use rs232(xmit=PIN_B3,rcv=PIN_A4,bits=8)
//variables globales
int1 flagA=FALSE, flagB=FALSE;
int value=50;
//Interrupciones
#INT_EXT
void int_rb0(void){
char letra;
disable_interrupts(GLOBAL);
delay_ms(10);
letra=getc();
letra= toupper(letra);
switch(letra){
case 'D':printf("Derecha\r\n");
flagA=TRUE;
flagB=FALSE;
break;
case 'I':printf("Izquierda\r\n");
flagA=FALSE;
flagB=TRUE;
break;
}
enable_interrupts(GLOBAL);
}
//prototipos
void adelante(void);
void atras(void);
main(){
enable_interrupts(GLOBAL);
ext_int_edge(L_TO_H); //interrupcion en flanco de bajada
enable_interrupts(int_ext); //habilitada interrupcion Externa RB0
printf("Control de\n\r Motor de pasos Bipolar");
while(1){
if(flagA==TRUE)
adelante();
if(flagB==TRUE)
atras();
};
return 0;
}
void adelante(void){
Output_A(input_A()|0x05);
delay_ms(value);
Output_A(input_A()|0x06);
delay_ms(value);
Output_A(input_A()|0x0A);
delay_ms(value);
Output_A(input_A()|0x09);
delay_ms(value);
}
void atras(void){
Output_A(input_A()|0x09);
delay_ms(value);
Output_A(input_A()|0x0A);
delay_ms(value);
Output_A(input_A()|0x06);
delay_ms(value);
Output_A(input_A()|0x05);
delay_ms(value);
}
Aqui el circuito
domingo, 4 de julio de 2010
jueves, 13 de agosto de 2009
Por fin le entendi a lo del toolchain de piklab para integracion con sdcc
Por fin!
maigke el Sáb 8 Ago 2009 - 8:32
Bueno despues de dejar esto de la integracion de piklab con el pickit2 y sdcc que tengo en casa
, pues ya despues de releer un buen
y bien debido a que soy lenton, pues ya comprendí!!
Lo unico que hize despues de volver sobre mis pasos, y encontrarme con los mismos problemas de hace un tiempo, decidí, reiniciar todo de nuevo. y lo único que agregue en Proyecto- Oopciones de Proyecto -- Toolchain --- Linker -- Camiarlo a personalizado, afortunadamente me quedaba con las opciones por defecto, bueno pues me coloque sobre la línea de texto y agregue la línea
libc18f.lib
y presione el boton de Add.
esto me dio el siguiente resultado!
sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
sdcc -mpic16 -p18f2550 -V --debug -Wl-c -Wl-m -I/home/mike/PIC/reloj_test/ -oreloj.hex reloj.o libc18f.lib
using default linker script "/usr/share/gputils/lkr/18f2550.lkr"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o reloj.hex reloj.o crt0i.o libc18f.lib pic18f2550.lib libsdcc.lib
*** Éxito ***
Parsing COFF file: /home/mike/PIC/reloj_test/reloj.cof
Device name: "18F2550"
Otro error que habia cometido, es que en la parte izquierda en la barra de proyecto, agregue el codigo objeto generado cuando unicamente compile el archivo, en este caso se llama reloj.o.
Muchas gracias espero que a alguien mas le sea de ayuda

Ahora seguiremos con las lecturas de los demas post para el echar a andar el pickit2 en piklab
***************************************************************************************************************
Gracias a todos ya he podido hechar a andar mi programador pickit2 con piklab!!
programando en sdcc, bueno pues que sucedia, no tenia los devs del la libreria libusb, por eso mismo tenia problemas para instalar el pk2cmd
Hecho eso, de acuerdo a Risanti http://pic-linux.foroactivo.net/piklab-f3/pickit-2-firmware-1x-en-piklab-t87.htm?highlight=piklab , tenia que solo hacer un
$sudo make install, y bueno de cualquier forma modifique las variables de ambiente en el .bashrc, aunque creo que esta demas.
al igual, como indica Risanti,
Mis resultados obtenidos ya por el piklab fueron estos
Conectando Firmware PICkit2 1.x en Puerto USB con el dispositivo 18F2550...
Versión de firmware es 1.20.0
set Vdd = 5 V and Vpp = 12 V
Establecer destino auto alimentado: false
Target Vdd = 4.99519 V
Target Vpp = 11.924 V
Conectado.
Enter normal mode
Already in requested mode.
Id leída: 18F2550 (rev. 5)
Programando memoria de dispositivo...
protected: code=false data=false
Borrando dispositivo
Escribir memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Verificar memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Escribir memoria: Datos EEPROM
Verificar memoria: Datos EEPROM
Escribir memoria: User IDs
Verificar memoria: User IDs
Escribir memoria: Bits de configuración
Verificar memoria: Bits de configuración
Programación exitosa.
Lo unico que hize despues de volver sobre mis pasos, y encontrarme con los mismos problemas de hace un tiempo, decidí, reiniciar todo de nuevo. y lo único que agregue en Proyecto- Oopciones de Proyecto -- Toolchain --- Linker -- Camiarlo a personalizado, afortunadamente me quedaba con las opciones por defecto, bueno pues me coloque sobre la línea de texto y agregue la línea
libc18f.lib
y presione el boton de Add.
esto me dio el siguiente resultado!
sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
sdcc -mpic16 -p18f2550 -V --debug -Wl-c -Wl-m -I/home/mike/PIC/reloj_test/ -oreloj.hex reloj.o libc18f.lib
using default linker script "/usr/share/gputils/lkr/18f2550.lkr"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o reloj.hex reloj.o crt0i.o libc18f.lib pic18f2550.lib libsdcc.lib
*** Éxito ***
Parsing COFF file: /home/mike/PIC/reloj_test/reloj.cof
Device name: "18F2550"
Otro error que habia cometido, es que en la parte izquierda en la barra de proyecto, agregue el codigo objeto generado cuando unicamente compile el archivo, en este caso se llama reloj.o.
Muchas gracias espero que a alguien mas le sea de ayuda
Ahora seguiremos con las lecturas de los demas post para el echar a andar el pickit2 en piklab
***************************************************************************************************************
Gracias a todos ya he podido hechar a andar mi programador pickit2 con piklab!!
programando en sdcc, bueno pues que sucedia, no tenia los devs del la libreria libusb, por eso mismo tenia problemas para instalar el pk2cmd
Hecho eso, de acuerdo a Risanti http://pic-linux.foroactivo.net/piklab-f3/pickit-2-firmware-1x-en-piklab-t87.htm?highlight=piklab , tenia que solo hacer un
$sudo make install, y bueno de cualquier forma modifique las variables de ambiente en el .bashrc, aunque creo que esta demas.
al igual, como indica Risanti,
Risanti escribió:Hola a todos..
Lo siguiente es cambiar el firmware del pickit 2 para lo cual podemos descargar las distintas versiones desde
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1960
además con el comando pk2cmd -d PK2V012000.hex 'actualizamos firmware tiene que ser 1.20
En piklab configuramos el programador FIRMWARE PICKIT 2 1.X .....comprobamos la conexion que este correcto.. y listo
Aunque
la he probado con algunos pic funciona bien.. no se si sera un problema
de la version 1.20 del pickit pero no puedo programar pic 16F88. pero
otros los pogramos sin problemas...
Para programar 16F88 estoy usando pickit con version 2.32 conjuntamente con pikdev http://pic-linux.foroactivo.net/otros-f19/pickit-2-trabajando-pikdev-v-110-t86.htm#199
Atte.
Risanti
Mis resultados obtenidos ya por el piklab fueron estos
Conectando Firmware PICkit2 1.x en Puerto USB con el dispositivo 18F2550...
Versión de firmware es 1.20.0
set Vdd = 5 V and Vpp = 12 V
Establecer destino auto alimentado: false
Target Vdd = 4.99519 V
Target Vpp = 11.924 V
Conectado.
Enter normal mode
Already in requested mode.
Id leída: 18F2550 (rev. 5)
Programando memoria de dispositivo...
protected: code=false data=false
Borrando dispositivo
Escribir memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Verificar memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Escribir memoria: Datos EEPROM
Verificar memoria: Datos EEPROM
Escribir memoria: User IDs
Verificar memoria: User IDs
Escribir memoria: Bits de configuración
Verificar memoria: Bits de configuración
Programación exitosa.
maigke- Participante
- Cantidad de envíos: 24
Fecha de inscripción: 12/04/2009
Edad: 31
Localización: Mexico -
Suscribirse a:
Entradas (Atom)