Show Posts
Pages: 1 [2] 3 4
16  International / Deutsch / Weitere und ernste Probleme mit Fahrtenregler on: December 19, 2012, 05:31:28 pm
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:

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!
17  International / Deutsch / Verständnisfrage zum Takt on: December 12, 2012, 02:44:59 pm
Ich habe folgendes kleines Problem beim Programmieren des Attiny45. Ich habe den gekauft und habe aus dem Internet entnommen, dass der standdardmäßig mit 8MHz internem Oszillator getaktet wird. Ich habe mir mit AVR Studio 5.1.208 die Fuses angeschaut, und es sieht wie folgt aus:


Code:
SELFPRGEN = [ ]
RSTDISBL = [ ]
DWEN = [ ]
SPIEN = [X]
WDTON = [ ]
EESAVE = [ ]
BODLEVEL = DISABLED
CKDIV8 = [X]
CKOUT = [ ]
SUT_CKSEL = INTRCOSC_8MHZ_6CK_14CK_64MS

EXTENDED = 0xFF (valid)
HIGH = 0xDF (valid)
LOW = 0x62 (valid)

Daraus geht meines Erachtens hervor, dass das Ding tatsächlich mit 8MHz läuft.
Jetzt habe ich folgenden Programmteil ausprobiert und festgestellt, dass die richtigen Zeiten nur rauskommen, wenn ich anstelle von 8MHz 1MHz angebe. Frage, Läuft der Chip mit 8 oder mit einem MHz?

Code:
    #define F_CPU 1000000                    // clock 1.0 MHz, internal oscillator

    #include <avr/io.h>
    #include <util/delay_basic.h>
    #include <avr/interrupt.h>

    #define LED PB4

void delay_ms(uint16_t ms){
  while (ms > 0) {
    _delay_loop_2(F_CPU/4000);
    ms--;
  }
}
   
    ISR (PCINT0_vect)               // Interrupt on PCINT0 vector
    {
    PORTB ^= (1 << LED);               // Toggle LED
    delay_ms (500);
    PORTB ^= (1 << LED);               // Toggle LED

    }




int main(void)
{

    GIMSK = _BV (PCIE); // Pin Change Interrupt Enable
    PCMSK = _BV (PCINT3); // Enable external interrupts PCINT3, PB3
    // MCUCR = 0x00;    // PCINT0 is triggered on rising edge
    sei(); // int - Global enable interrupts
    DDRB |= (1 << LED); // Set direction register output

        for (;;) {                  // loop (endless)
          asm("NOP");
        }

    return 0;
}

In dem ganzen Codeschniplsel geht es nur um die Zeile #define F_CPU und delay_ms(500). Wenn ich 8.000.000 angebe, dann dauert das nicht eine halbe Sekunde, sondern ganze vier Sekunden.
18  International / Deutsch / Re: Attiny 45 programmieren on: December 07, 2012, 12:31:33 pm
Ich bin nochmals zurück auf Los und habe in einem weit entfernten Verzeichnis Arduino 0.22 installiert. Dann habe ich, wie gefordert, ein neues Verzeichnis namens Hardware angelegt. Dort hinein habe ich die Files aus attiny45_85 gespielt, und siehe da, es funktioniert, sprich, es blinkt.

Ob ich es noch mit Arduino 1.0.X versuche, weiß ich noch nicht.

Herzlichen Dank für Euer Bemühen.

ArduStemmi
19  International / Deutsch / Re: Attiny 45 programmieren on: December 07, 2012, 11:30:25 am
Ich habe es nun auch noch mit arduino 0.22 versucht. Dazu fand ich cores etc. auf dieser Seite:
http://www.instructables.com/id/Program-an-ATtiny-with-Arduino/step5/ATtiny-core-files/.

Wieder ohne jeden Erfolg.
20  International / Deutsch / Re: Attiny 45 programmieren on: December 07, 2012, 10:57:22 am
Ich habe die Arduini IDE neu installiert, die angegebe Datei in den ...\Arduino\hardware\ Pfad gestellt, kein Erfolg. Die Fehlermeldung lautet:


In file included from d:\my documents\Arduino\arduino-1.0.2\hardware\arduino\cores\arduino/Arduino.h:193,
                 from Blink.ino:10:
d:\my documents\Arduino\arduino-1.0.2\hardware\arduino\cores\arduino/HardwareSerial.h:125:2: error: #error TXC0 not definable in HardwareSerial.h

Wer hat weitere gute Ideen!

21  International / Deutsch / Re: Attiny 45 programmieren on: December 07, 2012, 09:35:17 am
Ja den Arduino habe ich mit der Arduino 1.0.2 IDE mit dem Programmer bespielt.

Werde es gleich noch einmal versuchen!

22  International / Deutsch / Re: Attiny 45 programmieren on: December 07, 2012, 09:16:00 am
Im Wesentlichen habe ich es so gemacht, wie es hier
http://www.sachsendreier.com/asw/clernen/arduinoasisp/arduinoasisp.html
zu sehen ist.

Einen TinyCore habe ich auch runtergeladen und in die Ordnerstruktur eingebunden unter hardware/arduino/core.

23  International / Deutsch / Attiny 45 programmieren on: December 07, 2012, 08:18:11 am
Seit geraumer Zeit versuche ich erfolglos, einen Attiny 45 mittel Arduino UNO als Programmer zu programmieren. Ich habe jetzt so ziemlich alle entsprechenden Tutorials probiert und auch alle verünftigen Arduino Versionen (0.22, 1.0, 1.0.1, 1.0.2). Ich schaffe es nicht. Es blinkt eben nicht. Die Fehlermeldung lautet:

In file included from D:\My Documents\Arduino\arduino-1.0.2\hardware\arduino\cores\arduino/Arduino.h:193,
                 from Blink.ino:10:
D:\My Documents\Arduino\arduino-1.0.2\hardware\arduino\cores\arduino/HardwareSerial.h:125:2: error: #error TXC0 not definable in HardwareSerial.h


Wer kann mir bitte weiterhelfen?

Als Alternative steht noch ein AVRISP mkII Programmer zur Verfügung. Auf einem Weg muss es klappen!

24  International / Deutsch / Fahrtenregler mit Arduino, noch'n Problem on: December 03, 2012, 08:21:21 am
Im vorangegangenen thread hatten wir die grundsätzliche Eignung der Arduino-Befehle pulseIn() und analogWrite() für die Übersetzung von Empfängersignalen in H-Brücken-taugliche Pulse gesprochen. Das hat sich bewährt, es funktioniert.

Nun möchte ich den Strom messen, der während der High-Phasen durch die LowSide MOS Fets fließt. Das ich dazu nur die Spannung messen muss weiß ich, auch das ich das Ergebnis mit RDSon multiplizieren muss.

Ich weiß jedoch nicht, wann die Signale High sind, weil das ja Arduino über Hardware macht. Denn analogWrite ist ja nichts anderes als der Befehl an den Timer, jetzt PWM zu machen, oder?
25  International / Deutsch / Re: Fahrtenregler mit Arduino bauen on: November 30, 2012, 01:19:49 am
490 Hertz! Das ist ja interessant. Mal sehen, was der alte Regler gepulst hat.
26  International / Deutsch / Re: Fahrtenregler mit Arduino bauen on: November 29, 2012, 04:31:15 pm
Das ist genau, wonach ich gesucht habe. Danke Uwe.

Ich habe im Netz ganz viele Begründungen für hohe Frequenzen und für niedrige Frequenzen gelesen. Das hängt unter anderem von der Bauart der Motore ab. Da ich so wenig über meine Motoren weiß, werde ich die Taktfrequenz der bisher verbauten H-Brücke messen und diese Frequenz am Arduino (bzw. am Attiny, denn soll's am Ende werden) einstellen.

Bis bald!
27  International / Deutsch / Re: Energiesparen bei Batteriebetrieb on: November 29, 2012, 02:46:48 pm
Leute regt Euch nicht auf, den Spannungsregler hatte ich schon bei Einbau der Batteriebox entfernt.

PIR Sensor klingt interessant. Was ist das?
28  International / Deutsch / Re: Energiesparen bei Batteriebetrieb on: November 29, 2012, 01:38:51 pm
Gute Idee!
29  International / Deutsch / Re: Fahrtenregler mit Arduino bauen on: November 29, 2012, 01:37:19 pm
Das haben wir jetzt, denke ich, ausreichend beleuchtet. Schon naht eine neue Frage.

Ich kann beim Arduino eine PWM über analogWrite realisieren. Meine Frage: Kann ich auf einfache Weise die Frequenz der PWM beeinflussen?
30  International / Deutsch / Energiesparen bei Batteriebetrieb on: November 29, 2012, 01:21:34 pm
Ich habe meinem Sohn eine Uhr gebaut, deren Zeitanzeige den BCD Code verwendet. Dazu hängen am Atmega328P ein RTC 1307, ein Temperatursensor DS1621, ein MAX7221 mit 24 blauen LED's und ein StandardLCD Display.
Leider hat sich erst ganz zum Schluß herausgestellt, das das Ding an eine Wand gehängt werden soll. Damit ist Batteriebetrieb Pflicht. Da ich das niemals betrachtet hatte, habe ich auch nie auf Energieverbrauch geachtet. nun läuft das Ding und zieht alle zwei Tage einen Satz Batterien 4xAA leer. ich muss also den Energieverbrauch meiner Schaltung dramatisch reduzieren.
Zuerst einmal werde ich alle Anzeigen in der Nacht und in der Schulzeit ausschalten. Des Weiteren werde ich die Abfragen der Sensoren sehr viel seltener durchführen.
Damit endet meine Weisheit, habt Ihr noch Tipps?
Pages: 1 [2] 3 4