Hallo Grave80

ich hab mahl was zusammen gebastelt.

Code:
//NICHT VERGESSEN DIE asuro.c DATEI LEER ZU MACHEN!

//denn die MAKEFILE will asuro.c auch compilieren, und
//weil 'asuro.h' nicht 'included' ist entstehen compilerfehler
//wenn 'asuro.c' leer ist gibts kein fehler und daurt das flashen mahl ganz kurz!

#include <avr/io.h>

int main(void){

	//linker motor forwarts/ruckwarts signalen als ausgang schalten
	DDRD|=(1<<PD5)|(1<<PD4);

	//linker motor forwarts/ruckwarts signalen hoch schalten (inaktief)
	PORTD|=(1<<PD5)|(1<<PD4);

	//rechter motor forwarts/ruckwarts signalen als ausgang schalten
	DDRB|=(1<<PB5)|(1<<PB4);

	//rechter motor forwarts/ruckwarts signalen hoch schalten (inactief)
	PORTB|=(1<<PB5)|(1<<PB4);

	//geschwindigkeits kontrol beider motoren als ausgang schalten
	DDRB|=(1<<PB2)|(1<<PB1);

	//timer/counter1 prescaler faktor 64 einstellen (nur fur die deutlichkeit bit fur bit programmiert)
	TCCR1B&=~(1<<CS12);	//CS12 niedrich
	TCCR1B|= (1<<CS11);	//CS11 hoch
	TCCR1B|= (1<<CS10);	//CS10 hoch

	//ausgang OC1A hoch/niedrich schalten (wie die ausgang auf timer1 reagieren soll)
	TCCR1A|=(1<<COM1A1)|(1<<COM1A0);

	//ausgang OC1B hoch/niedrich schalten (wie die ausgang auf timer1 reagieren soll)
	TCCR1A|=(1<<COM1B1)|(1<<COM1B0);

	//timer1 mode 5 selektieren (nur fur die deutlichkeit bit fur bit programmiert)
	TCCR1B&=~(1<<WGM13);	//WGM13 niedrich
	TCCR1B|= (1<<WGM12);	//WGM12 hoch
	TCCR1A&=~(1<<WGM11);	//WGM11 niedrich
	TCCR1A|= (1<<WGM10);	//WGM10 hoch

	//linker motor forwarts
	PORTD&=~(1<<PD4);

	//rechter motor forwarts
	PORTB&=~(1<<PB4);

	//linker moter  ungefahr ein drittel von maximale geschwindigkeit (0x00 = full speed, 0xFE = am langsahmsten)
	OCR1A=0xA0;

	//rechter motor ungefahr ein drittel von maximale geschwindigkeit (0x00 = full speed, 0xFE = am langsahmsten)
	OCR1B=0xA0;

	//UND LOS GEHT'S!!!

	//warte hier
	while(1);
	
	//verlasse die function (wird niemahl ausgefurt, sonst kompilierer warnung)
	return 0;
	
}


/*

	Einige bemerkungen:

	- allein bits hoch programmieren ist ganz gefahrlich weil mann nicht da von ausgehen sollte
	  dass bits die niedrich sein sollten dass schon vorher sind!
		Mann weiss nie wie das boot-programm die bits hinterlasst.
		Hat mich schon mache stunde gekostet!
		
	- timer1 kent 15 verschiedene modes (mode 5 is gewahlt)

		mode 5 lass timer1 hochzahlen von 0 bis 255 und wieder zurck zahlen nach 0 und wieder hoch zahlen, usw.
		
		mode 5:
		
		COM1A0/COM1A1 beide hoch heisst: (OC1A = linker motor geschwindigkeits reglung)
			- wenn timer1 hoch   zahlt und gleich OCR1A ist wird ausgang OC1A hoch
			- wenn timer1 zuruck zahlt und gleich OCR1A ist wird ausgang OC1A niedrich
			
		COM1B0/COM1B1 beide hoch heisst: (OC1B = rechter motor geschwindigkeits reglung)
			- wenn timer1 hoch   zahlt und gleich OCR1B ist wird ausgang OC1B hoch
			- wenn timer1 zuruck zahlt und gleich OCR1B ist wird ausgang OC1B niedrich
		
		Wie hoher die OC1A/OC1B wert je kurzer ist die ausgang OC1A/OC1B hoch und lauft die motor langsamer

		Die prescaler ist auf 64 gewahlt dass macht die taktfrequenz vom timer1 gleich:
		8MHz (externen oszillator) geteilt durch 64 macht 488Hz aber weil die timer1 hochzahl und zuruck zahlt
		bleiben 488Hz/2 = 244Hz ubrich, dass ist die frequenz womit die IC1A/OC1B pinnen pulsieren.


		PORTD		PD5				PD4
						hoch			hoch			= linker motor beide anschliessungen hochohmig/unterbrochen
						hoch			niedrich	=	linker motor vorwarts 
						niedrich	hoch			=	linker motor zuruckwarts
						niedrich	niedrich	=	linker motor beide anschliessungen mit plus verbunden

		PORTB		PB5				PB4
						hoch			hoch			= rechter motor beide anschliessungen hochohmig/unterbrochen
						hoch			niedrich	=	rechter motor vorwarts 
						niedrich	hoch			=	rechter motor zuruckwarts
						niedrich	niedrich	=	rechter motor beide anschliessungen mit plus verbunden


	gruss
	
	Arexx-Henk
	

*/
gruss

Henk