Forum: Mikrocontroller und Digitale Elektronik AVR Atmega 32 austauschen?


von Fabian (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Spotti (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Weingut P. (weinbauer)


Lesenswert?

und Floating Point Berechnungen

von Speedy (Gast)


Lesenswert?

Divisionen sind auch ganz böse Fallen!

von Chris L. (kingkernel)


Lesenswert?

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!

von Fabian (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>Also viel zu optimieren gibt es da nicht.

Der nachfolgende Text lässt das Gegenteil vermuten.

MfG Spess

von Peter (Gast)


Lesenswert?

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?

von Micha (Gast)


Lesenswert?

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.

von Blackbird (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

wir wissen ja noch nicht mal in welcher Sprache es progammiert ist.

von Detlev T. (detlevt)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Fabian (Gast)


Lesenswert?

Verblüffend das absolut niemand die eigentliche Frage beantwortet. Das 
mit den 20MHz am ATMEGA32 hat aber geklappt. Danke Detlev.

von Mike R. (thesealion)


Lesenswert?

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
Noch kein Account? Hier anmelden.