mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzberechnung mit Input Capture


Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo!
Momentan möchte ich die Frequenz eines Rechtecksignals bestimmten. Dazu 
nutzte ich den Input Capture des Conters 1, des Mega88. Bei jeder 
steigenden Flanke bekomme ich ein Ergebnis.
Läuft alls ganz gut. Ich bekomme die Werte speichere sie zwischen und 
möchte sie nun auswerten. Dazu ziehe ich jeweils den neueren Wert von 
ältern ab. Nun beginnt mein Problem.
Wenn der alte Wert kurz vor dem Endewert des Zählers ist(0xFE) und der 
neue Wert kurz nach dem Überlauf (also z.B.0x40) kann ich ja nicht mehr 
ohne weiters die beiden weiter von einander abziehen. würde ja 
minuswerte bekommen.
Hat jemand eine Ahnung wie das lösen kann. Ich brauche ja eigentlich nur 
den Betrag.
Eine Lösung hätte ich schon nur weiss ich nicht ob die auch so ohne 
weiteres geht. Ich würde einfach überprüfen ob nach der Subtraktion der 
beiden Zahl das Negativ Flag gesetzt ist und wenn das der Fall ist in 
eine andere Schleife springen und dort einfach den Wert mit 0xFF 
addieren. schon hätte ich den Betrag wieder.
geht das alles so, wie ich mir das vorstelle oder gibt es da "ärger"?
ich habe mal gelesen dass es zu solchen fragestellung eine ap-note von 
atmel gibt. weiss jemand wo ich dies finde und wie die heisst!
Vielen dank schon mal für eurer Antworten!
schönen abend noch!

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> würde ja minuswerte bekommen.

Ein vorzeichenloser 8-Bit Wert hat per Definition kein Vorzeichen, kann 
also nicht negativ werden, und rechnet zudem in C modulo 256. Folglich 
gilt 0x40 - 0xFE = 0x42.

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für deine Antwort!
dann kann ich also ohne Problem die beiden High-Werte und die beiden 
Low-Werte von einander abziehen und dann zu einer Zahl zusammen fügen.
und das negativ bit in SREG ist auch ohne bedeutung?
verstehe ich das richtig?
danke nochmal

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mike wrote:
> danke für deine Antwort!
> dann kann ich also ohne Problem die beiden High-Werte und die beiden
> Low-Werte von einander abziehen und dann zu einer Zahl zusammen fügen.

Du rechnest offenbar in Assembler :-)

Ja das kannst du.
Aber bitte zuerst die Low-Bytes behandeln und dann erst die
High-Bytes unter Berücksichtigung eines eventuellen Carries.

Du solltest dir abgewöhnen, die beiden Bytes getrennt zu sehen.
Du hast eine 16-Bit Zahl, die aufgrund technischer Gegebenheiten
in 2 Register gespeichert werden muss. Aber die Addition 2-er
16 Bit Zahlen wird durch die Befehlssequenz (anstelle eines
Einzelbefehls)
      add  r17, r19
      adc  r18, r20
(am Beispiel der Zahlen in r18:r17 und r20:r19), bzw. die
Subtraktion 2-er 16-Bit Zahlen durch die Sequenz
      sub  r17, r19
      sbc  r18, r20
gemacht. Das muss dir in Fleisch und Blut übergehen. Wenn von
16 Bit Zahlen die Rede ist, dann muss dein Gehirn sofort auf
Registerpärchen umschalten und für Addition, Subtraktion, Vergleich
und dergleichen in Befehlssequenzen denken.

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nochmals danke für die antwort!
ja ich rechne in assembler!
werde mich damit noch genauer befassen und eure anmerkungen 
berücksichtigen!
falls ich noch weitere fragen habe,melde ich mich nochmal!
vielen dank nochmals und schönen abend zusammen!

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.