Hi, ich brauche bei meiner Mikrocontrolleranwendung eine höhere Geschwindigkeit. als sie der jetzige Controller liefern kann. Funktioniert ein Programm das für den Atmega 32L geschrieben ist auch für den Atmega 644-20 PU? Die Pinbelegung scheint ja die selbe zu sein. Gibt es bestimmte Befehle die von dem 644er nicht erkannt werden? Mich irritiert das der 644 billiger(6€ statt 8€) ist als der 32L obwohl er in jedem Aspekt besser zu sein scheint. Was ist da also der Haken? Danke schonmal
Zeig doch mal ein bischen was. Wenn dein Mega32 mit 16Mhz das Programm nicht in der Zeit stemmt, stehen die Chancen gut, dass es ein 644 mit 20Mhz auch nicht schaffen wird. Ehe man da jetzt den Teufel mit dem Belzebub austreibt sollte man doch erst mal nachsehen, ob man nicht am bestehenden System etwas drehen kann, so dass man wieder mit genügend Zeitreserve arbeiten kann.
Karl heinz Buchegger schrieb: > Ehe man da jetzt den Teufel mit dem Belzebub austreibt sollte man doch > erst mal nachsehen, ob man nicht am bestehenden System etwas drehen > kann, so dass man wieder mit genügend Zeitreserve arbeiten kann. Sehe ich im Prinzip auch so, aber 25% mehr Rechenleistung sind auch nicht ohne und könnten das Problem mühelos entschärfen.
Spotti schrieb: > Sehe ich im Prinzip auch so, aber 25% mehr Rechenleistung sind auch > nicht ohne und könnten das Problem mühelos entschärfen. Meine Erfahrung ist genau entgegengesetzt. Wenn der Programmablauf ungünstig geplant ist, reißen selbst 100% mehr CPU-Takt absolut garnichts raus. Du mußt den Flaschenhals suchen und entschärfen. Beliebte Fallgruben sind: - große Delays (>100µs) - Routinen unnötig oft ausführen. Peter
Und die Register heißen anders. Zumindest ist ein 32-Programm nicht ohne weiteres für 644 Compilierbar. Ob die Registeradressen sich von einander unterscheiden, kann ich allerdings nicht sagen! Des weiteren hast du jetzt deine kompletten Timings für 16Mhz ausgelegt, dassmüsstest du alles ändern!
Moin, danke schonmal für die schnellen Antworten. Also viel zu optimieren gibt es da nicht. Ich muss gelegentlich ein paar Knöpfe abfragen. Diese sind Hardwareseitig entprellt, womit sich die Abfrage auf ein simples auslesen des Registers beschränkt. Insofern einer der 6-Knöpfe gedrückt wurde wird der jeweilige Knopf in eine Variable geschrieben, die dann den Programmablauf ändert. Weiterhin zählt ein counter mit, damit ein gedrückter Knopf nur ca. alle 500ms um eine Einheit hochzählt. Das ganze dauert 3µs(Oszimessung) also ca. 24 Prozessorschritte (Der 32L läuft mit 8Mhz) Weiterhin läuft der Timer0 im CTC-Modus der bei compare-match einen 16-Bit counter hochzählt. Wenn ich nun den Prescaler nicht zumindest auf 64 Stelle, pfuscht mir der Interrupt vom Timer dazwischen wenn OCR0 auf niedrigen Werten steht (Was von extern vorgegeben wird, nicht änderbar). Das Polling der Knöpfe in 8 Prozessorschritten unterzubringen kann ich mir nicht vorstellen. Somit ergibt sich für die maximale Frequenz vom Timer0 62500Hz. Ich brauche aber 150kHz. Ein Atmega 32 käme auf 125kHz, ein 20Mhz-Prozessor auf 156 kHz. In diesem fall würde der schnellere Prozessor also astrein mein Problem lösen. Wenn ich ein paar Register umbennennen muss ist das ja kein Akt, aber wenn jede einzelne Funktion ändern muss wärs doch unschön.
Hi
>Also viel zu optimieren gibt es da nicht.
Der nachfolgende Text lässt das Gegenteil vermuten.
MfG Spess
Fabian schrieb: > Das Polling der Knöpfe in 8 Prozessorschritten unterzubringen kann ich > mir nicht vorstellen. versteht ich nicht, es sind doch nur Taster, das reicht wenn man sie 10 mal in der Sekunde Abfragt. Warum sollte man es in 8 schritten machen?
Peter schrieb: > Fabian schrieb: >> Das Polling der Knöpfe in 8 Prozessorschritten unterzubringen kann ich >> mir nicht vorstellen. > versteht ich nicht, es sind doch nur Taster, das reicht wenn man sie 10 > mal in der Sekunde Abfragt. Warum sollte man es in 8 schritten machen? Ich vermute mal, dass es sich nicht um Knpöfe im egtl. Sinn handelt, richtig? Denn es muss dem TO ja selbst bewusst sein, dass kein Mensch Knöpfe/Taster mit 150kHz betätigen kann.
Doch, sie sind ja Hardware-Entprellt. Und das dauert ein paar Millisekunden bei JEDEM "Knopf". Die anderen Aufgaben hören sich simpel an. Sieht so aus, wie Entprellroutine im Interrupt. Ohne Code vom Threadstarter wird da nix. Blackbird.
Fabian schrieb: > Somit ergibt sich für die maximale Frequenz vom Timer0 62500Hz. Ich > brauche aber 150kHz. Ein Atmega 32 käme auf 125kHz, ein 20Mhz-Prozessor > auf 156 kHz. Bei 5V und Zimmertempeartur sollte auch die meisten ATMEGA32L mit 20MHz laufen können. Dann kann man ja schon einmal schauen, ob das die Probleme löst oder nicht. Atmel hat (damals) gar nicht unterschiedliche Mikrocontroller gefertigt, nur je nachdem eher auf niedrige Spannung oder hohe Frequenz geprüft. Ein ATMEGA32 und ein ATMEGA32L kommen also unter Umständen von demselben Wafer. Und 25% Overclocking sind bei Zimmertemperatur normalerweise auch kein Problem. Andererseits wäre für eine ATMEGA644 bei 3,3V lt. Datenblatt genau genommen auch schon bei 12MHz Schluss. Gruß, DetlevT
Fabian schrieb: > Ich muss gelegentlich ein paar Knöpfe abfragen. Diese sind > Hardwareseitig entprellt, womit sich die Abfrage auf ein simples > auslesen des Registers beschränkt. Da es gelegentlich ist, spart die HW-Entprellung nur <0,1% CPU-Last ein, also eigentlich 0,nix. Fabian schrieb: > Das Polling der Knöpfe in 8 Prozessorschritten unterzubringen kann ich > mir nicht vorstellen. Wozu? Die Tastenabfrage macht man natürlich in der Mainloop. Dann hast Du alle Zeit der Welt dafür und der Interrupt wird nicht gestört. Fabian schrieb: > Somit ergibt sich für die maximale Frequenz vom Timer0 62500Hz. Ich > brauche aber 150kHz. Von Deiner Beschreibung kriegt man ja Knoten im Kopf. Beschreib besser mal die Funktion. Was soll denn mit den 150kHz geschehen? 150kHz bei 15MHz sind 100 Zyklen, da kann man schon einiges im Interrupt machen. Peter
Verblüffend das absolut niemand die eigentliche Frage beantwortet. Das mit den 20MHz am ATMEGA32 hat aber geklappt. Danke Detlev.
Wiso du hast doch eine Antwort bekommen: Christian L. schrieb: > Und die Register heißen anders. Zumindest ist ein 32-Programm nicht ohne > weiteres für 644 Compilierbar. Ob die Registeradressen sich von einander > unterscheiden, kann ich allerdings nicht sagen! > Des weiteren hast du jetzt deine kompletten Timings für 16Mhz ausgelegt, > dassmüsstest du alles ändern!
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.