Bei 1Mhz
;Call = 3 Takte (3µs)
wait25us:
ldi r20,$20 ;1cc ; 1Takt (1µs)
wait25us1:
dec r20 ;1cc ; 1Takt (1µs)
brne wait25us1 ;1/2cc ; 1Takt bei 0 und 2 Takte wenn !=0 also (1µs oder 2µs)
ret ; 4Takte (4µs)
3µs + 1µs + (32*3µs(!=0) - 1µs(bei 0)) + 4µs = 103µs bei 1Mhz
Ich habs mir mal geschrieben und passe es auf die Frequenz an, ja es geht auch anders und manchmal verwirrend
Ja ADLAR lässt den ADC auf 8Bit schrumpfen somit ist deine Auflösung 5V (AREF) / 256bits = 0,0195..V also 19,5mV pro Bit
Diesen Wert deklarierst du dir als z.B: 195 in der Init und MULTIPLIZIERST du dir dann mit den im ADCH zu Verfügung stehenden BITS z.B.: mit 256 = 49920.
Dein Widerstandsteilerverhältnis ist 3:1 heißt 49920*3 = 149760 den Punkt richtig setzen und du hast deine 14.976V ohne geschönt zu haben.
1. 10,4*255/15 sind verkehrt denn 8bit ADC hat 256 Stufen die 0 gehört mit dazu
richtig also 10,4*256/15 =177,493bits. Abgeschnitten sinds dann nur 177 wie es auch korrekt ist. Aufgrund das dir jetzt aber im Wandler die Nachkommastellen fehlen wirds halt ungenauer.
Nur mit der Multiplikation ist es einfacher
177bits * 195(bits/V) = 34515(V) * Teiler 3 = 103545(V) jetzt nur den Punkt im LCD richtig setzen und du hast deine 10.3545V auf dem LCD, ohne DIVISION.
Nur über FESTKOMMAARETHMETIK
Wo hast denn die Routine her ? Ähm der Rest steht nicht zufällig im DIVIDENT R16 drin mit 7 ??
177/17 = 10, ;10*17 = 170
177 -170 = R 7 ;7/ 17 schwer also 7*10 = 70
70/17 = 4 also 10,4 ;4*17 = 68 somit
70-68 = R 2 ;2/17 schwer also 2*10 = 20
20/17 = 1 also 10,41 ; 1*17 = 17
20-17 = R 3 ; 3/17 schwer also 3*10 = 30
30/17 = 1 also 10,411 usw...
NEIN das Datenblatt weiß mehr als der Simulator ausser es ist unter der Hilfe angegeben. Grundsätzlich aber das Datenblatt ausschlaggebend.
Man kann aber den Timer laufen lassen oder den Prescaler vor den SLEEP-Befehl zu setzen ist nun nicht wirklich kein Problem oder ?
Lesezeichen