theodrin
18.02.2008, 12:39
Hallo!
Ich hab ein Problem der Kommunikation mit einem Sensor. Der verwendet ein eigenes Protokoll, aber das ist nicht das Problem.
Zuerst sende ich ihm einen Befehlcode, dann arbeitet er, dann schickt er mir die Daten (Byte) seriell.
Ich stelle am PIC die Clock ein, sprich ich kann (im Grunde genommen) entscheiden wie "langsam" die Übertragung geht. Bei der schnelle gibts Beschränkungen :-) aber egal.
Das Problem ist, dass ich die bits nicht einlesen kann. Der Sensor schickt richtig die Bits, also High oder Low. Hab die Komm ganz langsam eingestellt und nachgemessen ;-). Dann wollt ich eben schauen ob der PIC das High-Bit eingelesen hat und falls, sollte ein Lämpchen an nem anderen Ausgang leuchten. Aber das tut es nicht. Sprich: Das einlesen klappt nicht.
Häng den zugebenermaßen schlimm aussehenden Testcode dran:
TRIS_DATA = 1; //#define TRIS_DATA TRISAbits.TRISA1
for(i=0x80; i>0; i/=2) //Mit einer Schleife das Byte bitweise einlesen
{
SCK = 1; //#define SCK LATAbits.LATA3
wait_s(3); //PIC wartet n-Sekunden
SCK = 0;
wait_s(1);
if(DATA) //#define DATA LATAbits.LATA1
LAMP1 = 1; //#define LAMP1 LATBbits.LATB4
else
LAMP1 = 0;
wait_s(3);
}
if (DATA)
LAMP1 = 1;
Zur Vollständigkeit. TRIS der Lampe auf 0 gesetzt (Ausgang) OK!!
Programmiere mit C18 von Microchip
Ich verstehs nicht. Hab auch statt LATA... PORTAbits.RA1 probiert. geht auch nicht und auch nicht DDRA.bits ... (Aus PIC18F4550 lib)
Bitte um Hilfe, weil ich hab keinen Dunst was ich da noch ausprobieren soll
lg,
Ich hab ein Problem der Kommunikation mit einem Sensor. Der verwendet ein eigenes Protokoll, aber das ist nicht das Problem.
Zuerst sende ich ihm einen Befehlcode, dann arbeitet er, dann schickt er mir die Daten (Byte) seriell.
Ich stelle am PIC die Clock ein, sprich ich kann (im Grunde genommen) entscheiden wie "langsam" die Übertragung geht. Bei der schnelle gibts Beschränkungen :-) aber egal.
Das Problem ist, dass ich die bits nicht einlesen kann. Der Sensor schickt richtig die Bits, also High oder Low. Hab die Komm ganz langsam eingestellt und nachgemessen ;-). Dann wollt ich eben schauen ob der PIC das High-Bit eingelesen hat und falls, sollte ein Lämpchen an nem anderen Ausgang leuchten. Aber das tut es nicht. Sprich: Das einlesen klappt nicht.
Häng den zugebenermaßen schlimm aussehenden Testcode dran:
TRIS_DATA = 1; //#define TRIS_DATA TRISAbits.TRISA1
for(i=0x80; i>0; i/=2) //Mit einer Schleife das Byte bitweise einlesen
{
SCK = 1; //#define SCK LATAbits.LATA3
wait_s(3); //PIC wartet n-Sekunden
SCK = 0;
wait_s(1);
if(DATA) //#define DATA LATAbits.LATA1
LAMP1 = 1; //#define LAMP1 LATBbits.LATB4
else
LAMP1 = 0;
wait_s(3);
}
if (DATA)
LAMP1 = 1;
Zur Vollständigkeit. TRIS der Lampe auf 0 gesetzt (Ausgang) OK!!
Programmiere mit C18 von Microchip
Ich verstehs nicht. Hab auch statt LATA... PORTAbits.RA1 probiert. geht auch nicht und auch nicht DDRA.bits ... (Aus PIC18F4550 lib)
Bitte um Hilfe, weil ich hab keinen Dunst was ich da noch ausprobieren soll
lg,