mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zustandswechsel Pin durch Zähler


Autor: Marco V. (overmind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich probiere mich gerade etwa in der Programmierung mit C eins MC.

Folgemde Szenario:

Ich lasse eine Variable a mit 8 MHz hochzählrn (a++;).
Wenn a==4000000 dann soll der Pin PB0 getoggelt werden.
Zunächst probierte ich erstmal einen Wechsel, also ohne die Variable a 
zurückzusetzen. Ich dachte jetzt, dass der Pegel an dem PIn nach 0,5s 
seinen Zustand wechselt aber komischerweise wechselt der Zustand erst 
nach ca.6s???

Wenn ich die Variable zurücksetze, dann wechstlt der Zustand alle 
0,6us???

Das verstehe ich nicht so richtig.

Benutze ich die delay-Funktion, dann passt das.

Gruß
Marco

Autor: Helmut S. (helmuts)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> a==4000000

Diese Zeile benötigt mehrere Takte und die wird 4 Millionen mal 
ausgeführt.

Autor: Marco H. (damarco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und vom Wertebereich der Variabel. Wo ja dann der Überlauf stattfindet.

z.Bsp Word,Integer,int16_t, uint16_t  unsigned 65535 signed 32767

a==4000000 weißt auf eine 32bit Variable hin .

: Bearbeitet durch User
Autor: Marco V. (overmind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ok verstehe, der Vergleich brauch mehrere Takte.
Wenn ich jetzt beispielsweise ne PWM erzeugen möchte, dann hätte ich das 
Taktverhältnis über einen Zähler eingestellt. Aber da das nciht so 
funktioniert, wie könnte man das am einfachsten lösen ?

Ich bin da wohl etwas von FPGA`s verwöhnt, denn da lässt sich ein Takt 
mit beschriebenen Prozedere einfach runterteilen.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du nutzt einen der PWM Timer des Controllers.

Autor: Marco V. (overmind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ok, da muss ich mich noch einlesen.

Was ich noch nicht verstehe ist, warum der Wechsel alle 0,6us 
stattfindet, wenn ich die Variable a zurücksetzte? (Also, wenn a == 
4000000)

Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco V. schrieb:
> Wenn ich jetzt beispielsweise ne PWM erzeugen möchte

Dann verwendet man einen Hardware-Timer. Entweder um dierekt das 
PWM-Signal zu erzeugen (Stichwort: output compare) oder um wenigstens 
einen Interrupt auszulösen, in dessen ISR man dann die Arbeit macht 
(Stichwort: Soft-PWM).

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.