Timer Berechnungsfrage

Hallo,

innerhalb der ISR rufst du motor1() auf (ich habe es nicht gestestet, aber das müsste alle 5ms passieren).

motor1() toggelt alle 5ms 100x den logischen Zustand des Pins PortB.1. Dieses dauert etwa 20us, da du noch geradzahlig toggelst, entspricht der logische Zustand des Pins nach der Ausführung von motor1() dem Zustand vor Aufruf der Routine.

Man müsste nun wissen, was du genau vorhast. Möchtest du erst einmal testen, ob der Interrupt alle 5ms auftritt? Wenn ja, hast du ein Oszilloskop?

Grüße,
Dirk
 
ich möchte erstmals Schittmotor 10000 (nur beispiel) zu drehen..Frequenz soll 200 Hz (periodendauer 5 ms).
Meine geschriebene Programm ist etwas falsch. Ich will nicht jeden Schritt ein Takt.wenn TCNT1=OCRA dann Interrupt auslöst.ich habe das Programm simuliert aber es hat nicht richtig gearbeitet? Im Simulasyon Fenster schreibt Frequenz= 4 Mhz? ich habe diesen Wert geaendert aber immer 4 Mhz schreibt?
 
Hallo
ich habe ein Osiloskop und mein Program schon testet aber bekomme ich keine Pulse:(
und PB1 ist immer Null...
Code:
#include <avr\io.h>
#include <inttypes.h>
#include <avr\interrupt.h>
#include <util/delay.h>

int i=0;	//schrittanzahl

void InitPorts()
{
 	DDRB |= (1<<PB1) | (1<<PB2);   //PB1 PB2 Ausgang

}
void InitTimer1(void)		//timer initialisierung
{
	TIFR1 |= (1<<OCF1A);
	TIMSK1 |=(1<<OCIE1A);
	OCR1A = 1440;
	TCNT1 =0;
	TCCR1B |=(1<<WGM12) | (1<<CS11) | (1<<CS10);	//64
}
ISR (TIMER1_COMPA_vect)
{			
 motor1();
}

void motor1()
{	
	while(i<200)
	{
	PORTB^= (1<<PB1);
	i++;
	}
}
int main()
{
sei();
InitPorts();
InitTimer1();
do{}
while(1);
}
 
Hallo,

ich gehe erst einmal davon aus, dass der Timer und der Interrupt richtig initialisiert sind.

Die Interruptroutine wir alle 5ms aufgerufen:
Code:
ISR (TIMER1_COMPA_vect)
{            
 motor1();
}
Du schaltets mit der Routine InitPorts() den Portpin PB1 als Ausgang, da das Data-Register vom PortB nach dem Reset 0x00 ist, ist der Pin PB1 auf low.

In der Interruptroutine wird dann die Routine motor1() aufgerufen, i ist mit 0x00 initialisiert. Beim ersten Aufruf der Interruptroutine wird motor1() aufgerufen. In motor1() toggelst du 200 mal (geradzahlig!) PB1, so dass nach der Schleife der Portzustand wieder auf low ist.

Überprüfe erst einmal, ob die Interruptserviceroutine alle 5ms aufgerufen wird. Toggel PB1 direkt in der Interruptroutine, du müsstest dann an PB1 ein Rechtecksignal mit 10ms Periodendauer messen.

Gruss,
Dirk
 
Hast du schon:
ISR (TIMER1_COMPA_vect)
{
motor1();
}
mit:
ISR (TIMER1_COMPA_vect)
{
PORTB^= (1<<PB1);
}
ersetzt?

Ansonsten fällt mir keine andere Fehlerquelle ein
 
Hallo mktrspalte,

kannst du uns denn den letzten Stand deines Programms nocheinmal in einem Beitrag zur Verfügung stellen. Ich würde mir das nochmal genauer ankucken und auch auf meinem Entwicklungsboard überprüfen.

Gruss,
Dirk
 
Hallo Dirk
ich entschuldige mich, ich konnte spaet antworten.. ich hatte seit einer Woche ich Treiberkarteprobleme.jetzt funktioniert meine Code.hab ich Osiloskop schon gesehen.aber ich habe noch nicht mit meiner Treiberkarte probiert.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)