Autor Tema: Datos mal al transmitir PIC18F452  (Leído 1762 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Datos mal al transmitir PIC18F452
« en: 19 de Abril de 2012, 15:02:57 »
Hola, estoy pasando un proyecto que hice en Arduino a PIC que consiste en transmitir paquetes de 3 bytes. En el arduino, funciona perfectamente, pero en el PIC al otro lado me llegan los datos cambiados. Observé las señales en ambos casos con el osciloscopio, y la velocidad está correcta y se ve claramente que los datos que viajan no son los mismos... aquí una foto



El código del PIC es: (al presionar un pulsador en RD0, transmite y enciende un led)

#include<p18f452.h>
#include<usart.h>
#include<delays.h>


#pragma config WDT=OFF
#pragma config OSCS=ON
#pragma config OSC=HS
#pragma config LVP=OFF

#define S1 PORTDbits.RD0

void main (void){

        TRISB = 0;
   TRISD = 0xFF; 
   PORTB = 0;

        OpenUSART( USART_TX_INT_OFF &
            USART_RX_INT_OFF &
            USART_ASYNCH_MODE &
            USART_EIGHT_BIT &
            USART_CONT_RX &
            USART_BRGH_HIGH,
            35 );


for( ; ; ){

   if(S1==0){
      PORTBbits.RB0=1;
      WriteUSART (0x90);
      WriteUSART (0x1E);
      WriteUSART (0x45);
      Delay10KTCYx(40);
              }

   else if(S1==1){
      PORTBbits.RB0=0;
            }

   }
CloseUSART();

}                             


---------------------------------------------------------------------------------------------------

Y el del Arduino es:



void setup() {
 
  Serial.begin(31250);
}

void loop() {
  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  //for (int note = 0x1E; note < 0x5A; note ++) {
    //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
    noteOn(0x90, 0x1E, 0x45);
    delay(100);
    //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
   // noteOn(0x90, 0x1E, 0x00);   
   // delay(100);
 // }
}

//  plays a MIDI note.  Doesn't check to see that
//  cmd is greater than 127, or that data values are  less than 127:
void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Re: Datos mal al transmitir PIC18F452
« Respuesta #1 en: 19 de Abril de 2012, 19:42:24 »
La pregunta es: qué puede estar pasando? qué hago mal? Gracias!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Datos mal al transmitir PIC18F452
« Respuesta #2 en: 29 de Abril de 2012, 21:06:22 »
Hola

Yo no veo los datos tan iguales ... el de ARDUINO tiene 7 pulsos y el del PIC 5 ...

Saludos
El papel lo aguanta todo

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Datos mal al transmitir PIC18F452
« Respuesta #3 en: 30 de Abril de 2012, 05:21:38 »
Hola, es posible que el arduino en cada serial.write envíe un retorno de carro y la instrucción pertinente para el PIC no lo haga.
Otra cosa, lo que tu has mirado con el osciloscopio es la salida de la USART del PIC o el otro extremo, porque ya sabes que en una linea de transmisión pueden aparecer muchas cosas entre extremos si no tienes cuidado


 

anything