Nochmals zur Einführung: Ich möchte gern ein 15 Jahre altes Modellauto auf digitale Fernsteuerung umbauen. Die Funke ist gekauft, die H-Brücke ist gebaut und getestet, alles ist ins Auto eingebaut. Als Fahrtenregler soll ein Attiny45 dienen, den ich entweder über AVR Studio 5.1 oder über einen Arduino Uno programmieren möchte. Da es bei mir nicht anders geht (weil ich definitiv zu dumm bin) muss ich mit Arduino 0.22 arbeiten.
Nun zum Problem: Bei mir verharken sich regelmäßig Arduino Befehle und AVR GCC Software. Zum Beispiel habe ich eine softwaremäßige PWM programmieren müssen, weil ich den Befehl writeAnalog auf dem Attiny nicht zum Laufen kriege. Ich habe alle Pins (bis zur Nummer 25) probehalber in den Befehl analogWrite (PIN, Teil_von_1024) reingeschrieben, es blinkte jeweils nur sinnlos vor sich hin. Also Software für PWM genutzt. Den Timer0 habe ich so eingestellt, dass er eine effektive Frequenz von 40 Hz realisierte, hat auch prima hingehauen, bis ich mittels pulseIn versucht habe den Empfänger der Fernsteuerung auszulesen. Just dann gab es keine Software-PWM mehr, weil es plötzlich Interrupts nicht mehr gibt. (Das der Befehl pulseIn für die Dauer der Messung, also in meinem Fall für max. 2 ms lahmlegt, war mir schon klar, dass es aber gar keine Interrupts mehr gibt?)
Gut habe ich mir gesagt, also auch noch dass in die Software rein. Da es nicht so genau drauf ankommt, habe ich mir gedacht, misst einfach am Anfang jeder Schleife. Wenn du ein paar microsekunden verpasst, dann ist das nicht so schlimm, es wir ja oft genug gemessen.
Daraus ergab sich folgender Code:
void loop() {
if ((PINB & 0b00010000) && (run=0)) {
Start = millis();
run = 1;
}
if ((!(PINB & 0b00010000)) && (run = 1)) {
Impulsdauer = millis() - Start;
run = 0;
PORTB = 0b00001111;
delay(2000);
PORTB =0b000000000;
delay(2000);
}
}
Ich sags nochmal deutlich, dass ist eine Probe!
Was mich an der ganzen Sache fasziniert ist die Tatsache, dass die LED, die an PB0, PB1, PB2 oder PB3 angeschlossen werden kann, dauerhaft leuchtet! Obwohl sie nur 2 sec. lang leuchten sollte. Warum tut sie das?
Normalerweise habe ich das alles mit der bekannten und so beliebten Syntax mit Bitshift und allem Drumherum geschrieben, aber für micht ist das so besser lesbar!
Danke für Eure Antworten!