Forum: Mikrocontroller und Digitale Elektronik Im Rausch der Geschwindigkeit läufts nimmer so rund


von Santiago m. H. (mausschubser)


Angehängte Dateien:

Lesenswert?

Hallo,

habe mich endlich an die Fussel-Geschichte getraut und mein erster mega 
läuft inzwischen mit externem Kwarz (20 MHz).

Grund für den (für mich) großen Schritt war der, dass ich mich gerade 
mit PWM beschäftige und um bei den anzupeilenden 20 kHz noch etwas Luft 
für ein paar Anweisungen in der Interrupt-Routine zu haben, hielt ich 
den internen Takt nimmer für adäquat.

So weit so gut - manche meiner Timer-Berechnungen klappen auch, nur habe 
ich jetzt das Problem, dass der Drehencoder nimmer klappt und bei den 
Tastern von Pollins Evalboard wird nach 3-4 Tastendrucken ein Reset 
ausgelöst.
Insbesondere letzteres finde ich suboptimal :(

Ich könnte mir allerdings vorstellen, dass alles nur eine Frage des 
richtigen Timings ist (und hoffe mal, dass es nicht an der Hardware 
liegt).
Deshalb die Frage an die, die sich damit auskennen: in welchen 
Zyklen/Zeiten wäre die Taster- bzw. Encoder-Abfrage denn 
sinnvoll/richtig?

Falls jemand Lust hat, ein Codereview zu machen - ich hänge mal den 
Stand meines Proggies an (duht no nex gscheits). Vielleicht habe ich ja 
auch einen ganz anderen Bock geschossen ...

von Santiago m. H. (mausschubser)


Lesenswert?

Hallo,

kleines update: also den Encoder habe ich wieder hinbekommen. Das war in 
der Tat ein Timing-Problem.

Der Reset bei Tastendruck auf die Onboard-Taster des Evalboardes vom 
bayrischen Resteverwerter bleibt bestehen. Vielleicht ist es ja doch ein 
HW-Problem. Der Encoder hat ja auch einen Taster - und der wird genauso 
abgefragt und macht keine Probleme.

Falls jemand noch eine Idee hat, warum die Taster einen Reset auslösen 
können, würde mich das sehr interessieren, damit ich nicht den gleichen 
Fehler bei meinen Platinen mache.

von Der M. (steinadler)


Lesenswert?

Schau doch mal, ob du die nicht verwendeten Pins auf ein definiertes 
Potential gelegt hast.
Hast du evtl. RESET als Portpin definiert (Über Fuses)?
Ist dein ATMEGA überhaupt für so eine Hohe Frequenz ausgelegt?

von Peter D. (peda)


Lesenswert?

Santiago m. H. wrote:
> Falls jemand noch eine Idee hat, warum die Taster einen Reset auslösen
> können, würde mich das sehr interessieren, damit ich nicht den gleichen
> Fehler bei meinen Platinen mache.

Mögliche Resetursachen:

- Du benutzt den Watchdog, was man während der Entwicklung auf keinen 
Fall, nie und nimmer tun sollte.

- Dein Netzteil hat zu wenig Bums und die VCC bricht ein.

- Du benutzt AVR-GCC und hast einen Interrupt ohne Handler enabled.
Setze einen BAD_ISR Handler auf, um das festzustellen.


Peter

von Lupin (Gast)


Lesenswert?

Setz mal das CKOPT fuse um, dann sollte es gehen.

von Santiago m. H. (mausschubser)


Lesenswert?

Hallo zusammen,

danke für Eure Aufmerksamkeit.

> Schau doch mal, ob du die nicht verwendeten Pins auf ein definiertes
> Potential gelegt hast.

Das brauche ich nicht schauen - ist nicht der Fall.
Alle Pins sind auf den Verbindungsstecker geroutet, aber dort ist dann 
Schluss.

> Hast du evtl. RESET als Portpin definiert (Über Fuses)?

Nein, ich verwende ISP (STK200-Klon)

> Ist dein ATMEGA überhaupt für so eine Hohe Frequenz ausgelegt?

Yepp, ist ein ATmega88-20

> - Du benutzt den Watchdog, was man während der Entwicklung auf keinen
> Fall, nie und nimmer tun sollte.

Hm, wissentlich nicht.
Habe schon darüber gelesen, dass das nicht sehr professionell ist - ist 
also keine Option für mir.

> - Dein Netzteil hat zu wenig Bums und die VCC bricht ein.

Das klingt rel. überzeugend - obwohl, der mega mit 2-3 LEDs und LCD 
braucht doch keine 800 mA?!?
Andererseits, wer weiß, wie viel über das Pollin-Teil verdampft ...

> - Du benutzt AVR-GCC und hast einen Interrupt ohne Handler enabled.
> Setze einen BAD_ISR Handler auf, um das festzustellen.

auch wenn es nicht der Fall sein sollte - danke für den Tip.
Werde ich mich mal schlau machen an der Ecke und dann umsetzen.

> Setz mal das CKOPT fuse um, dann sollte es gehen.

Zum Einen hat mein Kleiner so einen Fussel nicht, zum Anderen werde ich 
an der Ecke mit Sicherheit nix ändern, ohne nachvollziehbare 
Informationen zu haben.

Inzwischen bin ich einige Erfahrungen reicher:
Der Reset ist unabhängig von meiner Firmware.
Ich habe das ganze auf einen mega16 (dann mit 16 MHz) portiert, weil ich 
für den eine selbstgebaute Testplatine habe. Dort tritt der Effekt nicht 
auf.
Gut - ist ein anderes Netzteil, also nicht wirklich vergleichbar.

Da ich auf meinem Testboard nur einen (high-aktiven) Taster habe, habe 
ich die anderen Taster auskommentiert (nicht angeschlossene Taster 
wurden als gedrückt erkannt).

Die portierte Firmware auf dem mega88 aufgespielt, bringt das Board zum 
Reset bei einem Taster, der garnicht mehr abgefragt wird. Könnte also am 
Netzteil liegen. Seltsam, bei internem Systemtakt (1 und 8 MHz) hat es 
keine Rolle gespielt.

Was noch seltsamer ist, am mega16 funktioniert das LCD nimmer. Dabei 
habe ich extra die Funktionen von util/delay.h genommen, um portabel zu 
sein.
Ich verwende die 3Pin-Variante mit 164er SR.
Um auszuschließen, dass es ein Berechnungsfehler bei der Frequenz ist, 
habe ich dem mega88 auch mal eine 16MHz Firmware verpasst - läuft 
problemlos.

Gut, anfangs hatte ich Probleme mit den Timern beim mega16 - der Chip 
scheint doch etwas betagter zu sein, als der mega88er. So gibt es kein 
PWM mit OCRx als Top-Limit. Für den CTC-Modus hatte ich dann die 
falschen Interrupts ...
... aber der LCD-Code läuft ja ganz ohne Interrupts ...

Für Nachhilfe wäre ich sehr dankbar.

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.