- fchao-Sinus-Wechselrichter AliExpress    Werbung      
Ergebnis 1 bis 4 von 4

Thema: Atmel Tiny 13V als Controller für einen Dieselmotor

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.09.2009
    Beiträge
    12
    So!
    Ein kleines Update meines Projektes:
    Ich hab mir mit hilfe des Asuro einen "Simulator" gebaut mit hilfe ich die Programmierung testen will.
    Er simuliert ein Signal, wie es von einem Drehzahlsensor stammen könnte, mit variabler Drehzahl.
    Nun scheitere ich aber schon seit einer Weile an folgendem:
    Um eine Drehzahl errechnen zu können muss ich ja die Impulse pro Zeiteinheit zählen. Ich schaffs aber nicht eine Schleife zu programmieren, die z.B. 1/4 Sekunde gewisse Befehle ausführt (Impulse an einem Beinchen zählen).
    Ich hoffe ihr versteht was mein Problem ist...

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.09.2009
    Beiträge
    12
    Code:
    #include <avr/io.h>#include <avr/interrupt.h>
    
    
    volatile uint8_t y, p;
    unsigned char b, c, a;
    
    
    ISR(TIM0_COMPA_vect) // Servoansteuerung
    {
    	static uint16_t count=0;
    	if (count>y) PORTB &= ~(1<<PB4); else PORTB |= (1<<PB4);   // solange count größer ist als y pb4=1 
    	if (count < 2000) count++; else { count=0; if(p) p--; } //p wird mit 960.0000 /96 = 100khz /2000 =50hz angesteuert (20ms) p wird runtergezählt (p=50 = eine sekunde)
    }
    
    
    int main(void)
    {
    	DDRB = (1<<PB4)|(1<<PB1); // Servoausgang
    
    
    	TCCR0A = (0 << WGM00) | (1 << WGM01); // CTC-Mode
    	TCCR0A |= (0 << COM0A0) | (0 << COM0A1); // ohne OCR-Pin
    	TCCR0B = (0 << CS02) | (0 << CS01) | (1 << CS00); // kein prescaler!
    	TIMSK0 = (1 << OCIE0A); // Interrupt ein
    	OCR0A = 96; // 100kHz 1200000/12
    	sei();
    
    
    	y=150; 
    
    
    	while(1)
    	{
    	p=13;
    	c=0;
    	 	while(p > 0) {
    		a = PINB;
    		a = a & 0x08;
    		if (a !=0){
    			c++;}
    		else{
    			c=c+0;}
           				}
    	   	if (c > 13) {  // 50 impulse pro sekunde angestrebt
    	   		y--;}
    		else if (c==13) {
    			y=y+0;}
    		else {
    			y++;}
    		
    	}
    	return(0);
    }
    Hier einmal mein Versuch... egal wieviel Hertz ich an den Eingang anlege, der Servo läuft immer gaaanz langsam runter in seine Nullstellung... verändern der C-Variable ändert auch nichts...

Ähnliche Themen

  1. Asuro Steuerung für Dieselmotor
    Von erik1563 im Forum Asuro
    Antworten: 11
    Letzter Beitrag: 01.09.2011, 12:28
  2. Atmel Tiny- Taster Problem
    Von Sepperli im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 07.11.2010, 22:33
  3. Atmel Controller 162
    Von CodeX im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 02.08.2006, 17:12
  4. USB Controller von Atmel
    Von PasstScho im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 11.09.2005, 13:35
  5. Woher bekomme ich einen Atmel Controller???
    Von Superhirn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 26.03.2005, 19:39

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      fchao-Sinus-Wechselrichter AliExpress