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