www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Atmega 32 austauschen?


Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Spotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und Floating Point Berechnungen

Autor: Speedy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Divisionen sind auch ganz böse Fallen!

Autor: Chris L. (kingkernel)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Also viel zu optimieren gibt es da nicht.

Der nachfolgende Text lässt das Gegenteil vermuten.

MfG Spess

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Blackbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

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

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian (Gast)
Datum:

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

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.