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!
> 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.
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.