Nochmal: PWM beim 2313

Gast #363777
Hallo,
ich hab ein Problem mit PWM und dem 2313er.
Ich will nur einen simplen Test programmieren...

Funktion: Taste drücken, der inhalt des
verglechsregisters ändert sich, somit auch die
Impuls/Pausenzeit des PWM-Signals

Problem: wenn ich die taste los lasse, nimmt das
vergleichregister wieder den vorherigen wert an.
und ich weiss einfach nicht warum !!!

Könnte sich einer mal dem Code anschauen???

danke schon mal
Angehängte Dateien:
Weil Du zwar den Output Compare Match Interrupt
eingeschaltet hast, aber keine Behandlungsroutine
dafuer hast.
Der Compiler legt standardmaessig die Interrupt-
Tabelle so an, dass sie in einen Reset muenden,
wenn Du keinen Handler dafuer hast.
Da Du keinen Handler fuer den Compare Match hast,
resettet dein Controller staendig und daher ...
beginnt dein Programm immer wieder von vorne.
Gast
Einfacher wäre statt eines leeren Interrupt-Handlers, den Interrupt gar
nicht erst einzuschalten. Wozu schaltest du ihn eigentlich überhaupt
ein, wenn du damit eh nichts tust?

> Wo kann man eigentlich nachlesen wir der compiler den ganzen stack
> anlegt???

Wieso Stack? Was hat der damit zu tun? Das dürfte irgendwo in der
avr-libc-Doku stehen.
Gast
Ja stimmt den Interrupt brauch ich eigentlich gar nicht...

Ich hab zuvor sehr lange Assembler programmiert,
und bin jetzt auf C umgestiegen um etwas mit uC zu machen.
Also würde ich gerne wissen wie der compiler den assembler
code erzeugt, und was er verändert...

Für mich ist es letztendlich schon wichtig wie der Stack im uC steht.
Dann würde ich vielleicht viel schneller in die materie reinkommen.
Moderator Persönliche Seite
> Also würde ich gerne wissen wie der compiler den assembler code
> erzeugt, und was er verändert...

Wenn deine Quelldatei meins.c heißt, dann sagst du einfach auf der
Kommandozeile »make meins.s« und schaust dir die Datei meins.s an.

> Für mich ist es letztendlich schon wichtig wie der Stack im uC
> steht.  Dann würde ich vielleicht viel schneller in die materie
> reinkommen.

Der Stack wird einfach ,von oben', also vom Ende des internen RAMs
nach unten aufgebaut.

Schau dir die avr-libc-Doku an, in der Beschreibung des malloc() habe
ich für das Speicher-Layout zwei oder drei Bildchen.  malloc() und
heap kannst du ja dabei erstmal ignorieren, dann siehst du immer noch,
wo Stack und Variablen liegen.
Gast
> Also würde ich gerne wissen wie der compiler den assembler code
> erzeugt, und was er verändert...


Du kannst Dir ein prima List-File erzeugen lassen, wo die C-Zeilen und
der dazugehörende Assembler untereinander stehen.

Da ich mich mit make-Files nicht auskenne, mache ich alles mit einer
Batch (spart außerdem das Eintragen aller Module, da *.c automatisch
expandiert wird):

----------------------------------------------------------
set mcu=tiny26
set main=test
set ac=c:\avr\winavr
path %ac%\bin;%path%
avr-gcc.exe -xc -Os -mmcu=at%mcu% -Wall -g -o main.out *.c
if not exist main.out goto end
avr-objdump.exe -t -h -S main.out >%main%.lst
avr-objcopy.exe -O ihex main.out %main%.hex
avr-size.exe -B main.out
del main.out
:end
----------------------------------------------------------

Wichtig ist der Schalter -g beim Compiler, damit avr-objdump.exe dann
das Listing erzeugen kann.
avr-size.exe gibt dann noch die belegte Flash/SRAM-Größe aus.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.