PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommunikation mit Sensor - Sensordaten am PIC einlesen



theodrin
18.02.2008, 11: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,

StEndres
18.02.2008, 15:11
Du musst auf jeden Fall das bit aus dem Register PORTA lesen. LATA sind nur die Soll-Ausgangswerte der Pins, die aber nicht mit den tatsächlichen Werten der Pins übereinstimmen müssen, falls diese als Eingang geschaltet sind. Also lesen aus PORTA uns schreiben idealerweise über LATA.

Poste mal deinen gesamten Code. Der Fehler kann auch wo anderst liegen. Hast du die Analogeingänge explizit als Digitaleingänge geschaltet?

Verwendest du zur Verbindung mit dem Sensor getrennte Sende und Empfangsleitungen? Dann kannst du auch das SPI-Modul mal probieren.

Stefan

theodrin
18.02.2008, 20:48
Tja, es war das ADCON1-Register. Danke für den super Tipp. Ich hab angenommen, dort sind eh alle standardmäig auf Digital eingestellt, aber man lernt ja nie aus. Aber es ist wieder mal ärgerlich. Es sind immer solche Sachen, solche unscheinbaren, die immer ärgern. Ich denk ja mal vorher, dass an meinem Code was müll ist mit der Kommunikation, dann hab ich die Beschaltung kontrolliert, umgesteckt, andere Pins benutzt und dann so ein Fehler. Na ja, danke auf jeden Fall!!