Forum: Mikrocontroller und Digitale Elektronik Atmega8 delays


von Patrick R. (patrick_r13)


Lesenswert?

Hallo zusammen,
leider gibt es keinen Infrarot Timer Remote für meine Kamera, deshalb 
wollte ich mir einfach sowas selber bauen. Dafür habe ich mir einen 
Atmega8 geleistet und das Signal mittels der delay Funktion 
nachgebildet. Jetzt hab ich aber das Problem das die gemessenen Zeiten 
am Port viel länger sind. Ich habe keinen externen Quarz angeschlossen 
und im AVR Studio auch schon mit den Fuses rumgemacht aber das hat auch 
nicht den gewünschten erfolg gebracht. Bestimmt könnt ihr mir 
weiterhelfen ;)
Danke im vorraus

es grüßt
der Patrick

von Cyclon (Gast)


Lesenswert?

Zufällig 8 mal so lang wie erwartet?

von Joachim .. (joachim_01)


Lesenswert?

Hmm. Eigentlich wird der CPU-Takt gleich in main in der (fast) ersten 
Zeile festgelegt, noch vor den Includes... sonst holt er sich nämlich 
einen vordefinierten.

Oder irgendwo anstatt durch 1024 durch tausend geteilt...?
Oder läuft' n zu langer Interrap? Das ist mir mal passiert.

von Patrick R. (patrick_r13)


Lesenswert?

Nein, deutlich länger. Ich habs mal auf nen Atmel 90USB1287 geflasht und 
da musste ich die Zeiten ca. mal 1/4 nehmen (4µs statt 12.5µs). Aber da 
hab ich es eher mit ausprobieren und nem ziemlich geilen Oszi 
hingekrigt.

von holger (Gast)


Lesenswert?

Optimierung beim Compiler eingeschaltet?

von Patrick R. (patrick_r13)


Lesenswert?

Welchen CPU_Takt muss ich den wählen, damit ich die zeit die ich 
eingegeben habe auch wirklich bekomme?

von Karl H. (kbuchegg)


Lesenswert?

Patrick R. schrieb:
> Welchen CPU_Takt muss ich den wählen, damit ich die zeit die ich
> eingegeben habe auch wirklich bekomme?

Den, mit dem die CPU auch wirklich läuft.

Wenn du nichts am µC verändert hast, sind das 1Mhz

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Joachim ... schrieb:
> Interrap

wasn das?

von Patrick R. (patrick_r13)


Lesenswert?

Aber 1Mhz sollte doch reichen um 12.5µs auszugeben oder?

von Patrick R. (patrick_r13)


Angehängte Dateien:

Lesenswert?

Hier hab ich mal den Quellcode

von Walter S. (avatar)


Lesenswert?

Patrick R. schrieb:
> Bestimmt könnt ihr mir
> weiterhelfen ;)

ich kann es mit so wenig Informationen jedenfalls nicht

von holger (Gast)


Lesenswert?

>Aber 1Mhz sollte doch reichen um 12.5µs auszugeben oder?

Wie soll denn die halbe Microsekunde zustande kommen
wenn ein Assembler Befehl schon eine ganze Microsekunde braucht?

von Walter S. (avatar)


Lesenswert?

deine Schleife verbraucht auch ein paar mikrosec,
und noch Mal:
welche Optimierung
wie sind die fuses

von Patrick R. (patrick_r13)


Lesenswert?

Walter S. schrieb:
> deine Schleife verbraucht auch ein paar mikrosec,
> und noch Mal:
> welche Optimierung
> wie sind die fuses

also Fuses:
-SPIEN
-BOOTSZ 1024W_0C00
-BODLEVEL 2V7
-SUT_CKSEL INTRCOSC_1MHZ_6CK_64ms

wo kann ich bei AVR Studio 5 die Compiler Optimierung ändern?

von Michael (Gast)


Lesenswert?

Patrick R. schrieb:
> Aber da hab ich es eher mit ausprobieren und nem ziemlich geilen Oszi
> hingekrigt.

Dann schreib doch erstmal ein paar Befehle in den ATmega8, die ohne 
Delays und irgendwelchen Schnick-Schnack einen Port-Pin einfach nur zum 
Wackeln bringen und miß mit deinem geile Oszi nach, ob das mit deinen 
Vorstellungen und denen des Simulator konform geht.

von Patrick R. (patrick_r13)


Lesenswert?

Michael schrieb:
> Dann schreib doch erstmal ein paar Befehle in den ATmega8, die ohne
> Delays und irgendwelchen Schnick-Schnack einen Port-Pin einfach nur zum
> Wackeln bringen und miß mit deinem geile Oszi nach, ob das mit deinen
> Vorstellungen und denen des Simulator konform geht.

Das Problem ist, das es nicht mein geiles Oszi ist und ich da nicht so 
oft ran komme.

von Patrick R. (patrick_r13)


Lesenswert?

Walter S. schrieb:
> deine Schleife verbraucht auch ein paar mikrosec,
> und noch Mal:
> welche Optimierung
> wie sind die fuses

optimierung ist none

von Walter S. (avatar)


Lesenswert?

hast du die Meldung vielleicht ignoriert?
Warning  1  #warning "Compiler optimizations disabled; functions from
<util/delay.h> won't work as designed"

von Karl H. (kbuchegg)


Lesenswert?

Dann hast du dein Problem gefunden.

von Der chaot (Gast)


Lesenswert?

also soweit ich weiss kannst du den CPU-Takt per SW nicht festlegen 
sondern nur per externen Quarz....wie man die ggf vorhandenen internen 
quarze einschalet....kp

wenn es anders sein sollte, will ich nichts gesagt haben.

von holger (Gast)


Lesenswert?

>wie man die ggf vorhandenen internen
>quarze einschalet

Ich hab jetzt schon hunderte von uC aufgefräst, aber einen
internen Quarz habe ich nicht gefunden. Wo sind die?
Wo muss ich suchen?

von Patrick R. (patrick_r13)


Lesenswert?

Walter S. schrieb:
> hast du die Meldung vielleicht ignoriert?
> Warning  1  #warning "Compiler optimizations disabled; functions from
> <util/delay.h> won't work as designed"

also Warnungen sind keine aufgetaucht, aber ich hab jetzt mal mit den 
Optimizations gespielt und bin jetzt der Lösung deutlich näher, aber die 
Kamera löst immer noch nicht aus, d.h. die Zeiten die ausgegeben werden 
sind immer noch nicht identisch mit denen im Quellcode.

von Der chaot (Gast)


Lesenswert?

ansonsten hätte ich ganz prakmatisch gesagt klemm nen oszilloskop dran 
und schau ran was rauskommt. da du denke ich mal aber selbiges nicht 
hast wprde ich versuchen den verzögerungsfaktor des singals hochzudrehen 
und eine led dranklemmen.....umzugucken ob da überhaupt was gescheites 
ankommt..... oder ob es an was anderes liegt.

einstreuendes licht von einer leuchtstoffröhre falshgepolte bauteile 
oder sonst was.

von Der chaot (Gast)


Lesenswert?

holger schrieb:
> Ich hab jetzt schon hunderte von uC aufgefräst, aber einen
> internen Quarz habe ich nicht gefunden. Wo sind die?
> Wo muss ich suchen?

war die frage jetzt ernsthaft gemeint? ok ich habe mich nicht korrekt 
ausgedrückt soviel ich weiss haben die meisten amtegas einen internen 
oszillator. (und keinen quarz wie ich oben behauptet habe)

den man mit hilfe der fusebust ein stellen kann

http://www.google.de/#sclient=psy-ab&hl=de&source=hp&q=atmega+interner+oszillator&pbx=1&oq=atmega+interner+os&aq=0&aqi=g1&aql=&gs_sm=3&gs_upl=9918l10202l2l11331l2l2l0l0l0l0l380l380l3-1l1l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=c2b540a2117ea26e&biw=1680&bih=911

von Grml (Gast)


Lesenswert?

Au weija, wieder ein Thread mit Nullblickern und Ironielegasthenikern. 
Das ist ja immer heiter.

von holger (Gast)


Lesenswert?

>Au weija, wieder ein Thread mit Nullblickern und Ironielegasthenikern.

Klar, der OP hat nur noch nicht gerafft das das

-SUT_CKSEL INTRCOSC_1MHZ_6CK_64ms

wohl kaum geeignet ist um exakte Zeiten im us Bereich auszugeben.

_delay_us(12.5);

Das geht damit einfach nicht.

Also: Internen Takt mal auf 8MHz schrauben oder
einen 16MHz Quarz dranpappen. Dann sieht die Welt
gleich viel besser aus.

Und wenn man die IR Ausgabe mit einem Timer macht
dann sieht es noch viel entspannter aus.

Oder in der Codesammlung mal nach IRMP suchen.
Da kann er sich vieleicht ein paar Anregungen holen.

von der chaot (Gast)


Lesenswert?

holger schrieb:
> Klar, der OP hat nur noch nicht gerafft das das
>
> -SUT_CKSEL INTRCOSC_1MHZ_6CK_64ms
>
> wohl kaum geeignet ist um exakte Zeiten im us Bereich auszugeben.


Dass das mit dem delay_us(12.5); nicht funktionieren kann ist klar. Das 
bedarf keiner Diskussion. aber warum hast du das
> -SUT_CKSEL INTRCOSC_1MHZ_6CK_64ms
gepostet? ist der interne Quarz so ungenau? ich versteh den Zusammenhang 
nicht.

von der chaot (Gast)


Lesenswert?

oder wolltest du damit einfach nur sagen dass 1Mhz zu wenig sind??

von Walter S. (avatar)


Lesenswert?

der chaot schrieb:
> INTRCOSC_1MHZ_6CK_64ms
> ist der interne Quarz so ungenau

INTRCOSC steht nicht für interner Quarz, sondern für ?

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.