Windows säger "Windows has stopped this device because it has reported problems. (Code 43)" och rapporterar den som "Unknown device"
Exempelkoden från mikroelektonika funkar så hårdvaran är ok. Dessutom använder jag samma USBdsc.c så den är också ok.
Här är den andra koden:
Kod: Markera allt
//
// Example code for a NEXA transmitter produced by Sonny -11
// Needs adjustment depending of wich microcontroller choosen.
//
// Defines for connected processor port
#define TX_HI PORTB.F5 = 1
#define TX_LO PORTB.F5 = 0
unsigned long saved_sender = 123456; // The "remote-control" id
unsigned short saved_recicpient = 7; // Receiver channel
unsigned short saved_group = 0; // no "group" message
unsigned short saved_action = 1; // "on" :)
unsigned short PACKETS = 7; // Packets to send out
//unsigned short true = 1;
//unsigned short false = 0;
unsigned char readbuff[64];
unsigned char writebuff[64];
char cnt;
char kk;
void interrupt(){
USB_Interrupt_Proc(); // USB servicing is done inside the interrupt
}
void sendBitNEXA(unsigned short b) {
if (b == 1) {
TX_HI;
delay_us(320);
TX_LO;
delay_us(200);
} else {
TX_HI;
delay_us(320);
TX_LO;
delay_us(1210);
}
return;
}
void sendPairNEXA(unsigned short b) {
// Manchester data is 01 or 10, never 11 or 00
if(b == 0) {
sendBitNEXA(1);
sendBitNEXA(0);
} else {
sendBitNEXA(0);
sendBitNEXA(1);
}
return;
}
void transmitNEXA( unsigned long SenderID, unsigned short RecCh, unsigned short Group, unsigned short Enabled, unsigned short Repeats, unsigned short dimm){
//
// Takes approx. 80mS / packet
//
unsigned short i,cnt;
unsigned long DA;
unsigned short RCP;
for (cnt = 0;cnt < Repeats;cnt++) {
//
DA = SenderID;
RCP = RecCh;
//
TX_HI;
delay_us(320);
TX_LO;
delay_us(2510);
//
for(i=0; i<26;i++) { // Send bits 0-25 ,Device Address..
//
if((DA & 0x02000000)==0x02000000) {
sendPairNEXA(1);
} else {
sendPairNEXA(0);
}
DA <<= 1;
}
// Send 26th bit - group 1/0
sendPairNEXA(Group);
// Send 27th bit - on/off 1/0
if(Enabled == 2) {
sendBitNEXA(1);
sendBitNEXA(1);
} else {
sendPairNEXA(Enabled);
}
// 4 bit button
//
for(i=0; i<4;i++) {
//
if((RCP & 0x8)==0x8) {
sendPairNEXA(1);
} else {
sendPairNEXA(0);
}
RCP <<= 1;
}
// 4 bit dimm level
//
if(Enabled == 2) {
for(i=0; i<4;i++) {
//
if((dimm & 0x8)==0x8) {
sendPairNEXA(1);
} else {
sendPairNEXA(0);
}
dimm <<= 1;
}
}
//
// Now send "EndOfMessage" pattern ...
//
TX_HI;
delay_us(310);
TX_LO;
delay_us(9810); // put low for at least this time :)
}
//
return;
}
void main(void){
ADCON1 |= 0x0F; // Configure all ports with analog function as digital
CMCON |= 7; // Disable comparators
PORTA = 0;
TRISA = 0;
PORTB = 0;
TRISB = 0;
HID_Enable(&readbuff,&writebuff); // Enable HID communication
Delay_ms(1000);
while( 1 ) {
while(!HID_Read());
for(cnt=0;cnt<64;cnt++) {
transmitNEXA(saved_sender, readbuff[0], readbuff[1], readbuff[2], readbuff[3], readbuff[4]);
writebuff[cnt]=readbuff[cnt];
/*if (readbuff[cnt] = ',') {
strToInt(readbuff[cnt]);
} else if (readbuff[cnt] = 'S') {
} else {
temp[tcnt]=readbuff[cnt];
tcnt++;
strToInt(readbuff[cnt]);
} */
}
while(!HID_Write(&writebuff,64));
}
}
Så jag fattar inte varför USB'n går snett. Har ju inte rört den?
Jag har avkoppling på processorn + sändaren (100nF)
Har även kondensator på vusb (3*100nF tot 300nf)
Pullup på Mclr
EDIT:Bortkommenterad kod bort