Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

14/12/2011 #81


Hola me gustaria saber si me puedes apoyar con un blog (programacionjuntos.blogspot.com), para juntos resolver dudas... gracias de antemano aun el blog esta en blanco porque me interesa ir publicando articulos que sirvan a los lectores espero lo visites y me apoyes.

Atentamente
Ing. Ortega
26/12/2011 #82

Avatar de COSMICO

Que bueno, seria interesante apoyo la petición
04/01/2012 #83

Avatar de megasysfix

Hola META, que tal, hace tiempo que no sabia nada de ti jejejeje, bueno como veo te me has adelantado demasiado en el proyecto este, yo tenia un gran problema pues programaba con VB2010 en Basic, con el tiempo aprendí de esos errores y actualmente tengo un programa bastante mejorado, mas que el tuyo podría decir, el problema es que estoy eliminando unos BUG que encuentro al manejarlo de manera muy rápida (pulsar botones como loco), cuando tenga mi versión terminada final, la publicare para que me des tu opinión, cabe aclarar que fuiste tu la persona que me incentivo en hacer esto puesto a que no tenia ni la remota idea de como usar el VB2010, pero te agradezco enormemente por tus tutoriales, te dejo una imagen de mi interfaz para que me des tu opinión (de manera estética almenos)



Saludos a todos los del foro, y espero poder hacer mi aporte al igual como lo hizo META, un gran genio.
19/01/2012 #84

Avatar de Meta

megasysfix dijo: Ver Mensaje
Hola META, que tal, hace tiempo que no sabia nada de ti jejejeje, bueno como veo te me has adelantado demasiado en el proyecto este, yo tenia un gran problema pues programaba con VB2010 en Basic, con el tiempo aprendí de esos errores y actualmente tengo un programa bastante mejorado, mas que el tuyo podría decir, el problema es que estoy eliminando unos BUG que encuentro al manejarlo de manera muy rápida (pulsar botones como loco), cuando tenga mi versión terminada final, la publicare para que me des tu opinión, cabe aclarar que fuiste tu la persona que me incentivo en hacer esto puesto a que no tenia ni la remota idea de como usar el VB2010, pero te agradezco enormemente por tus tutoriales, te dejo una imagen de mi interfaz para que me des tu opinión (de manera estética almenos)



Saludos a todos los del foro, y espero poder hacer mi aporte al igual como lo hizo META, un gran genio.
Hola:

Muy bueno, con fondo y todo. Siento decirte que tengo un proyecto grande mejor hecho con configuración completa desde hace muchísimo tiempo y no lo he publicado, incluido para enviar e-mail. Xddddddddd.

Buen trabajo.
19/01/2012 #85

Avatar de megasysfix

Meta dijo: Ver Mensaje
Hola:

Muy bueno, con fondo y todo. Siento decirte que tengo un proyecto grande mejor hecho con configuración completa desde hace muchísimo tiempo y no lo he publicado, incluido para enviar e-mail. Xddddddddd.

Buen trabajo.
Wooooooo, increíble, yo para enviar email tengo 3 cosas:
1.- Mi iPod
2.- Google chrome
3.- Outlook

jejejeje, el programa del que yo hablo consiste en añadir funciones que no encuentras en cualquier parte, como por ejemplo enviar un dato de x manera con una x forma a un x dispositivo, ejemplo practico enviar un dato a través de red al módem para que este lo envié a un dispositivo (diseñado por ti a que haga la función descrita por ti) conectado mediante el protocolo 802.11, no se si se entiende jejeje.

Saludos!!!!!
30/01/2012 #86

Avatar de Meta

Por lo que entiendo, envías un dato X de una manera a otra manera, como convirtiéndolo (algo como encriptación), luego lo envía a otro dispositivo.
20/02/2012 #87


ola !!! oye men no manejas picc compiler es q la verdad asm ya esta hechado a recoger, por todo lo demas q tuto tan groso eres muy teso; pero pues chevere q tuvieras en cuenta la observacion de pasar lo de asm en c asi de esa forma tu tuto quedaria regenial, vemos pues, exitos
20/02/2012 #88

Avatar de Meta

arthas1888 dijo: Ver Mensaje
Hola !!! Oye men no manejas picc compiler es que la verdad asm ya esta hechado a recoger, por todo lo demás que tuto tan groso eres muy teso; pero pues chevere que tuvieras en cuenta la observacon de pasar lo de asm en c asi de esa forma tu tuto quedaria regenial, vemos pues, exitos
Hola:

El problema es que no te quieres adaptar a las circunstancias, quieres que los demás nos adepatemos a tí. Muñevete y lo conseguirás, no esperes a que los demás lo hagan por tu comodidad.

Además, el ASM lo hico alguien del libro, no yo. Es mejor aprender el ASM y luego C. Si aprender C directamente, nunca entenderás a fondo como funciona un PIc por dentro y siempre estarás lleno de dudas e inseguridades, por eso no serás un buen programador, en mi caso no lo soy, siempre seré novato y aprendiendo para toda la vida.

Saludo.
20/02/2012 #89


veo!!, pues mira la verdad yo aprendi en asm tambien pero pues con lenguajes de alto nivel como c la verdad queda rezagado el asm, q pena si te ofendi y pues si uno realmente es novato, cada dia salen nuevas y nuevas cosas, saludos estamos en contacto
25/02/2012 #90

Avatar de Meta

Nada hombre, malos entendido.

El C se trabaja mucho más rápido. ejjejejejej.

Saludo.
25/02/2012 #91


ven una pregunta yo envio mediante puts(xxx) varios datos al recepcionarlos en visual c# se me pierden a veces datos como soluciono eso; quiero enviar al mismo tiempo con la instruccion puts(xxx) tres datos de los adc del pic y estado de los pines digitales de un puerto sino q en serio se me estan perdiendo resto de datos y pues en tu tuto los datos llegan como un string y pues la verdad no los puedo manipular independientemente; como q consejo tiennes frrente a ese problema muchas gracias men, saludos estamos en contacto se cuida
25/02/2012 #92

Avatar de Meta

Hola:

¿Por dónde ser pierden esso datos?

En este foro he hecho pruebas por internet y no se piderden, si se pueden perder depende de la conexión.

Un slaudo.
26/02/2012 #93


mmm pues vea mira tu con la funcion en visual de c+ de recibidos lo q hace es tomar todos los datos q lleguen al buffer y convertirlos en string mira yo lo q quiero no es q se conviertan en cadena de cxaracteres sino tomar cada dato en una variable independiente y de tipo byte es mas o menos eso; saludos exitos en tus actividades
26/02/2012 #94

Avatar de Meta

Lo que he hecho pasa los datos en una sola variable.

¿Quieres que con cada byte se almacene en cada byte?

http://msdn.microsoft.com/es-es/libr...vs.100%29.aspx

Voy a investigar a ver que consigo.

¿Después de conseguir almacenar byte por byte en las variables, qué vas hacer con ella?

Saludo.
27/02/2012 #95


exactamente lo q has hecho pasa todos las datos a una solo variable; la vaina en mi proyecto es q cada variable es por ejemplo el valor de un adc, otro es el valor de entrada de un pin y asi sucesivamente y si todo se queda en una sola variable es muy dificil manipular por distinto cada una entonces lo q quiero es q cada una sea una variable distinta y se guarde en un byte[] recibido; con eso si llegan datos cada byte va a quedar almacenada en recibido[0], recibido[1] y asi sucesivamnete y con eso puedo tomar los datros y ejecutarlos independientemente... muchas gracias por tus atenciones exitos!!!!! si quieres te envio lo q tengo haber .....saludos
27/02/2012 #96

Avatar de Meta

Hola:

Deja investigar, lo haré con C#. Antes que nada, dime los datos como los quieres recoger, síncrona, asíncrona, por tramas de bytes.......... 9600 baudios, bits de stop....

Saludo.
27/02/2012 #97


pues mira este el codigo en c del pic!!
espero lo entiendas q pena no describirlo, la idea es q siempre esta enviando datos a traves del buffer mediante el byte envia[] como datos de los adc y a la vez toma datos q le envian por el puerto mediante caracteres y decide q hacer entonces modifica los pwm o salidas digitales eso en concreto es la vaina,,
muchas gracias Meta por tu ayuda chevere q otra persona se interezca en las demas a eso le llamo sacrificio por la humanidad te cuidas exitos estmos en contacto......

#include <16F873A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#byte puerto_b=6
#use RS232(BAUD=9600, BITS=8 ,PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)
#use fast_io(b)


main() {
float l;
char recibe[2], envia[8];

int8 d, b, k;
int8 valorPWM2=0, valor_adc_1, valor_adc_2;
set_tris_b(0xFF);
set_tris_b(0x00);//puerto B como salida
setup_adc_ports(AN0_TO_AN2); // Configura canales usados por el ADC.
setup_adc(ADC_CLOCK_internal);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 250, 1);
puerto_b=0;
d=50;

while(true){
if(kbhit()) //prueba si a llegado un caracter
{

recibe[0]=getc();
if(recibe[0]=='a'){if(d==100){d=100;} if(d<100){d=d+1;}l=d;envia[0]=d;
b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='b'){if(d==0){d=0;} if(d>0) {d=d-1;}l=d;envia[0]=d;
delay_ms(50);b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='c'){output_toggle(PIN_B0);}
if(recibe[0]=='d'){output_toggle(PIN_B1);}
if(recibe[0]!='d'&&recibe[0]!='a'&&recibe[0]!='b'&&recibe[0]!='c'&&recibe[0]!='e'){valorPWM2=recibe[0];set_pwm2_duty(valorPWM2);}
if(recibe[0]=='e'){if(input_state(pin_a0)==0x01){delay_ms(20); envia[1]='a';}else{envia[1]='b';}}
if(recibe[0]=='f'){if(input_state(pin_a1)==0x01){delay_ms(20); envia[2]='a';}else{envia[2]='b';}}
set_adc_channel(0); // Seleccionamos el canal 0 y comenzamos a leer.
delay_us(10); // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_1 = read_adc();
set_adc_channel(1); // Seleccionamos el canal 1 y comenzamos a leer.
delay_us(10); // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_2 = read_adc();
envia[3]=valor_adc_1 ;
envia[4]=valor_adc_2 ;
puts(envia);
}
}
}
28/02/2012 #98

Avatar de Meta

pero el problema cual seria ?
porque alli comentas lo que aparentemente tienes, pero no el problema o lo que quieres conseguir
o es esta captura de byte desde el puerto lo que hace falta implementar ?
imagino utilizar la funcionalidad del namespace System.IO.Ports quizas la clase SerialPort (Clase)
estas usando el evento DataReceived ?
info adicional

SerialPort (RS-232 Serial COM Port) in C# .NET - #region Coad's Code


Serial Communication using C#


Serial Port Communication in C#
28/02/2012 #99


mira lo q pasa es que cuando recibo los datos en visual c# llega todo en una sola cadena todos los datos; osea toda la cadena envia; lo q quiero es q cuando lleguen se puedan separa de nuevo y tome los datos independientemente, que vuelva y aparezca envia[0], envia[1].....envia[4] con el fin de manipular cada uno y poderlos modificar o hacer lo q quiera yo...

a groso modo esto tengo en c# lo q pasa es q no llegan los datos cmo debe ser


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
List<byte> recibido = new List<byte>();
string dato;
string [] dato2= new string[8];
float t;
uint ADCValue1 = 0;
uint ADCValue2 = 0;

byte[] buffer = new byte[16];


bool inicioClick = false;

public Form1()
{
InitializeComponent();
deshabilita_controles();
richTextBox1.Text = "\npresione el boton de conectar puerto serial antes de enviar otro comando";
if (inicioClick == false)
{
return;
}
}

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{

int bytes = serialPort1.BytesToRead;
//if (bytes > 16) bytes = 16;
serialPort1.Read(buffer, 0, 8);

dato2[0] += Convert.ToString(buffer[0]);
dato2[1] += Convert.ToString(buffer[1]);
dato2[2] += Convert.ToString(buffer[2]);
dato2[3] += Convert.ToString(buffer[3]);
dato2[4] += Convert.ToString(buffer[4]);

foreach (Byte Bite in buffer)
{

dato += Convert.ToString(Bite) + " ";
}

if (buffer[1] ==0x61 ) { pictureBox1.BackColor = Color.Yellow; }
if (buffer[1] == 0x62) { pictureBox1.BackColor = Color.GreenYellow; }
if (buffer[2] == 0x61) { pictureBox2.BackColor = Color.Yellow; }
if (buffer[2] == 0x62) { pictureBox2.BackColor = Color.GreenYellow; }
ADCValue1 = (uint)buffer[3];
ADCValue2 = (uint)buffer[4];
// Muestra los valores en las barras de progreso.
//progressBar1.Value = buffer[3];
//progressBar2.Value = buffer[4];

//dato = Convert.ToString(buffer[0]);



}

private void button1_Click(object sender, EventArgs e)
{

serialPort1.Open();
recibido.Clear();
inicioClick = true;
habilita_controles();
}

private void button2_Click(object sender, EventArgs e)
{
byte[] mBuffer = new byte[1];
mBuffer[0] = 0x61; //ASCII letra "a".
serialPort1.Write(mBuffer, 0, mBuffer.Length);
dato = "";
resetea();



}


private void timer1_Tick(object sender, EventArgs e)
{

richTextBox1.Text = " el pwm1 esta al: " + dato2[0] + " %\n el pwm2 esta al: " + t + " %" + "\n el adc1 esta al: " + dato2[3] + "\n el adc2 esta al: " + dato2[4];


}

private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
byte[] miBuffer = new byte[1];

// Luego enviamos los datos
// del duty_cicle del PWM1.

miBuffer[0] = Convert.ToByte(pwm.Value);
serialPort1.Write(miBuffer, 0, miBuffer.Length);
t = ((float)pwm.Value * 100)/250;
resetea();

}

private void button3_Click(object sender, EventArgs e)
{
byte[] mBuffer = new byte[1];
mBuffer[0] = 0x62; //ASCII letra "b".
serialPort1.Write(mBuffer, 0, mBuffer.Length);
resetea();
}

private void button5_Click(object sender, EventArgs e)
{
byte[] mBuffer = new byte[1];
mBuffer[0] = 0x64; //ASCII letra "d".
serialPort1.Write(mBuffer, 0, mBuffer.Length);
richTextBox2.Text = " cambio estado pin b1+\nla entrada en bytes es: " + dato;
resetea();
}

private void button4_Click(object sender, EventArgs e)
{
byte[] mBuffer = new byte[1];
mBuffer[0] = 0x63; //ASCII letra "c".
serialPort1.Write(mBuffer, 0, mBuffer.Length);
richTextBox2.Text = " cambio estado pin b0"+"\nla entrada en bytes es: " + dato;
resetea();
}

private void button6_Click(object sender, EventArgs e)
{
byte[] mBuffer = new byte[1];
mBuffer[0] = 0x65; //ASCII letra "e".
serialPort1.Write(mBuffer, 0, mBuffer.Length);
resetea();
}
private void habilita_controles()
{

// Habilita salidas digitales.
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;

// Habilita controles PWM.
pwm.Enabled = true;


// Habilita entradas digitales.

timer1.Enabled = true;
pictureBox1.Enabled = true;
pictureBox1.BackColor = Color.GreenYellow;
pictureBox2.Enabled = true;
pictureBox2.BackColor = Color.GreenYellow;

}

private void deshabilita_controles()
{
// deshabilita salidas digitales.
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = false;

// deshabilita controles PWM.
pwm.Enabled = false;
timer1.Enabled = false;

// deshabilita entradas digitales.

pictureBox1.Enabled = false;
pictureBox1.BackColor = Color.Gray;
pictureBox2.Enabled = false;
pictureBox2.BackColor = Color.Gray;


}

private void button7_Click(object sender, EventArgs e)
{
serialPort1.Close();
recibido.Clear();
inicioClick = false;
deshabilita_controles();
}
private void resetea()
{
dato = "";
dato2[0] = ""; dato2[1] = ""; dato2[2] = ""; dato2[3] = ""; dato2[4] = "";
}
}
}
saludos te cuidas estamos en contacto y en el picc es el siguiente:
#include <16F873A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#byte puerto_b=6
#use RS232(BAUD=9600, BITS=8 ,PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)
#use fast_io(b)


main() {
float l;
char recibe[2], envia[8];

int8 d, b, k;
int8 valorPWM2=0, valor_adc_1, valor_adc_2;

set_tris_b(0xf0);//puerto B como salida y entrada
setup_adc_ports(all_analog); // Configura canales usados por el ADC.
setup_adc(ADC_CLOCK_internal);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 250, 1);
puerto_b=0;
d=50;

while(true){
if(kbhit()) //prueba si a llegado un caracter
{

recibe[0]=getc();
if(recibe[0]=='a'){if(d==100){d=100;} if(d<100){d=d+1;}l=d;envia[0]=d;
b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='b'){if(d==0){d=0;} if(d>0) {d=d-1;}l=d;envia[0]=d;
delay_ms(50);b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='c'){output_toggle(PIN_B0);}
if(recibe[0]=='d'){output_toggle(PIN_B1);}
if(recibe[0]!='d'&&recibe[0]!='a'&&recibe[0]!='b'&&recibe[0]!='c'&&recibe[0]!='e'){valorPWM2=recibe[0];set_pwm2_duty(valorPWM2);}
if(recibe[0]=='e'){if(input_state(pin_b4)==0x01){delay_ms(20); envia[1]='a';}else{envia[1]='b';}}
if(recibe[0]=='e'){if(input_state(pin_b5)==0x01){delay_ms(20); envia[2]='a';}else{envia[2]='b';}}
set_adc_channel(0); // Seleccionamos el canal 0 y comenzamos a leer.
delay_us(10); // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_1 = read_adc();
set_adc_channel(1); // Seleccionamos el canal 1 y comenzamos a leer.
delay_us(10); // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_2 = read_adc();
envia[3]=valor_adc_1 ;
envia[4]=valor_adc_2 ;
puts(envia);
delay_ms(100);
}

}
}

ahora si te cuidas estamos hablando vemos pues si me puedes ayudar te lo agradeceria...

---------- Actualizado después de 32 minutos ----------

miara aqui te envio lo q tengo tanto en visual c# como en picc ahi creo q con eso te daras cuenta de lo q pasa... espero me ayudes Meta te cuidas saludos estamos en contacto

no le pongas cuidado a todo ese codigo q tenvie mas bien ponle cuidado al .rar ahi sabras lo q quiero hacer y cual es mi problema muchas gracias por todo Meta,,,,

un saludo
Archivos Adjuntos
Tipo de Archivo: rar rs232prueba.rar (104,6 KB (Kilobytes), 21 visitas)
28/02/2012 #100

Avatar de Meta

Deja mirar el código.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.