-         

Ergebnis 1 bis 3 von 3

Thema: Timer "stummschalten" AVR Atmega 32L

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2010
    Beiträge
    10

    Timer "stummschalten" AVR Atmega 32L

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi,
    ich habe folgendes Problem/Lösungsansatz:
    Der Timer 1A und B sollen exact gleichzeitig schalten, dabei aber invers zueinander sein. Um das zu erreichen habe ich folgenden Code überlegt (Der funktioniert):
    Code:
    	
    OCR1A=0xFFFF;					//Set maximum limit 				
    	OCR1B=speed;				
    	TCCR1A=0b01010000;
    	TCCR1B=0b00001101;				//CTC mode running,toggle on match, prescaler 1024!!
    	while(TCNT1<=(speed+6)){}		//Wait till PD4 is High-level
    	TCNT1=0xFFF0;					//Set TCNT shortly before overflow
    	OCR1A=speed;					//Pd5 is high, PD4 low level. Set common toggle limit
    	TIFR |= (1<<OCF1A);			
    	TIMSK |= (1<<OCIE1A);			//Enable Interrupt for counting
    	DDRD |=(1<<PD4);			
    	DDRD |=(1<<PD5);
    Klappt soweit sehr schön, braucht aber einige µs um den Timer zu starten.
    Jetzt möchte ich den Timer für eine gewisse Zeit ausschalten während ein anderer Timer läuft. Die Pegel von OC1A und B sollen in dieser Zeit beide auf 0V sein.
    Das wiedereinschalten des Timers darf aber nicht mehr als 2µs, also ca 8 Takte dauern.
    Ich hatte mir nun überlegt, dass ich den Timer einfach Stummschalte, indem ich in ihn stoppe. Wenn ich nun die Ports auf normalbetrieb umschalte um sie beide auf Low zu setzten, laufen sie wenn man den Timer wieder startet paralell.
    Deshalb habe ich den Port statdessen als Eingang deklariert und will nun den 0-Pegel einfach mit hilfe eines anderen Ports erzeugen. Ich hab bereits probiert den Timer zu stoppen, als Eingang zu stetzen, wieder zu starten und als Ausgang zu deklarieren. Tut genau was es soll. Timer gibt kein Signal mehr aus und macht anschließend da weiter wo er aufgehört hat. Das ganze dauert auch nur 0,6µs, liegt also gut in der Zeit.
    Ich frage mich nun welchen Zustand hat ein Timer als Eingang hat? Kann ich einfach mit 2 anderen Ports die beiden Pins auf 0V ziehen? Ich würde noch einen 50k-widerstand dazwischen löten, damit nicht bei einem Programmfehler 4 Ports miteinander ringen.
    (Ich mach keinen Widerstand zur Masse, nachdem ich eventuell auch 5V an den Ports brauche).
    Ich kann hier grad keine Zeichung machen, wenn ich daheim bin mach ich noch eine falls das hier noch nicht klar ist.

    Danke schonmal

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Kann ich einfach mit 2 anderen Ports die beiden Pins auf 0V ziehen?
    Warum das?
    Wenn du in TCCR1A die Bits COM1A0/COM1B0 zurücksetzt (auf 0), dann sind OC1A/OC1B nicht mehr mit dem Timer verbunden, bleiben Ausgänge und können sofort auf 0 gesetzt werden.

    Oder verstehe ich dein Prob nicht???

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2010
    Beiträge
    10
    Danke, Das wars was ich brauchte..

Berechtigungen

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