Servus,
ich weiß zwar nicht, was die Roomba(581) Virtual Wall sein soll, aber
ein paar Anmerkungen zum Code:
1. Warum kein Brown-Out gesetzt?
Bei 9,6MHz braucht man mindestens ~3V (oder Brown-Out auf 2,7V gesetzt).
Kann vor seltsamen Verhalten schützen.
2. Warum 9,6MHz?
Der Code sollte auch mit 4,8MHz oder noch weniger (dann per Prescaler)
funktionieren, und der Stromverbrauch sinkt um knapp 50% (bei 9,6MHz ==>
4,8MHz) oder noch weiter.
3. Nutzen von IDLE-Mode
Da sich der µC "die ganze Zeit" im _delay_us() befindet bietet es sich
natürlich an, den µC während dieser Zeit schlafen zu legen (IDLE-Mode)
und dann per Interrupt aufwecken zu lassen. Ist halt blöd, daß der
einzige Timer schon fürs PWM verwendet ist.
Ideen:
- TIMER 0 Overflow verwenden und diese "hochzählen"
- Den ADC im free-Run laufen lassen, und per ADC-Interrupt diesen dann
als regelmässige Taktquelle verwenden. Da muß man aber schauen, ob man
per ADC-Prescaler den richtigen Takt hinbekommt.
==> Vorteil: man lernt den µC kennen (das schadet nie) und spart noch
ein paar mA (auch ganz nett)
Gruß