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
Na klar ist das möglich aber irgendwie fehlen die Grundlagen. Mit den externen Ints und den Timern wäre ein Ansatz....
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.
:
Bearbeitet durch User
Viele Standartbefehle dauern 1 Takt. Ob sich diese Geschwindigkeit allerdings in "C" erreichen lässt ist fraglich.
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"
:
Bearbeitet durch User
Amateur schrieb: > Viele Standartbefehle dauern 1 Takt. Mit "t" hat es bestimmt länger gedauert, auch wenn die SS gut gedrillt war...
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
Ok, sorry. Steht ja im DB das nur Register von 0x00 bis 0x1F direkt adressierbar sind :(
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.