- LiTime Speicher und Akkus         
Ergebnis 1 bis 10 von 10

Thema: CTC - Pin toggeln nicht möglich?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2004
    Beiträge
    270

    CTC - Pin toggeln nicht möglich?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich will für eine Infrarotanwendung später 36khz am PB1 von einem M8 anliegen haben, im Moment soll lediglich eine LED blinken. Ich wollte das mit dem CTC von dem 8bit-Timer realisieren, aber es klappt nicht, hier mal der Code:

    Code:
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #include <avr/signal.h> 
    
    
    int main(void) 
    { 
     TCCR2 = 00011111;
     OCR2 = 250;
     DDRB = (1<<PB1);
    }
    Müsste eigentlich gehen oder? F_CPU ist 16Mhz.

    Gruss
    Spurius

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    Na ja, dein Programm läuft einmal durch, und was dann passiert, ist ungewiss. Du solltest es am Ende mit einer Endlosschleife anhalten.

    Schreib die Werte für die Register doch lieber mit den Einzelbits hin. Sonst sieht keiner, welche Bits da eigentlich gesetzt werden.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    gibt dein compiler da keine warnungen?
    int main sollte der vollständigkeit halber einen returnwert haben, den es de facto aber nie braucht, weil das programm vorher
    Code:
    for(;;);
    in einer endlosschleife bleibt, die bei dir aber nicht existiert. und zuletzt wird TCCR2 wahrscheinlich kein binärwert zugewiesen, sondern EDITktal 11111. ausserdem solltest du vielleicht besser die schreibweise
    Code:
    TCCR2 = (1<<registername) | ... ;
    verwenden, denn die wenigsten leute haben die bedeutung der einzelnen bits im kopf... man kann dir dann schneller helfen..

    gruesse

    EDIT: danke für den hinweis @sternst, habs korrigiert

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

    was passiert, wenn das Programm vom Controller abgearbeitet wurde?
    Du möchtest noch eine Endlosschleife wie z.B. while (1) {};einfügen.
    Nett währe es auch, die int main () mit einem return 0; abzuschließen.

    Was sagt der Compiler den hierzu? TCCR2 = 00011111;
    Du solltest die Compiler Warnungen ernst nehmen.
    Wenn du binär darstellen möchtest ist das 0b0001111;
    Besser im Sinne von Übersichtlicher empfinde ich die Schreibweise TCCR2 = (1<<COM20)|(1<<.....

    Gruß

    Jens

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von robocat
    und zuletzt wird TCCR2 wahrscheinlich kein binärwert zugewiesen, sondern dezimal 11111
    Nein, oktal 11111, nicht dezimal.

    Zitat Zitat von McJenso
    Was sagt der Compiler den hierzu? TCCR2 = 00011111;
    Warum sollte er dazu was sagen? Das ist eine stinknormale Zuweisung.
    MfG
    Stefan

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

    in der Annahme, dass sie nicht unterdrückt werden, wird es eine Warnung geben, da für TCCR2 einen 8Bit Wert erwartet wird und 11111 einfach den Rahmen sprengt.

    Gruß

    Jens

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2004
    Beiträge
    270
    Hier nochmal uebersichtlicher, geht allerdings auch so nicht :/
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    int main(void)
    {
    	TCCR2 = (1<<COM20) | (1<<WGM21) | (1<<CS22) | (1<<CS21) | (1<<CS20);
    	OCR2 = 250;
    	DDRB |= (1 << PB1);
    	while(1){};
    	//PORTB |= (1<<PB1);
    }
    [/code]

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

    du nutzt Timer 2, dazu gehört PB3.

    Gruß

    Jens

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von McJenso
    in der Annahme, dass sie nicht unterdrückt werden, wird es eine Warnung geben, da für TCCR2 einen 8Bit Wert erwartet wird und 11111 einfach den Rahmen sprengt.
    Stimmt. Abgesehen davon, dass es nicht 11111 sind, sondern 4681, hast du Recht.
    MfG
    Stefan

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2004
    Beiträge
    270
    Hallo,
    danke... geht jetzt, Wald vor lauter Bäumen...

Berechtigungen

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

LiTime Speicher und Akkus