Show Posts
Pages: [1]
1  Forum 2005-2010 (read only) / Troubleshooting / Re: Changing Pin settings of an IR Library on: January 18, 2011, 02:16:51 pm
Wow thats some great info! Thanks very much. I still have my trouble understanding every part, but know I have something to begin with.

Theres one thing I question myself:
Should I use an Mega and edit the IR Lib, or should I buy an Arduino Mini/Nano and connect it to the Uno?
On the cost side, an Mega or an Uno+Mini is relatively equal.
So the real question should be: Can I use the IRremote lib on a Nano/Mini without problems?
2  Forum 2005-2010 (read only) / Troubleshooting / Re: Changing Pin settings of an IR Library on: January 17, 2011, 02:05:52 pm
hmm, thats not exactly the answer I was looking for...
Okay than, what I'm trying to do is an Lazer-Tag system with one device for receiving (aka "Shield") and another one for sending (aka, the "Tagger").
My "Tagger" will have an IR LED (surprise) a bunch of LEDs (about 6 at least), some kind of "recoil"-system, probably involving an electromagnet, some triggers (~3) and an switch for team selection.

I already have big problems keeping under the 1k SRAM limit, so I guess I should really start thinking on using an Mega on the Tagger side.

If I do so, can you explain to me, what I can try to do, to change the used timer & pin in the IR Lib?
(Because stopping the project or pass on sound is not an option  smiley-wink )
3  Forum 2005-2010 (read only) / Troubleshooting / Changing Pin settings of an IR Library on: January 16, 2011, 11:16:40 am
Hi,

I am trying to use both the Adafruit Wave Shield and the IR Library from http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

The problem is, both use pin 3! Changing the pin on either one is sadly not as trivial as I wished, so I hope someone here can help me out.

I decided to change the pin used by die IR Library since it's the smaler one...

So there are 3 relevant methods that needs to be changed:

The first two are relatively self explanatory.
Code:
void IRsend::mark(int time) {

  // Sends an IR mark for the specified number of microseconds.
  // The mark output is modulated at the PWM frequency.
  TCCR2A |= _BV(COM2B1); // Enable pin 3 PWM output
  delayMicroseconds(time);
}
Code:
void IRsend::space(int time) {

  // Sends an IR space for the specified number of microseconds.
  // A space is no output, so the PWM output is disabled.
  TCCR2A &= ~(_BV(COM2B1)); // Disable pin 3 PWM output
  delayMicroseconds(time);
}

The third one gives me headaches...
Code:
void IRsend::enableIROut(int khz) {
  // Enables IR output.  The khz value controls the modulation frequency in kilohertz.
  // The IR output will be on pin 3 (OC2B).
  // This routine is designed for 36-40KHz; if you use it for other values, it's up to you
  // to make sure it gives reasonable results.  (Watch out for overflow / underflow / rounding.)
  // TIMER2 is used in phase-correct PWM mode, with OCR2A controlling the frequency and OCR2B
  // controlling the duty cycle.
  // There is no prescaling, so the output frequency is 16MHz / (2 * OCR2A)
  // To turn the output on and off, we leave the PWM running, but connect and disconnect the output pin.
  // A few hours staring at the ATmega documentation and this will all make sense.
  // See my Secrets of Arduino PWM at http://arcfn.com/2009/07/secrets-of-arduino-pwm.html for details.

  
  // Disable the Timer2 Interrupt (which is used for receiving IR)
  TIMSK2 &= ~_BV(TOIE2); //Timer2 Overflow Interrupt
  
  pinMode(3, OUTPUT);
  digitalWrite(3, LOW); // When not sending PWM, we want it low
  
  // COM2A = 00: disconnect OC2A
  // COM2B = 00: disconnect OC2B; to send signal set to 10: OC2B non-inverted
  // WGM2 = 101: phase-correct PWM with OCRA as top
  // CS2 = 000: no prescaling
  TCCR2A = _BV(WGM20);
  TCCR2B = _BV(WGM22) | _BV(CS20);

  // The top value for the timer.  The modulation frequency will be SYSCLOCK / 2 / OCR2A.
  OCR2A = SYSCLOCK / 2 / khz / 1000;
  OCR2B = OCR2A / 3; // 33% duty cycle
}


I can't wrap my head around these timer, and hardware pin names.
So I want the lib to use pin 6 instead of pin 2, if someone here can explain to me, what I need to do for this, or if it is possible anyway, I would be very thankful!
4  Forum 2005-2010 (read only) / Development / Re: Any tips to keep memory usage as low as possible? on: January 18, 2011, 03:56:20 am
Tanks, I tried the lib Coding Badly suggested and it Works flawless!
Need to test out how much memory I saved this way, though.
5  Forum 2005-2010 (read only) / Development / Re: Any tips to keep memory usage as low as possible? on: January 17, 2011, 12:06:32 pm
Tanks, but i don't understand your code  ;D

What I tried now:
I put

extern prog_char SOUND_P[];

in my often included System.h header file, and put
prog_char SOUND_P[] PROGMEM = "Sound.wav";

In one source file.

So it compiles fine, but when I call
char buffer[13];
strcpy_P(buffer, (char *)pgm_read_word(&SOUND_P));

My Arduino just restarts  smiley-sad
6  Forum 2005-2010 (read only) / Development / Re: Any tips to keep memory usage as low as possible? on: January 17, 2011, 11:09:07 am
I tried using PROGMEM to store my strings, but I get "multiple definition of" error messages.

I've put
Code:
prog_char SOUND_TEST_P[] PROGMEM = "Test.wav";
in my "System.h" header file wich is included in many other classes. I presume the later is causing the problem.

But how can I use PROGMEM to store my strings and still be able to use it globally in my Sketch?
7  Forum 2005-2010 (read only) / Development / Re: Any tips to keep memory usage as low as possible? on: January 16, 2011, 11:20:24 am
Thank you both! I didn't know that.
8  Forum 2005-2010 (read only) / Development / Re: Any tips to keep memory usage as low as possible? on: January 15, 2011, 10:41:19 pm
Tanks very much.
I will try to use progmem and see if it works for my sketch!

But I discovered something else i hope anyone here can explain to me:

My Sketch has a rather large collection of classes i use to control LED Displays, IR Emitter,...
So i made an "System.h" header file where I store some options, as well as static objects from my classes (since I will only need one instance from each anyway)

It looks like this:

#ifndef SYSTEM_H
#define SYSTEM_H

#define OPTION 1
#define SOMEOTHEROPTION 2

static StupidClass foo;

#endif

The point of this was, that I am able to reach my options and objects from anywhere in my Code by including the System.h. And to modify my options in one single place.

The problem is, I discovered that including my Header file consumes about 100 bytes every time!
9  Forum 2005-2010 (read only) / Development / Any tips to keep memory usage as low as possible? on: January 15, 2011, 08:24:14 pm
Hi,

Are there any tips or good practices for keeping the memory usage as low as possible?
I'm using 2 libraries plus my own classes right now and kinda hit the limit of the Unos ram  :smiley

So are there any advanced memory-saving tips?
10  Forum 2005-2010 (read only) / Deutsch / Re: IR Sensor gegrillt? Wie überprüfen? on: January 16, 2011, 11:19:33 am
Vielen dank für die Tips!

Ich habe in der zwischenzeit einiges ausprobiert und mittlerweile funktioniert der IR Empfang an jedem Pin.
Was das Problem war kann ich leider nicht genau sagen, weil es irgendwann einfach so funktioniert hat  :-/
Irgendwo in meinem Code hat sich wohl ein kleiner fehler eingeschlichen.. smiley-wink

Aber nochmal danke für eure Hilfe!
11  Forum 2005-2010 (read only) / Deutsch / Re: IR Sensor gegrillt? Wie überprüfen? on: January 14, 2011, 03:21:37 pm
Danke ich hab jetzt etwas herrumprobiert und bin zu dem Ergebniss gekommen das mein Sensor nur Ergebnisse liefert wenn er an Pin 2 angeschlossen ist!

Klar hab ich immer drauf geachtet bei allen Sketches auch immer den richtigen IR Pin anzugeben.
Aber jetzt habe ich 2 Sketches und die meißten Digitalen Pins durchprobiert, und ausschließlich an Pin 2 empfange ich etwas!

Kann mir da jemand erklären? Ich habe zuerst gedacht das hat vielleicht etwas damit zu tun das Pin 2 und 3 für den Interrupt verwendet werden, aber an Pin 3 habe ich auch nichts Empfangen können...
12  Forum 2005-2010 (read only) / Deutsch / IR Sensor gegrillt? Wie überprüfen? on: January 14, 2011, 02:53:56 pm
Hallo,

Ich bin grade ein wenig mit dem Empfangen und Senden von IR über den Arduino beschäftigt.
Nachdem mein erster Testaufbau gescheitert war (Der Sensor konnte die Signale meiner Fernseh-Fernbedienung nicht erkennen) habe ich nun einen Minimalaufbau mit einem Sensor gemacht.

Der Aufbau sieht auf wie hier auf Seite 9
http://www.parallax.com/dl/docs/prod/sic/WebIR-%20v1.1.pdf

Mein Sensor ist ein TSOP4838
http://www.vishay.com/docs/82090/tsop48xx.pdf

Als Testprogramm habe ich diesen Code genommen:
http://www.arduino.cc/playground/Code/InfraredReceivers
(Natürlich auf den richtigen IR Pin geachtet)


Leider erkennt der Arduino mit dieser Konfiguration immer noch keine IR Signale.
Muss ich mir sorgen machen das ich evt. meinen IR Sensor gerillt habe? bzw. wie kann ich das sicher herrausfinden?
13  Forum 2005-2010 (read only) / Deutsch / Re: Zu viele Bauteile für Arduino Uno? on: January 04, 2011, 06:50:23 pm
Mit dem Arduino hab ich noch nie etwas gemacht, aber in Sachen Mikrocontroller hab ich schonmal im Studium eine ein bisschen was gemacht, und aus Programmierer Sicht gefällt mir der Arduino wunderbar, also da mache ich mir keine Sorge.
Nur was die Elektrotechnik angeht, da geht ohne Anleitung nix bei mir.
(Dafür hab ich da den ein oder anderen bei dem ich nachfragen könnte, abgesehen vom Internet eben)

Achso, und hier der Link zu dem Wave Shield das ich meine:
http://www.watterott.com/de/Adafruit-Wave-Shield
14  Forum 2005-2010 (read only) / Deutsch / Zu viele Bauteile für Arduino Uno? on: January 04, 2011, 03:23:36 pm
Hallo,

Ich bin grade kurz davor mein erstes Arduino Projekt zu starten, aber bin mir unschlüssig ob mit meinen Anforderungen nicht an die grenzen eines Uno stoßen.
Deswegen wollte ich hier mal eine Frage an die werten Mit-Bastler richten, die schon wesentlich mehr Erfahrung haben als ich.

Hier meine Liste von Dingen die ich verbauen möchte:
7 LEDs, ein Elektromagnet, Ein Wave Shield, 2 Taster
Besonders wegen dem Wave Shield mache ich mir sorgen ob das mit dem Pins überhaupt so hinkommen kann?

Nebenbei: Das Wave Shield (Von watterott, den Link darf ich nicht Posten..) hat einen SD Karten Slot für die Töne, ist es auch möglich dort eine Konfigurationsdatei zu speichern und diese dann auszulesen? Oder ist der SD Slot nur von dem Shield benutzbar?
Pages: [1]