Atmega32 Timer

Gast #3797339
Lesenswert?

Hallo!
Leider stehe ich grade auf dem Schlach und hoffe ihr könnt mir helden.

Ich wollte eine Frequenz zwischen 1Khz und 10Khz auslesen.
Nach jedem Flankenwechsel(Low>High) soll ein Signal zeitversetzt 
(natürlich äquivalent zur Frequenz) am Ausgang ausgegeben werden.
Ab ca 2Khz soll sich die Zeitverzögerung zur Ausgabe verkürzen (zb statt 
"warte" 20ms nur noch 10ms).

Meine frage: ist dies überhaupt möglich mit dem Atmega32, und mit 
welcher Funktion realisiere ich das am besten?Timer?

Eine Frage hätte ich noch: wie lange dauert ein normaler Befehl im 
Controller (zb Portausgabe).

Programmiert wird in AVR mit C.

MFG
(Firma: Vescomp) #3797536
Lesenswert?

peter schrieb:
> Meine frage: ist dies überhaupt möglich mit dem Atmega32, und mit
> welcher Funktion realisiere ich das am besten?Timer?


 Warum soll das nicht möglich sein ?
 Ob du das Ganze auch us genau (und in richtiger Reihenfolge, LOL )
 wieder ausgeben kannst, ist eine andere Frage.

peter schrieb:
> Eine Frage hätte ich noch: wie lange dauert ein normaler Befehl im
> Controller (zb Portausgabe).

 Genau einen Takt.
#3797567
Lesenswert?

Amateur schrieb:
> Viele Standartbefehle dauern 1 Takt.
>
> Ob sich diese Geschwindigkeit allerdings in "C" erreichen lässt ist
> fraglich.


Ein
1
    PORTB |= ( 1 << PC0 );

dauert auch nicht länger als ein
1
    SBI  PORTB, 0


vor allem deswegen, weil der gcc aus der C Form genau diese Anweisung 
erzeugt.

Immer dieses Märchen, dass C Code signifkant langsamer als Assembler 
wäre. In Ausnahmefällen mag das schon stimmen, aber in mehr als 90% 
aller Programme spielt der vom Compiler erzeugte etwas langsamere Code 
(der nicht mehr als ein paar Prozentpunkte im unteren einstelligen 
Prozentbereich langsamer ist) überhaupt keine Rolle. Wer Videosignale 
erzeugen muss, muss im Timer Interrupt auf jeden Taktzyklus achten - 
stimmt schon. Aber wieviele von uns machen so etwas?


PS: "Standart" versus "Standard"
Gast #3797579
Lesenswert?

Wobei ich mich immernoch frage warum
1
TCCR0A |= (1<<WGM01);          // CTC
2
      ba:  84 b5         in  r24, 0x24  ; 36
3
      bc:  82 60         ori  r24, 0x02  ; 2
4
      be:  84 bd         out  0x24, r24  ; 36
5

6
PORTA |= (1<<PA4);
7
      d4:  14 9a         sbi  0x02, 4  ; 2

unterschiedlich kompiliert werden.


Ingo
(Firma: Vescomp) #3797590
Lesenswert?

Karl Heinz schrieb:
> Immer dieses Märchen, dass C Code signifkant langsamer als Assembler
> wäre. In Ausnahmefällen mag das schon stimmen, aber in mehr als 90%
> aller Programme spielt der vom Compiler erzeugte etwas langsamere Code
> (der nicht mehr als ein paar Prozentpunkte im unteren einstelligen
> Prozentbereich langsamer ist) überhaupt keine Rolle. Wer Videosignale

 Ich bin bestimmt kein C-Liebhaber, muss dem aber zustimmen.
 Paar Sachen bezüglich schnellem Zugrif, Manipulation etc. habe ich
 gerade aus disassemblierten Code gelernt.
 Und wer so auf Geschwindigkeit fixiert ist, benutzt Assembler oder
 schreibt sich die paar zeitkritischen Funktionen selbst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren