Forum: Mikrocontroller und Digitale Elektronik falsches Hochzählen - Verständnisfehler?


von gartler p. (Gast)


Lesenswert?

Guten tag.
erneute frage an die experten

ich habe schon einmal hier um hilfe gebeten wegen der timer auf meinem 
sainsmart mega board

also ich verwende in atmel studio 6.2 für den atmega 2560

ich habe folgende einstellungen gemacht, um eine reziproke 
frequenzmessung durchzuführen

EIMSK|=(1 <<INT3)|(1 <<INT5);
EICRA|=(1<<ISC31)|(1 <<ISC3);

(Schreibe die einstellungen nur pro interupt raus)

TCCR3B=0;
TCCR3B=(1<<CS30);
TIMSK3=(1 <<ICIE3)|(1 <<TOIE3);

um die flanken über den INT pin einzulesen, stelle ich die ISR so ein
ISR(INT_vect)
{...}

Jetzt is mir mal aufgefallen, dass bei frequenz 0 trotzdem immer wieder 
so werte von 0, xx angezeigt werden, statt einfach nur 0
Liegt das vl an der Berechnung mittels FLOAT?

ausserdem ist der zähler bereits bei 255 am ende, also doch nur 8 
bit....laut datenblatt ist er 16 bit gross

meine while schleife ist auch viel langsamer, als wenn ich mit 
torzeit-interrupt die INT pins einlese, es verringert sich die 
programmgeschwindigkeit auf 1/3

Ausserdem.. wenn ich die TIMSK auf input capture UND overflow stelle, 
welche pins spreche ich dann wirklich an?

habe noch ein display am controller hängen, klar, das bremst, aber das 
kann ich softwaremässig wegschalten

vielen dank schon mal

von Karl H. (kbuchegg)


Lesenswert?

gartler p. schrieb:

> Jetzt is mir mal aufgefallen, dass bei frequenz 0 trotzdem immer wieder
> so werte von 0, xx angezeigt werden, statt einfach nur 0
> Liegt das vl an der Berechnung mittels FLOAT?

Schau dir die Ausgangswerte an, mit denen du in die Berechnung 
reingehst, dann weisst du es. Es ist nicht verboten, sich während der 
Entwicklungsphase auch mal die Werte von Variablen ausgeben zu lassen, 
die im fertigen Programm der Benutzer nie zu Gesicht kriegen wird.

> ausserdem ist der zähler bereits bei 255 am ende, also doch nur 8
> bit....laut datenblatt ist er 16 bit gross

? Wenn dein Datenblatt sagt, dass er 16 Bit groß ist, dann ist der das 
auch.

> meine while schleife ist auch viel langsamer, als wenn ich mit
> torzeit-interrupt die INT pins einlese, es verringert sich die
> programmgeschwindigkeit auf 1/3

Tja. Was machst du dann in der Hauptschleife. VOn irgendwoher muss ja 
der Laufzeitzuwachs kommen.

> Ausserdem.. wenn ich die TIMSK auf input capture UND overflow stelle,
> welche pins spreche ich dann wirklich an?

Den Input Capture Pin (sofern ich die Frage richtig verstehe).

> habe noch ein display am controller hängen, klar, das bremst, aber das
> kann ich softwaremässig wegschalten

Was verstehst du unter 'wegschalten'. Was bremst, das sind Ausgaben aufs 
Display. Gibst du in der Hauptschleife ständig Werte aus, obwohl die 
bereits am Display stehen (weil sich der Wert in der Zwischenzeit gar 
nicht gändert hat), dann bremst das natürlich, auch wenn man am LCD 
nichts von der Ausgabe sieht.

von Oliver S. (oliverso)


Lesenswert?

gartler p. schrieb:
> (Schreibe die einstellungen nur pro interupt raus)

Hä?

gartler p. schrieb:
> Liegt das vl an der Berechnung mittels FLOAT?

Hä?

gartler p. schrieb:
> ausserdem ist der zähler bereits bei 255 am ende, also doch nur 8
> bit....laut datenblatt ist er 16 bit gross

Hä?

gartler p. schrieb:
> Ausserdem.. wenn ich die TIMSK auf input capture UND overflow stelle,
> welche pins spreche ich dann wirklich an?

Hä?

gartler p. schrieb:
> vielen dank schon mal

Keine Ursache ;)

Mal Klartext: Zeig deinen ganze Code. Deine Fragen sind nicht wirklich 
verständlich.

Oliver

von gartler p. (Gast)


Lesenswert?

@karlheinz..das mit dem anschauen der werte ist so ganz ok....hab 
gesagt, ich arbeite mit atmel studio....
sorry..verschrieben, da ich simultan noch was geschrieben hab
es ist die arduino software

kurzum: ich hab INT pins, die will ich so beschalten, dass bei sich 
ändernden Flanken etwas tut...nicht mehr

denn am board sind die icp nicht alle ausgeführt, das hilft mir nachher 
nix
ich kann nur die INT pins nehmen....

brauche eigentlich eh nur eine capture isr



zu oliver....so geistreich dein kommentar auch zu sein scheint..er ist 
es nicht...kommt nun auch n hä.

net böse sein, aber so schlecht formuliert war es nicht...ausser man hat 
kein vorstellungsvermögen und ist der deutschen sprache nicht allzu 
mächtig

ganzer code hätte etwa 600 zeilen...das erspar ich jedem

von Karl H. (kbuchegg)


Lesenswert?

gartler p. schrieb:

> das mit dem anschauen der werte ist so ganz ok....hab gesagt,
> ich arbeite mit atmel studio...
> sorry..verschrieben

Und? Gerade in der Arduino Umgebung ist es doch noch viel simpler 
Pipifax, sich mal zwischendurch ein paar Werte am PC ausgeben zu lassen.

> net böse sein, aber so schlecht formuliert war es nicht...ausser man hat
> kein vorstellungsvermögen

vorstellungsvermögen kriet man auf dieser Seite des Bildschirms, wenn 
man den Code sehen würde.

> ganzer code hätte etwa 600 zeilen...das erspar ich jedem

Lieb von dir.
Aber man kann auch komplette Demoprogramme machen, die lauffähig sind, 
das Problem zeigen und keine 600 Zeilen lang sind. Und stell dir mal 
vor. Es passiert gar nicht mal so selten, dass man im Zuge dieses 
Abspeckens das Problem selbst findet.

Arduino hin oder Atmel Studio her.

Ich bin raus. Wenn du nicht willst, dann eben nicht.

von Mendax (Gast)


Lesenswert?

"net böse sein, aber so schlecht formuliert war es nicht...ausser man 
hat
kein vorstellungsvermögen und ist der deutschen sprache nicht allzu
mächtig"

Keine Rechtschreibung - keine Hilfe.

von Udo S. (urschmitt)


Lesenswert?

Mendax schrieb:
> Keine Rechtschreibung - keine Hilfe.

Rechtschreibung ist eins, aber auch in der kreativen Wortwahl und den 
angefangenen aber nie beendeten Sätzen ergibt sich -zumindest für mich- 
erhebliches Interpretationspotential.

gartler p. schrieb:
> gesagt, ich arbeite mit atmel studio....
> sorry..verschrieben, da ich simultan noch was geschrieben hab
> es ist die arduino software

Darf ich das mal versuchen zu interpretieren? Du hast oben geschrieben 
du würdest Atmel Studio benutzen, hier willst du uns sagen es ist eine 
Arduino Entwicklungsumgebung?

Wenn dein 16Bit Timer nur bis 255 zählt, könnte das daran liegen, daß du 
nur das untere Byte anschaust?

von Register (Gast)


Lesenswert?

Dein EICRA|=(1<<ISC31)|(1 <<ISC3); sieht ein wenig komisch aus. Da fehlt 
eine 0.
Ich würde mal alle Register auf weitere Fehler kontrollieren.

von gartler p. (Gast)


Lesenswert?

Schade, dass der umgang untereinander hier so derb zu sein 
scheint...zumindest von manchen leuten

ich bedanke mich trotzdem für das engagement einiger personen


bei so viel profis hier frag ich mich, wozu es denn ein forum gibt, wenn 
man nur kleine, für laien schwer verwertbare, infobrocken serviert 
bekommt

ich für meinen teil bin raus, gott sei dank gibt es noch weitere 
möglichkeiten, als die dürftige ausbeute von mikrocontroller.net

byebye

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.