Frequenzberechnung mit Input Capture

Gast #673076
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!
Gast
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
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 19 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.