PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frequenz zu klein ATMega16 Bascom



waldi
11.10.2004, 21:26
Hallo.
Habe in Bascom folgendes Prog geschrieben:

$regfile = "M16DEF.dat"
$crystal = 16000000

Config Portc = Output

Do
Set Portc.0
Reset Portc.0
Loop

End

Der Controller läuft auf einem STK500 Board mit 16MHz. Theoretisch sollte die Frequenz am Portc.0 max. 16MHz betragen. Berücksichtigt man jedoch, daß die Do-Loop-Schleife einiges an Rechenzeit benötigt (in ASM würde ich mit ca. 4 Taktzyklen rechnen?), so bliebe immer noch eine Frequenz von etwa 2-4MHz übrig. Liege ich da etwa soooo falsch? Interessant wäre eine Aufstellung der benötigten Taktzyklen der Bascombefehle. Ich erhielt nämlich lediglich eine Ausgangsfrequenz von etwa 500kHz... (abgesehen davon, daß das Tastverhältnis alles andere als 50% betrug). Für die Aufgabe, die ich dem ATMega16 geben möchte, eine Lageregelung, reicht das leider nicht aus, da "zwischendurch" ein PID-Algorithmus und eine ADC beackert werden muß.

Flite
11.10.2004, 22:21
Evtl. kannst du die Frequenz über den Timer1 erzeugen. Den Pin OCA1 kannst du per Hardware taktgenau toggeln lassen. Da bruachst du dann keinen einzigen Befehl dafür. Ob das allerdings weit über 500kHz raus geht kann ich dir leider nicht sagen.

Ich habe das genuzt für eine Ansteuerung von RFID Chips (als ich noch bei Atmel gearbeitet habe). Allerdings war hier die benötigte Frequenz 125 kHz (nebenher noch allerlei Zugriffe auf externes SRAM und EEPROM). Controller war der Mega8515 mit C programmiert (auch mit 16MHz).

Vielleicht kannst du die Frequenz auch mit einem externen Oszillator erzeugen. Wenn sie in der Frequenz variabel sein muss, kannst du einen VCO (Voltage Controlled Oscillator) verwenden.

Viele Grüße
Flite

Gottfreak
11.10.2004, 23:51
Die Lage von was willst du denn so schnell regeln?


in ASM würde ich mit ca. 4 Taktzyklen rechnen?

ASM würde sich für solche Zeitkritischen Sachen auch anbieten.



abgesehen davon, daß das Tastverhältnis alles andere als 50% betrug

Das sollte ja nun nicht überraschen: Der Schleifenkram läuft ja komplett ab während der Ausgang nicht gesetzt ist.

waldi
13.10.2004, 12:10
Es geht um die Lage eines Balkens (Aluprofil), der mittels Propeller in vorgegebener Lage schweben soll (natürlich an einem Punkt gelagert). Mit dem o.g. Prog wollte ich auch nur herausfinden, wieviele Taktzyklen z.B. eine Do Loop Anweisung benötigt. Hab mittlerweile die interne PWM des ATMega getestet. Funktionert sehr gut. Falls der PID zusammen mit dem ADC zulange braucht (möchte etwa mit 1kHz abtasten), werd ich wohl um ASM nicht herum kommen...
Wenn mir jetzt noch jemand sagen kann, wie die Anweisung
Tccr1b = Tccr1b Or &H01
hinter
Compare1a = 0
Compare1b = W
zu verstehen ist, währe ich fast glücklich. Hat was mit dem Prescaler zu tun. Soweit klar, aber warum finde ich diesen Parameter nicht in der Bascomhilfe...? Wie dort beschrieben gehts auch ohne, aber nicht bei mir...
Vielen Dank für eure Hilfe!

Gottfreak
13.10.2004, 14:32
Die Anweisung setzt Bit0 in Tccr1b(und lässt die anderen wie sie sind).
Das stellt(gemäß der Tabelle auf S. 112 im Datenblatt des Mega16) den Prescaler auf 1(In der Voreinstellung istder Timer angehalten.).