PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Control Pro



IceWave
30.11.2015, 15:17
Hi, ich habe heute mal versucht ein bisschen meinen Pro Bot zu programmieren.
Jetzt habe ich ein paar Fragen.
Erstmal programmiere ich in C-Compact.
Ist das jetzt eine bestimmte Programmiersprache nur für die CControl oder ist das die Sprache C, welche so oft verwendet wird?


Und dann habe ich das hier jetzt mal geschrieben.
Jedoch gehen die LED's immer sofort an..
Ist hier vielleicht etwas falsch? if(ACS_L == 1)


#define IR_left 27
#define IR_right 29
#define TSOP 26

#define FLL 19
#define FLR 18


byte ACS_R, ACS_L;

void main(void)
{
Port_DataDirBit(IR_left,PORT_OUT);
Port_DataDirBit(IR_right,PORT_OUT);
Port_DataDirBit(TSOP,PORT_IN);
Port_DataDirBit(FLL,PORT_OUT);
Port_DataDirBit(FLR,PORT_OUT);
Port_DataDirBit(BLL,PORT_OUT);
Port_DataDirBit(BLR,PORT_OUT);
Port_WriteBit(FLR,PORT_OFF);
Port_WriteBit(FLL,PORT_OFF);
Port_WriteBit(BLR,PORT_OFF);
Port_WriteBit(BLL,PORT_OFF);

while(1)
{
IR_CheckLeft();
IR_CheckRight();
AbsDelay(10);
if(ACS_L == 1)
{
Port_WriteBit(FLL,PORT_ON);

}
if(ACS_R == 1)
{
Port_WriteBit(FLR,PORT_ON);

}
}

}

void IR_CheckLeft(void)
{
Port_WriteBit(IR_right,PORT_OFF);
Port_WriteBit(IR_left,PORT_ON);
AbsDelay(5);
ACS_L = Port_ReadBit(TSOP);
Port_WriteBit(IR_left,PORT_OFF);
}

void IR_CheckRight(void)
{
Port_WriteBit(IR_right,PORT_ON);
Port_WriteBit(IR_left,PORT_OFF);
AbsDelay(5);
ACS_R = Port_ReadBit(TSOP);
Port_WriteBit(IR_right,PORT_OFF);
}

radbruch
30.11.2015, 17:48
Hallo


Jedoch gehen die LED's immer sofort an..
Ist hier vielleicht etwas falsch? if(ACS_L == 1)Naja, wirklich falsch ist das wohl nicht. Wenn ich aber richtig vermute und die IR-LED bei "Port_WriteBit(IR_left,PORT_ON);" leuchtet und "ACS_L = Port_ReadBit(TSOP);" den Ausgang des TSOP einliest, dann ist es richtig, dass die LED bei "if(ACS_L == 1) Port_WriteBit(FLL,PORT_ON);" immer leuchtet.

Der Ausgang des TSOP wird low (0V), wenn er ein IR-Signal erkennt. Und weil deine IR-LED keine Trägerfrequenz sendet, erkennt der TSOP nicht, dass sie leuchtet und sein Ausgang bleibt immer high (5V).

Ein einfacher Ansatz: Man schließt die IR-LED an zwei Pins an. Ein Pin erzeugt die Trägerfrequenz (z.B. 36 oder 38 kHz je nach TSOP) an der Anode der LED und der zweite Pin schaltet die Kathode der LED gegen GND, wenn sie ein Signal senden soll. Die Frequenz kannst du eventuell einfach mit mit einer Zählschleife und togglen der IR-Led erzeugen. Dann benötigst du aber vermutlich ein Messgerät um die erzeugte Frequenz zu messen. Besser, aber mit mehr Programmieraufwand verbunden, ist das Erzeugen der Frequenz mit einem Timer.

C-Compact ist ein "Dialekt" von C.

Gruß

mic

IceWave
30.11.2015, 19:36
Danke schonmal, kann man eigentlich anstatt PORT_OFF auch einfach 0 schreiben?
Und muss man am Anfang des Programms die Ports immer gleich abschalten oder?
Sonst würden, wie ich gesehen habe die LED's zum Beispiel gleich von Anfang an leuchten.

IceWave
03.12.2015, 17:06
Weiß das vielleicht jemand? Wäre nett. MfG

Rabenauge
06.12.2015, 12:16
Du könntest es probieren.
Beides.
Geht schneller, als hier zu warten, bis jemand anderes es für dich probiert hat. Zumal der Probot nun nicht sooo verbreitet ist.