Hallo

Davon habe ich schon immer geträumt, aber rein mechanisch (mit lego oder fischertechnik..) hat das nie funktioniert:

Bild hier  
http://www.youtube.com/watch?v=SZ3aWmsqfFQ

Nach vielen Versuchen kann ich nun sagen, dass die Fertigungstoleranzen meiner Bio-Dominosteine absolut unakzeptabel sind. Ich vermute, die werden aus massivem Holz rausgebissen. Ich werde dem Hersteller/Vertrieb mal eine Kopie der Videos senden...

Beim Aussortieren der "schräg" gesägten Steine:

Bild hier   Bild hier  
http://www.youtube.com/watch?v=6RqBD0XeheQ
http://www.youtube.com/watch?v=DcgoIOig_Mk

Das Programm auf Basis meiner Mini-Lib:
Code:
// Domino Day für den RP6 16.11.07 mic

#include "rblib.h"
#include "rblib.c"

uint8_t  y, z;

ISR(TIMER0_COMP_vect)
{
	static uint16_t count=0;
	//if(count>x) PORTA &= ~16; else PORTA |= 16;	// E_INT1 (Pin8)
	if(count>y) PORTC &= ~1;  else PORTC |= 1;	// SCL (Pin10)
	if(count>z) PORTC &= ~2;  else PORTC |= 2;	// SDA (Pin12)
	if(count<1000)count++; else count=0;
}
void servo_init(void)
{
	//DDRA |= 16;				// E_INT1 als Ausgang
	DDRC |= 3;				// SCL und SDA als Ausgang

	TCCR0 =  (0 << WGM00) | (1 << WGM01);					// CTC-Mode
	TCCR0 |= (0 << COM00) | (0 << COM01);					// ohne OCR-Pin
	TCCR0 |=	(0 << CS02)  | (1 << CS01) | (0 << CS00);	// prescaler /8
	TIMSK =  (1 << OCIE0); 										// Interrupt ein
	OCR0  = 9; // 100kHz?
}
int main(void)
{
	rblib_init();
	servo_init();

	setLEDs(0b1001);
   setMotorDir(FWD,FWD);
	setMotorPWM(0,0);
	z=225;
	y=100;
	delay(255);

while(1){
	y=161;			// hoch
	delay(100);
	z=211;			// greifen
	delay(50);
	y=45; 			// runter
	delay(50);
   setMotorDir(BWD,BWD); // zurück
	setMotorPWM(50,50);
	delay(50);
	setMotorPWM(0,0);
	delay(50);
	z=202;			// loslassen
	delay(150);
	z=195;			// auf Abstand
	delay(50);
   setMotorDir(FWD,FWD); // vor
	setMotorPWM(50,50);
	delay(100);
	setMotorPWM(0,0);
}

	return 0;
}
Doku des Greifers folgt noch

Gruß

mic