- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: AtMega32 mit Timer0 Servo ansteuern, nur wie?

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    31.03.2008
    Beiträge
    10
    Anzeige

    Praxistest und DIY Projekte
    Ja, der Code oben stimmt nicht mehr ganz, hier der Versuch, nur den Port so kurz wie möglich auf High zu schalten

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    ISR(TIMER0_OVF_vect)
    {
    TCNT0 = 176;
    PORTD =0x40;               // PORTD6 auf High setzen
    PORTD =0x00;               // PORTD auf Low setzen
    }
    
    int main ()
    {
    DDRD=0xff;                      // PORTD6 auf Ausgang
    PORTD =0x00;                  // PORTD vorsichtshalber mal auf Low gesetzt
    
    TCCR0 |= (1<<CS00);
    TCNT0 = 176;
    TIMSK |= (1<<TOIE0);
    
    sei();
    
       do
       {
    
       
       }
       while (1);
    
    }
    Nur bleibt der Port halt wie gesagt für ca. 9mS High, und da ich bis jetzt noch nie ein Signal selbst erzeugen wollte, weiß ich nicht ob das jetzt normal ist, sprich das Umschalten der Ports wirklich so lange dauert, oder ob ich hier einfach etwas übersehen habe.
    Weil bei "längeren" Signalen gehts ja, nur nicht unter 9mS, was ich halt seltsam finde, da ich denke am Umschalten kanns doch nicht liegen, eine PWM z.B. kann den Port ja auch so schnell schalten, nur auf meine manuelle Art klappt es einfach nicht.

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.10.2006
    Ort
    Saarland
    Beiträge
    390
    Dein Programm funktioniert bei mir. Atmel defekt?

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Hallo,

    kannst du an einen anderen PORT eine LED anschließen, die du gleich am Anfang der Main über ein High Signal einschaltest? Nur einschalten, nichts anderes, der Rest des Programms und der weitere Aufbau bleiben wie sie sind. Jetzt beobachte an der LED mit dem Oszi das Signal. Ohne den Schaltplan zu kennen, mich beschleicht der Gedanke nach einem Reset, ausgelöst durch ein Hardwareproblem.

    Gruß

    Jens

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    31.03.2008
    Beiträge
    10
    So, jetzt hab ichs hinbekommen, ich habe zwar keine Ahnung warum es jetzt funktioniert aber es geht auf einmal nach mehrmaligem brennen.

    Ich habe langsam den Verdacht das mein PC der Übeltäter ist...

    Also Danke für euren ganzen Tipps, damit kann ich jetzt schonmal das STK500 + AVR als Fehlerquelle ausschließen

    Jetzt für alle die Interessiert sind, hiermit bekomme ich ein ca. 1mS High + 19mS Low

    Code:
    #define F_CPU 8000000L
    #include <avr/io.h>
    #include <avr/interrupt.h>
    volatile int time=0;
    
    ISR(TIMER0_OVF_vect)
    {
    TCNT0 = 176;
    	time++;
    	if (time<=80)
    	{
    		PORTD =0x40;               // PORTD6 auf High setzen
    	}
    	
    	if (time>=80 && time<=1600)
    	{
    		PORTD=0x00;
    	}
        if(time>=1600)
    	{
    		time=0;
    	}        
    }
    
    int main ()
    {
    DDRD=0xff;                      // PORTD6 auf Ausgang
    
    TCCR0 |= (1<<CS00);		
    TCNT0 = 176;
    TIMSK |= (1<<TOIE0);
    
    sei();
       do
       { 
       }
       while (1);
    }

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.10.2006
    Ort
    Saarland
    Beiträge
    390
    OK. aber da ändert sich nichts
    PORTC0 ist 1 , auf PORTD6 sind kurze Impulse

    ---------------

    #include <avr/io.h>
    #include <avr/interrupt.h>

    ISR(TIMER0_OVF_vect)
    {
    TCNT0 = 176;
    PORTD =0x40; // PORTD6 auf High setzen
    PORTD =0x00; // PORTD auf Low setzen
    }

    int main ()
    {
    DDRD=0xff; // PORTD6 auf Ausgang
    PORTD =0x00; // PORTD vorsichtshalber mal auf Low gesetzt

    TCCR0 |= (1<<CS00);
    TCNT0 = 176;
    TIMSK |= (1<<TOIE0);

    DDRC =1; //so?
    PORTC =1;


    sei();

    do
    {


    }
    while (1);

    }

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Hallo,

    wenn der Controller sich ständig resetet hätte, würde man das an dem Signal der LED erkennen können. Aber nun geht es ja.

    Gruß

    Jens

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.10.2006
    Ort
    Saarland
    Beiträge
    390
    gut.
    Und nun such mal den Fehler in deinem alten Programm, sonst hast du nichts dazu gelernt, sondern nur rumprobiert.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen