ADC=10 bit MSB=2,5V. Alle Bits gesetzt. 4,999.. =Hbyte= 00000011 Lbyte= 11111111. Hat jemand in AVR Assembler eine Routine um 4999 (5,000) darzustellen oder ähnlich?. Die Geschichte mit der Div durch 10 + Hez Offset ist bekannt.
Hallo, etwas aehnliches hatte ich mal gemacht, um den ADC Rohwert per UART auszugeben. Der ADC-Wert wird erwartet in Registern binH und binL. Gerhard ;-------------------------------------------------- sendDecimal: ldi decH, high(10000) ldi decL, low(10000) rcall bin2digit ldi decH, high(1000) ldi decL, low(1000) rcall bin2digit ldi decH, high(100) ldi decL, low(100) rcall bin2digit ldi decH, high(10) ldi decL, low(10) rcall bin2digit ; Einser-Stellen bleiben übrig mov digit, binL rcall sendDigit ret ;-------------------------------------------------- bin2digit: clr digit label1: ; vergleichen mit 10er-Potenz cp binH, decH brlo label3 brne label2 cp binL, decL brlo label3 label2: ; 10-er Potenz abziehen sub binL, decL sbc binH, decH inc digit rjmp label1 ; neu testen label3: rcall sendDigit ret ;-------------------------------------------------- sendDigit: subi digit, -48 ; addi gibt es nicht mov send, digit rcall transmit ret
Verstehe ich das richtig wenn ich in binH dez 3 lade und in binL dez 255 (alle bit 10 bit gesetzt) das ich den 50 00 erhalte ?
Hallo, die Version von Gerhard hatte leider nicht die Transformation drin: 0 ---> 0 1023 ---> 5000 Eine Lösung (sollte ich mir patentieren lassen ;-) ) für das Problem lautet: index: 0 1 2 3 4 5 6 7 8 9 val: 5 10 20 39 78 157 314 625 1250 2502 Diese Zahlenfolge stellt ein Zahlensystem dar. Die Eigenschaft jeder Zahl ist, daß sie größer als die Summe jeder vorangegangen Zahlen ist. Die Gesamtsumme beträgt 5000. Im Binärsystem ist die Folge zum Beispiel: 1 2 4 8 16 etc. Um jetzt deinen 10-Bit ADC-Wert zu konvertieren gehst Du folgendermaßen vor: Pseudocode: Summe = 0; für (i = 0 und i < 10) { Wenn Bit i im ADC-Wert gesetzt, dann Sume = Summe + val[i]; i = i+1 } Das ganze muss man dann noch in Assembler implementieren. Sollte nicht so schwer sein. Grüße Oliver
Hallo Frankl, offensichtlich willst Du mehr als nur den Rohwert dezimal ausgeben :-) Vielleicht hilft Dir dieser Code weiter: ftp://ftp.berlios.de/pub/avrprogger/comtec2002/led-temp.asm Das dazu passende Bildchen findest Du hier: http://www.gnomsoft.de/comtec.html Gerhard
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.