Man könnte ja auch davon ausgehen, dass wir dann einfach einen externen, schnelleren ADC benutzen.
Meine Fragestellung zielt allein auf schnelleren Code.
Druckbare Version
Man könnte ja auch davon ausgehen, dass wir dann einfach einen externen, schnelleren ADC benutzen.
Meine Fragestellung zielt allein auf schnelleren Code.
Die ADC-register sollten eigentllich gepuffert sein und immer das Ergebins der letzten gültigen Wandlung geben.
Zumindestens nach dem Datenblatt macht es mit dem internen ADC keinen Sinn, schneller zu werden als 26 Zyklen. Wenn man einen eventuellen Fehler unterstellt vielleicht noch 13 Zyklen.
Die 26 Zyklen sollte man in C erreichen, die 13 Zyklen vielleicht auch noch. In ASM sind beide Genrzen keine Problem.
Ein optimierte ASM Version wäre z.B. so:
IN ADCH bzw. PORT
st x+, ...
cpi xl,...
BRNE ...
Das sollten also 3 Zyklen voll ausgeschrieben, bzw. 6 Zyklen mit Schleife sein. ggf. Auch ein mittlerer Wert mit verdoppelter Schleife.
Dabei sollte ich aber prüfen, ob der Speicherpointer nicht nach ein paar Takten überläuft, so dass ich das High-Byte erhöhen müsste, weil das ja hier nicht vorkommt, korrekt?
Die Befehle mit dem X+ usw. arbeiten mit 16 Bit Zeigern (Xh,Xl). Man muß also nur sehen das man nach der richtigen Zahl von Elementen anhält. Bei mehr als 255 Werten müßte man den Vergleich am Ende der Schleife anpassen.
Genau, das meinte ich ja.