Inzwischen habe ich eine Platine dafür entwickelt und bin dabei die Firmware zu verfeinern und zu testen:
Bei drei Herausforderungen brauche ich ein wenig 'Anschubhilfe' von Euch:
1. Die mit der Uhr gemessenen Fahrzeiten (=Bestromungszeiten des Veluxmotors) sind ca. doppelt so groß, wie im WebUI eingegeben. Es wird ein Arduino Pro Mini mit 8 MHz Resonator als Taktquelle verwendet. Wenn der Takt durch geeignete Einstellung der Fuses auf Pin B0 nach draußen gegeben wird, kann ich 7,957 MHz Taktfrequenz messen, also OK. Die kleine Abweichung erklärt also nicht die ca. 2x Abweichung der Fahrzeiten. Wie kann ich die Fahrzeit richtig einstellen? In AsksinPP/Blind.h fand ich nicht den richtigen Ansatzpunkt.
EDIT: Ein 'Restore Config' unter RM devconfig ändert nichts:
2. Beim Programmieren mit avrdude mit der Kommandozeile, sowohl beim Setzten der Fuses als auch beim Flashen eines neuen Hex Files bekomme ich unter Linux OS immer beim ersten Aufruf die Fehlermeldung
Code: Alles auswählen
Using Port : usb
Using Programmer : stk500v2
avrdude: usbdev_open(): cannot open device: Input/output error
avrdude: usbdev_open(): did not find any USB device "usb" (0x03eb:0x2104)
3. Der 'Batteriebetrieb' wird von NiMH-Akkumulatoren versorgt. Eine Spannungsmessung im Sketch am Ende eines Schaltvorgangs funktioniert bereits. Nun sollen die Akkus über einen Widerstand R18 und schaltbaren FET Q3 und eine Diode D10 aufgeladen werden, wenn die Akkuspannung unter eine Mindestspannung fällt und bis eine Maximalspannung nicht überschritten wird. Frage: Wie kann ich (einfach) eine periodische Messung der Akkuspannung durchführen, z.B. alle 20 Minuten, und dann basierend auf den Spannungsvergleichen den LadeFET ein- oder ausschalten? Kann ich das mit einem zweiten Messkanal machen, z.B.
Code: Alles auswählen
class Channel2 : public Channel<Hal, List1, EmptyList, List4, PEERS_PER_CHANNEL, List0>, public Alarm {
public:
Channel2 () : Channel(), Alarm(0) {}
virtual ~Channel2 () {}
virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
seconds2ticks(MEASUREMENT_INTERVAL);
//...
}
void setup(Device<Hal, List0>* dev, uint8_t number, uint16_t addr) {
Channel::setup(dev, number, addr);
sysclock.add(*this);
}
void init() {
//...
}
uint8_t status () const {return 0;}
uint8_t flags () const {return 0;}
};
Vielen Dank im Voraus für Eure Hilfe!