TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: proaudio 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
(http://img809.imageshack.us/img809/7145/img0952b3.jpg)
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);
}
-
La pregunta es: qué puede estar pasando? qué hago mal? Gracias!
-
Hola
Yo no veo los datos tan iguales ... el de ARDUINO tiene 7 pulsos y el del PIC 5 ...
Saludos
-
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