código pic encoder en
TRANSCRIPT
Código PIC Encoder en CCS:The translation could modify the code. Use the code without translating.
#Include <18F4550.h> // Usamos el PIC 18F4550, puedes declarar cualquiera de los // 18Fxx5x.
#Fuses XT, NOWDT, NOPROTECT, NOLVP, BROWNOUT
#use Delay( Clock = 4000000 )
#Byte PortA = 0xF80 // Dirección del puerto A para la familia 18Fxx5x.#Byte PortB = 0xF81 // Dirección del puerto B para la familia 18Fxx5x.#Byte PortC = 0xF82 // Dirección del puerto C para la familia 18Fxx5x.#Byte PortD = 0xF83 // Dirección del puerto D para la familia 18Fxx5x (Sólo 40/44 // pines).#Byte PortE = 0xF84 // Dirección del puerto E para la familia 18Fxx5x.
// ------ Variable Global ------Int8 x = 0; // Declaramos el valor de X como Byte, es decir, 8 bits. // Esta variable ha de ser global porque su valor lo // usaremos en la interrupción y en el programa principal. // Por tanto declaramos esta variable antes la interrupción // y de "void main".
// --------- Interrupción ---------#INT_EXT // Interrupción Externa por RB0: Decodificación de Encoder.Void IntRB0() { // CCS se encarga de desactiva automáticamente cualquier interrupción. // No hace falta guardar contextos de registros.
If (Bit_Test(PortB, 0)) // Si RB0 se ha puesto a 1 (flanco de subida), { Ext_Int_Edge(H_TO_L); // entonces activar la siguiente interrupción por flanco de // bajada. If (Bit_Test(PortB, 1)) // Si RB1 está a 1, { x++; // entonces incrementar una unidad el valor de X. } } Else // Si RB0 se ha puesto a 0 (flanco de bajada),
{ Ext_Int_Edge(L_TO_H); // entonces activar la siguiente interrupción por flanco de // subida. If (Bit_Test(PortB, 1)) // Si RB1 está 1, { x--; // entonces decrementar una unidad el valor de X. } } // Al finalizar la interrupción CCS se encarga de volver a poner automáticamente // la badera INTF = 0 ---> borra la interrupción para poder permitir la siguiente; // no hemos de hacer nada por nuestra parte.}
Void Main() // Inicio y configuración.{ Port_B_Pullups(FALSE); // Configuración para el PIC 18F4550. Setup_ADC_Ports(NO_ANALOGS); // Sin comparadores ni ADCs, todo digital, etc... Setup_adc(ADC_CLOCK_DIV_2); Setup_spi(SPI_SS_DISABLED); Setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); Setup_timer_1(T1_DISABLED); Setup_timer_2(T2_DISABLED,0,1); Setup_comparator(NC_NC_NC_NC); Setup_vref(FALSE);
Enable_Interrupts(Int_Ext); // Activar Interrupción Externa a través de RB0. Ext_Int_Edge(L_TO_H); // Inicialmente detectar interrupción por flanco de subida. Enable_Interrupts(GLOBAL); // Interrupciones Generales Activadas.
Set_Tris_A(0b11111111); // Puerto A todo entradas, en este caso no usamos el Puerto A. Set_Tris_B(0b11111111); // Puerto B todo entradas, sólo usamos las entradas RB0 y RB1. Set_Tris_C(0b11111111); // Puerto C todo entradas, en este caso no usamos el Puerto C. Set_Tris_D(0b00000000); // Puerto D todo salidas (8 bits que irán a los LEDs). Set_Tris_E(0b11111111); // Puerto E todo entradas, en este caso no usamos el Puerto E. // ---------- Programa Principial ----------
While (True) { PortD = x; // El valor de X sale por el Puerto D a los 8 LED. } }
Control de sentido de giro y velocidad para un motor DC
En este esquema utilizamos la entrada análoga 13 para leer el valor entregado por el potenciometro y así asignar este valor a la salida PWM del terminal 11.Se lee el estado del pulsador en el terminal 21 configurado como entrada.Con las salidas 0 y 1 controlamos el sentido de giro del motor.Se utiliza para este ejemplo el puente H L298.
#define PIC18F4550int velocidad;void setup(){ pinMode(21,INPUT); pinMode(0,OUTPUT); pinMode(1,OUTPUT);}void loop(){ velocidad=analogRead(13); if(digitalRead(21)){ digitalWrite(0,LOW); digitalWrite(1,HIGH); analogWrite(11,velocidad); }else{ digitalWrite(0,HIGH); digitalWrite(1,LOW);
analogWrite(11,velocidad); } }
Publicado 13th March 2012 por Julio De La CruzEtiquetas: Pinguino Robotica
Electrónica Y
Programación
Pinguino RS232
Como reutilizar una cámara web de un portátil dañado
comunicación CDC en windows con Pinguino
Comunicación Bluetooth serial
Impreso Pinguino 18F2550
Comunicación RF con los módulos RWS y TWS
Comunicación serial con lazarus
Como Hacer Una Presentación Al Estilo Prezi Con Impress.js
Medidor de distancia por ultrasonido HC-SR04 con pinguino
Instalación De Pinguino En windows 8
Comunicación serial entre dos computadores
Como hacer menús en Pinguino
Lógica combinatoria con GAL y WinCUPL
Comunicación de pinguino con processing
Proyecto mecatrónico con pinguino y processing
Manejo Pantalla LCD 1602 en un microcontroaldor
Conexión del max232 en un microcontrolador
Proyecto de curso 801b caracterización de un sensor
Evento Kines Art Uniajc
Montaje Pinguino
Estructuras Condicionales en Pseint
El ratón en Processing
Nuevo Pinguino X4
Brazo Robótico y Banda Transportadora
Ejemplo De Una Presentación Robot Seguidor De Linea
Nuevo controlador para pinguino
Reto PacMan Bot
Ejemplo ciclos en PSEINT
Ejemplos de procontroll parte 3
Ejemplos de Procontroll parte 2
Ejemplos de procontroll
Modificación control de juego
Ciclos en processing
Como programar una GAL
Como Instalar procontroll en processing
Proyecto de curso S242
Robot con el 16F628A
Guía Pinguino Processing
Trabajos de grado UNIAJC 2012
MT8870 con processing y pinguino
Scilab y Pinguino en Linux
Guia Pinguino CDC
mesa multitouch
Maquina CNC
Robot omnidireccional
Conexiones del PICKit 2
Relleno de figuras geométricas en processing
Lineas en processing
Ratón y animación básica en processing
Rectangulos y elipses en processing
Pinguino RS232
PINGUINO RS232Uno de los modos de comunicación con pinguino es la comunicación serial asíncrona con el protocolo RS232, aunque ya es poco frecuente encontrar computadores con el conector DB9 de comunicación serial se puede utilizar un adaptador USB - RS232.Existen muchos aparatos electrónicos sobre todo de uso industrial o de laboratorio que operan con este protocolo.También la gran mayoría de lenguajes de programación cuentan con librerías para la realización de aplicaciones con comunicación serial asíncrona.
Esquema de conexión pinguino con el max232
Publicado 6 days ago por Julio De La Cruz
Etiquetas: Pinguino
#include <16F877.h>#use delay(clock=1000000)#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,PUTint retardo; void main() { retardo=300; //CON ESTE VALOR SE CAMBIA LA VELOCIDAD DE GIRO DEL MOTOR WHILE(input(PIN_C0)) // INICIALIZO LOS PINES EN VALOR BAJO, PARA QUE EL MOTOR NO SE MUEVA { OUTPUT_LOW(PIN_B0); OUTPUT_LOW(PIN_B1); OUTPUT_LOW(PIN_B2); OUTPUT_LOW(PIN_B3); }do{if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) { OUTPUT_LOW(PIN_B0); OUTPUT_HIGH(PIN_B1); OUTPUT_LOW(PIN_B2); OUTPUT_LOW(PIN_B3); delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) { OUTPUT_LOW(PIN_B0); OUTPUT_LOW(PIN_B1); OUTPUT_HIGH(PIN_B2); OUTPUT_LOW(PIN_B3); delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) { OUTPUT_LOW(PIN_B0); OUTPUT_LOW(PIN_B1); OUTPUT_LOW(PIN_B2); OUTPUT_HIGH(PIN_B3); delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) { OUTPUT_HIGH(PIN_B0); OUTPUT_LOW(PIN_B1); OUTPUT_LOW(PIN_B2); OUTPUT_LOW(PIN_B3); delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1)))// GIRO EN UN SENTIDO (GIRO 2) {
OUTPUT_HIGH(PIN_B0); OUTPUT_LOW(PIN_B1); OUTPUT_LOW(PIN_B2); OUTPUT_LOW(PIN_B3); delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2) { OUTPUT_LOW(PIN_B0); OUTPUT_LOW(PIN_B1); OUTPUT_LOW(PIN_B2); OUTPUT_HIGH(PIN_B3); delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2) { OUTPUT_LOW(PIN_B0); OUTPUT_LOW(PIN_B1); OUTPUT_HIGH(PIN_B2); OUTPUT_LOW(PIN_B3); delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2) { OUTPUT_LOW(PIN_B0); OUTPUT_HIGH(PIN_B1); OUTPUT_LOW(PIN_B2); OUTPUT_LOW(PIN_B3); delay_ms(retardo); }}while(true); }