código pic encoder en

12
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

Upload: carlos-moreno-rodriguez

Post on 26-Oct-2015

134 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Código PIC Encoder en

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),

Page 2: Código PIC Encoder en

   {         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.    }         }

Page 3: Código PIC Encoder en

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);

Page 4: Código PIC Encoder en

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

Page 5: Código PIC Encoder en

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

Page 6: Código PIC Encoder en

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

Page 7: Código PIC Encoder en

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

Page 8: Código PIC Encoder en

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

Page 9: Código PIC Encoder en

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

Page 10: Código PIC Encoder en

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) { 

Page 11: Código PIC Encoder en

   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); }